在解析带有顶点和顶点面的.obj文件时,很容易将顶点传递给着色器,并使用顶点面使用glDrawElements。
在使用顶点和纹理坐标解析.obj文件时,会出现另一种类型的面:纹理坐标面。
显示纹理时,除了加载图像,绑定它们并将纹理坐标传递到解析器之外,如何使用纹理坐标面? 它们与顶点面不同,我认为纹理坐标面在显示纹理时有用吗?
关心Niclas
答案 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]);
至少我就是这么做的。可能有更好的方法,如果有的话,我很高兴知道。