我的长方体在哪里出错了?

时间:2013-04-20 21:54:48

标签: c++ arrays opengl vertex

我正在使用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
};

继承人的问题: enter image description here

正面和背面呈现正常,但顶部,底部,左侧和右侧都是倾斜的。

我哪里错了?

1 个答案:

答案 0 :(得分:1)

您的纹理坐标和顶点索引看起来都是关闭的。由于Vertex#2(坐标为halfW,halfH,-halfW)具有纹理坐标(0,0),因此Vertex#6(坐标为halfW,halfH,halfW)不应具有纹理坐标(1,1)。它的作用是将顶点与纹理坐标(0,0)和(1,1)沿同一边缘放置,这会导致麻烦。

立方体的问题在于,每个顶点的一个2D纹理坐标不足以将纹理映射到像这样的立方体(但是你试图把它们放在一起,你最终会变得怪异侧)。

解决方案是添加额外的三角形,使得没有边与另一边共享顶点,或者查看Cube Maps,在3D中指定纹理坐标(就像顶点一样)。我建议使用立方体贴图,因为它可以避免添加冗余顶点。