【问题标题】:Where have I gone wrong with my cuboid?我的长方体哪里出了问题?
【发布时间】:2013-04-20 21:54:47
【问题描述】:

我正在使用顶点数组在 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
};

问题出在:

正面和背面渲染良好,但顶部、底部、左侧和右侧偏斜。

我哪里出错了?

【问题讨论】:

  • “旧”OpenGL,还是“新”(着色器)OpenGL? halfW 是什么?
  • 对不起,不知道是新的还是旧的,我是 OpenGL 的新手,我该如何检查?

标签: c++ arrays opengl vertex


【解决方案1】:

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

立方体的问题在于每个顶点一个 2D 纹理坐标不足以将纹理映射到这样的立方体上(无论你尝试如何放置它们,你都会得到奇怪的结果边)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多