我试图在立方体上绘制纹理,该立方体基本上是一个带有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个面部完全搞砸了,我有点混淆着色器如何处理关于纹理坐标的三角形。< / p>
我能做到的最好的就是:
您可以清楚地看到两侧的三角形。这些是我的纹理坐标:
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,
// ... ?
};
但每当我尝试添加更多坐标时,它就会完全创造出不同的东西,我无法解释为什么。知道如何改善这个吗?
答案 0 :(得分: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 */
};