你如何将OBJ文件的面部定义传递给openGL

时间:2010-09-28 05:20:53

标签: java android eclipse opengl-es blender

我编写了一个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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我编写了一个解析.obj文件的小型库,并包含用于在OpenGL(LWJGL)中渲染模型的示例代码。创建VBO的代码希望相当简单明了,足以让您了解它是如何工作的,或者您可以只使用库,或者从中剪切和粘贴。 (许可证属于公共领域。)看看它;

http://darksleep.com/oObjLoader/