.obj中的面孔如何运作?

时间:2010-12-01 20:24:55

标签: iphone opengl-es textures .obj

在解析带有顶点和顶点面的.obj文件时,很容易将顶点传递给着色器,并使用顶点面使用glDrawElements。

在使用顶点和纹理坐标解析.obj文件时,会出现另一种类型的面:纹理坐标面。

显示纹理时,除了加载图像,绑定它们并将纹理坐标传递到解析器之外,如何使用纹理坐标面? 它们与顶点面不同,我认为纹理坐标面在显示纹理时有用吗?

关心Niclas

1 个答案:

答案 0 :(得分:0)

不确定你在问什么,但如果我理解正确,你就会想知道如何存储纹理坐标的数据以渲染纹理化的3d对象。如果是这样,则以交错格式存储vertex-normal-textureCoordinate数据,如下所示:

vertexX vertexY vertexZ normalX normalY normalZ textureX textureY textureZ

一旦你有了这些数组,你就可以创建指向数组不同部分的指针并进行如下渲染:

glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);

glVertexPointer(3, GL_FLOAT, sizeof(vertexArray[0])*9, &vertexArray[0]);
glNormalPointer(3, GL_FLOAT, sizeof(vertexArray[0])*9, &vertexArray[3]);
glTexCoordPointer(GL_FLOAT, sizeof(vertexArray[0])*9, &vertexArray[6]);

glDrawElements(GL_TRIANGLES, indices.size(), GL_UNSIGNED_SHORT, &indices[0]);

至少我就是这么做的。可能有更好的方法,如果有的话,我很高兴知道。