我刚刚为iPhone和iPad编写了一个功能齐全的模型查看器和操纵器.基本上,我只是编写了自己的文件解析器来存储顶点数组,然后在我的渲染循环中我只渲染数组.虽然二进制文件的读取速度比.obj文件快得多,但它还是比较直接的.这样,您可以打开任何文件,而不仅仅是"处理"文件.互联网上也有很多例子.
只需将顶点放入紧密排列的数组:
vertexX, vertexY, vertexZ, normalX, normalY, normalZ
Run Code Online (Sandbox Code Playgroud)
所以你有一个浮点数的一维数组,但是像上面一样被映射出来.一旦你有一个浮点数组,它很容易渲染.
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);
Run Code Online (Sandbox Code Playgroud)
然后将其放入OpenGL-ES 1.1渲染循环中.让我知道这是否适合你.
只是为您澄清,如果您在文本编辑器中打开OBJ文件,它的布局如下:
list of vertices
list of texture coordinates
list of normals
list of faces
Run Code Online (Sandbox Code Playgroud)
并且面部列表以相同的顺序引用其他三个列表中的索引.例如,一行可能如下所示:
f 16/4/1 4/4/4 1/1/1
Run Code Online (Sandbox Code Playgroud)
意味着面的第一个顶点引用顶点的索引16,纹理的索引4和法线的索引1.第二个索引引用顶点的索引4,纹理的索引4和法线的索引4等.然后,您只需要解析面并将不同数组中的正确值拉入包含顶点和法线的单个浮点数组中.面子指数.
归档时间: |
|
查看次数: |
2546 次 |
最近记录: |