我编写了一个OBJ加载器,它解析顶点,纹理坐标和法线,每个都存储在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
答案 0 :(得分:1)
你不能直接,你需要在将数据传递给OpenGL之前做一些预处理,所以每个顶点只使用一个索引,这个索引也适用于纹理坐标,法线等。
答案 1 :(得分:0)
我编写了一个解析.obj文件的小型库,并包含用于在OpenGL(LWJGL)中渲染模型的示例代码。创建VBO的代码希望相当简单明了,足以让您了解它是如何工作的,或者您可以只使用库,或者从中剪切和粘贴。 (许可证属于公共领域。)看看它;