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

Afr*_*Afr 4 opengl cubes vertices texture-mapping indices

我正在尝试在立方体上绘制纹理,该立方体基本上是一个带有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
};
Run Code Online (Sandbox Code Playgroud)

你可以看到它开始用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,
    // ... ?
};
Run Code Online (Sandbox Code Playgroud)

但每当我尝试添加更多坐标时,它就完全创造了一些不同的东西,我无法解释为什么.知道怎么改进吗?

dat*_*olf 7

您遇到的心理障碍是假设您的立方体只有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 */
};
Run Code Online (Sandbox Code Playgroud)

  • @vertoe:这不可能.在每个角落,您有3个不同的顶点(它们的顶点坐标不同).OpenGL期望顶点; 如果你有几个属性数组,它们会被连贯地索引.这是一个奇特的词:你可以在不同的顶点之间共享单个属性元素. (3认同)