我正在使用Vertex数组在OpenGL中创建一个长方体,但我的纹理似乎有点不对。
继承我的代码:
float halfW = getW() / 2;
float halfH = getH() / 2;
GLubyte myIndices[]={
1, 0, 2, //front
2, 0, 3,
4, 5, 7, //back
7, 5, 6,
0, 4, 3, //left
3, 4, 7,
5, 1, 6, //right
6, 1, 2,
7, 6, 3, //up
3, 6, 2,
1, 0, 5, //down
5, 0, 4
};
float myVertices[] = {
-halfW, -halfH, -halfW, // Vertex #0
halfW, -halfH, -halfW, // Vertex #1
halfW, halfH, -halfW, // Vertex #2
-halfW, halfH, -halfW, // Vertex #3
-halfW, -halfH, halfW, // Vertex #4
halfW, -halfH, halfW, // Vertex #5
halfW, halfH, halfW, // Vertex #6
-halfW, halfH, halfW // Vertex #7
};
float myTexCoords[]= {
1.0, 1.0, //0
0.0, 1.0, //1
0.0, 0.0, //2
1.0, 0.0, //3
0.0, 0.0, //4
1.0, 0.0, //5
1.0, 1.0, //6
0.0, 1.0 //7
};
继承人的问题:
正面和背面呈现正常,但顶部,底部,左侧和右侧都是倾斜的。
我哪里错了?
答案 0 :(得分:1)
您的纹理坐标和顶点索引看起来都是关闭的。由于Vertex#2(坐标为halfW,halfH,-halfW)具有纹理坐标(0,0),因此Vertex#6(坐标为halfW,halfH,halfW)不应具有纹理坐标(1,1)。它的作用是将顶点与纹理坐标(0,0)和(1,1)沿同一边缘放置,这会导致麻烦。
立方体的问题在于,每个顶点的一个2D纹理坐标不足以将纹理映射到像这样的立方体(但是你试图把它们放在一起,你最终会变得怪异侧)。
解决方案是添加额外的三角形,使得没有边与另一边共享顶点,或者查看Cube Maps,在3D中指定纹理坐标(就像顶点一样)。我建议使用立方体贴图,因为它可以避免添加冗余顶点。