我写一个OBJ装载机,其解析所述顶点,纹理COORDS和法线中,每个被存储在FloatBuffer,并传递到OpenGL的:

gl.glVertexPointer(3, GL10.GL_FLOAT, 0, fbVertices);
gl.glNormalPointer(GL10.GL_FLOAT, 0, fbNormals);

不过我难倒为我是多么应该通过我的索引缓冲区glDrawElements,我读过,该指数将参照索引的数组中的顶点,纹理和法线,但在阅读的OBJ文件描述,似乎面被存储在格式如这样:

f 1/2/3 4/5/6 7/8/9

的格式为

vertice/texture/normal

glDrawElements只接受1点的索引,这应该是指所有3,但是当我看一下实际的OBJ文件,这似乎并不可能。你如何通过指数所有3?

您可以在这里找到的代码的副本: http://codepad.org/melc1HIC

有帮助吗?

解决方案

您不能直接,你需要传递的数据的OpenGL前做一些预处理,所以只有一个索引用于每个顶点,而这个指标也适用于纹理坐标,法线等。

其他提示

我已经写了一个小库,解析.obj文件,并且包括用于渲染在OpenGL(LWJGL)模型的示例代码。创建维也纳组织的代码是希望相当简单和清晰,足以让您知道这是怎么工作的,或者你可以只使用库,或剪切和粘贴。 (许可证是公共领域。)看看它;

http://darksleep.com/oObjLoader/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top