如何将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一样加载网格,或者为此作业加载一个库
答案 0 :(得分:0)
它基本上归结为将文件中的数据加载到数据结构中(如代码片段中的顶点数组),并将这些数据提供给OpenGL进行渲染(例如,在您的情况下为glDrawArrays
)。无论是使用Android,Windows,Plan9,OpenGL还是Direct3D,这通常都是相同的过程。只有实施细节很重要,因此这个问题有点广泛。
您可以查看this description of the 3DS file format(在您的问题中暗示),其中还包含指向加载这些文件的教程的链接。虽然3DS格式是一种非常容易阅读的二进制格式,但是一开始你也可以查看Wavefront OBJ format,这是一种简单的ASCII文件格式,几乎每个建模软件都可以导出(但这也适用于3DS) 。将这些格式加载到一堆简单的顶点数组中应归结为几行代码。
这些应该让你入门。如果您在特定平台上遇到任何实现这些网格加载功能的特定问题,请随时提出更具体的问题。