如何纹理用三角形绘制的“完美立方体”?

我试图在立方体上绘制纹理,该立方体基本上是一个带有8个顶点和14个标记的三角形带:

static const GLfloat vertices[8] =
{
    -1.f,-1.f,-1.f,
    -1.f,-1.f, 1.f,
    -1.f, 1.f,-1.f,
    -1.f, 1.f, 1.f,
     1.f,-1.f,-1.f,
     1.f,-1.f, 1.f,
     1.f, 1.f,-1.f,
     1.f, 1.f, 1.f
};

static const GLubyte indices[14] =
{
    2, 0, 6, 4, 5, 0, 1, 2, 3, 6, 7, 5, 3, 1
};

正如你可以看到它开始绘制与4个索引背面2, 0, 6, 4 ,然后用3个指数底部5, 0, 1和然后开始了与三角形只有1, 2, 3是在左边的三角形, 3, 6, 7是在顶部具有三角形,等等...

我有点失落如何在这个立方体上映射纹理。 这是我的纹理(你明白了):

立方体纹理

我设法得到背部纹理,并以某种方式可以添加一些东西到前面,但其他4面完全搞砸了,我有点困惑着色器如何处理有关纹理坐标的三角形。

我能做到的最好的是:

我的奴才立方体

你可以清楚地看到两侧的三角形。 这些是我的纹理坐标:

static const GLfloat texCoords[] = {
    0.5, 0.5,
    1.0, 0.5,
    0.5, 1.0,
    1.0, 1.0,
    0.5, 0.5,
    0.5, 1.0,
    1.0, 0.5,
    1.0, 1.0,
    // ... ?
};

但是每当我尝试添加更多的坐标时,它都会创造出不同的东西,我无法解释为什么。 任何想法如何改善这一点?


你遇到的心理障碍是假设你的立方体只有8个顶点。 是的,只有8个核心职位。 但是与该角相邻的每个面都显示图像的不同部分,因此在该角具有不同的纹理坐标。

顶点是的元组

  • 位置
  • 纹理坐标
  • ...
  • 任何其他属性,你可以出现
  • 只要其中一个属性发生变化,您就要处理完全不同的顶点。 对你而言,这意味着你正在处理8个角落位置,但是在每个角落处有3个不同的顶点,因为在该角落处会有具有不同纹理坐标的会面。 所以你实际上需要24个顶点组成6个不同的面,它们根本不共享顶点。

    为了让初学者更容易,不要将顶点位置和纹理坐标放入不同的数组中。 反而像这样写:

    struct vertex_pos3_tex2 {
         float x,y,z;
         float s,t;
    } cube_vertices[24] =
    {
        /* 24 vertices of position and texture coordinate */
    };
    
    链接地址: http://www.djcxy.com/p/37181.html

    上一篇: How to texture a "perfect cube" drawn with triangles?

    下一篇: Weird normal generation on height map based terrain