我刚刚为 iPhone 和 iPad 编写了一个全功能的模型查看器和操纵器。基本上,我只是编写了自己的文件解析器来存储顶点数组,然后在渲染循环中我只渲染数组。虽然二进制文件的读取速度比 .obj 文件快得多,但操作起来相当简单。这样,您可以打开任何文件,而不仅仅是您“处理”的文件。互联网上也有很多例子。
EDIT:
只需将顶点放入紧密排列的数组中即可:
vertexX, vertexY, vertexZ, normalX, normalY, normalZ
这样你就有了一个一维浮点数组,但像上面一样映射出来。一旦有了浮点数组,渲染就很简单了。
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glVertexPointer(3, GL_FLOAT, sizeof(vertices[0])*6, &vertices[0]);
glNormalPointer(GL_FLOAT, sizeof(vertices[0])*6, &vertices[3]);
glColor4f(R, G, B, 1); //range 0-1
glDrawArrays(GL_TRIANGLES, 0, numVertices); //number of floats in array divided by 6
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
然后将其放入 OpenGL-ES 1.1 渲染循环中。让我知道这是否适合您。
EDIT2:
只是向您澄清一下,如果您在文本编辑器中打开 OBJ 文件,它的布局如下:
list of vertices
list of texture coordinates
list of normals
list of faces
并且面孔列表以相同的顺序引用其他三个列表中的索引。例如,一行可能如下所示:
f 16/4/1 4/4/4 1/1/1
表示面的第一个顶点引用顶点索引 16、纹理索引 4 和法线索引 1。第二个索引引用顶点的索引 4、纹理的索引 4 和法线的索引 4 等。然后,您只需解析面并将正确的值从不同的数组中提取到一个包含基于顶点和法线的浮点数组中。面指数。