如何在Android OpenGL中加载网格物体

时间:2011-09-06 15:34:44

标签: android opengl-es id3dxmesh

如何将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);

如何像数组或Coords一样加载网格,或者为此作业加载一个库

1 个答案:

答案 0 :(得分:0)

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

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

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