2

如何将 Android OpenGL 中的 Mesh (3dmax) 加载到 ByteBuffer 中?

例子:

float triangleCoords[] = {
    -0.5f, -0.25f      , 0, // 0,
 0.5f, -0.25f      , 0, // 1,
 0.0f, 0.559016994f, 0  // 2,
};

ByteBuffer vbb = ByteBuffer.allocateDirect(triangleCoords.length * _4_FLOAT_LENGTH);
vbb.order(ByteOrder.nativeOrder());
triangleVB = vbb.asFloatBuffer();
triangleVB.put(triangleCoords);
triangleVB.position(0);

如何加载像数组或坐标这样的网格,或者需要一个库来完成这项工作

4

1 回答 1

0

它基本上归结为将文件中的数据加载到您的数据结构中(例如代码片段中的顶点数组)并将这些提供给 OpenGL 进行渲染(glDrawArrays例如,在您的情况下)。这通常是相同的过程,无论是使用 Android、Windows、Plan9、OpenGL 还是 Direct3D。只有实现细节很重要,因此这个问题有点宽泛。

您可以查看3DS 文件格式的此描述(在您的问题中暗示),其中还包含指向加载这些文件的教程的链接。虽然 3DS 格式是一种非常容易阅读的二进制格式,但首先您也可以查看Wavefront OBJ 格式,这是一种几乎所有建模软件都可以导出的简单 ASCII 文件格式(但这也适用于 3DS)。将这些格式加载到一堆简单的顶点数组中应该归结为几行代码。

这些应该让你开始。如果您在特定平台上实现这些网格加载功能时遇到任何具体问题,请随时提出更具体的问题。

于 2011-09-07T16:34:15.980 回答