2

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

4

2 回答 2

1

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

于 2010-09-28T14:26:45.377 回答
0

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

http://darksleep.com/oObjLoader/

于 2012-01-08T12:39:09.627 回答