我正在制作一个天方体(立方体在它的6个面上都有不同的纹理),这是我做的:
我定义我的顶点:
const float vertices[8u][3u] = {
{-1.0f, -1.0f, -1.0f},
{-1.0f, -1.0f, 1.0f},
{-1.0f, 1.0f, -1.0f},
{-1.0f, 1.0f, 1.0f},
{1.0f, -1.0f, -1.0f},
{1.0f, -1.0f, 1.0f},
{1.0f, 1.0f, -1.0f},
{1.0f, 1.0f, 1.0f}
};我根据顶点数组定义我的三角形(四边形在ES版本中不可用):
const unsigned short elements[8u][3u] = {
{4u, 6u, 2u},
{4u, 0u, 2u},
{6u, 3u, 2u},
{6u, 3u, 7u},
{7u, 1u, 5u},
{7u, 1u, 3u},
{5u, 0u, 4u},
{5u, 0u, 1u}
};据我所知,我现在需要定义我的纹理坐标,我尝试了许多不同的东西,现在它看起来像这样:
float texCoords[4u][2u] = {
{0.0f, 0.0f},
{1.0f, 0.0f},
{1.0f, 1.0f},
{0.0f, 1.0f}
};编辑: skybox绝对不会显示自己,我只看到了一个2d平面图像,其中我的纹理以一种奇怪的方式重复。绝对没有立方体
绘图部分工作正常,我想我的问题是基于纹理坐标,对吗?我做错了什么?
发布于 2012-09-20 15:42:48
对不起,我的问题不是很清楚。我并不真正理解纹理坐标的概念是什么。现在我想我做到了:告诉我你有多想让每张脸都被你的纹理填满。我的例子是全填充。这是我新的(看起来像是)可以工作的代码,以防它可能对某人有所帮助:
//The 24 vertex of the 3d cube (the skybox)
static const float vertices[24u][3u] = {
{-1.0f, -1.0f, -1.0f}, //face 1 (front)
{-1.0f, 1.0f, -1.0f},
{1.0f, -1.0f, -1.0f},
{1.0f, 1.0f, -1.0f},
{1.0f, 1.0f, 1.0f}, //face 2 (back)
{1.0f, -1.0f, 1.0f},
{-1.0f, 1.0f, 1.0f},
{-1.0f, -1.0f, 1.0f},
{-1.0f, -1.0f, -1.0f}, //face 3 (left)
{-1.0f, -1.0f, 1.0f},
{-1.0f, 1.0f, -1.0f},
{-1.0f, 1.0f, 1.0f},
{1.0f, 1.0f, 1.0f}, //face 4 (right)
{1.0f, 1.0f, -1.0f},
{1.0f, -1.0f, 1.0f},
{1.0f, -1.0f, -1.0f},
{-1.0f, 1.0f, -1.0f}, // face 5 (up)
{-1.0f, 1.0f, 1.0f},
{1.0f, 1.0f, 1.0f},
{1.0f, 1.0f, -1.0f},
{1.0f, -1.0f, 1.0f}, //face 6 (bot)
{1.0f, -1.0f, -1.0f},
{-1.0f, -1.0f, -1.0f},
{-1.0f, -1.0f, 1.0f},
};
//Coordinate of the textures
float texCoords[24u][2u] = {
{0.0f, 0.0f},
{0.0f, 1.0f},
{1.0f, 1.0f},
{1.0f, 0.0f},
{0.0f, 0.0f},
{0.0f, 1.0f},
{1.0f, 1.0f},
{1.0f, 0.0f},
{0.0f, 0.0f},
{0.0f, 1.0f},
{1.0f, 1.0f},
{1.0f, 0.0f},
{0.0f, 0.0f},
{0.0f, 1.0f},
{1.0f, 1.0f},
{1.0f, 0.0f},
{0.0f, 0.0f},
{0.0f, 1.0f},
{1.0f, 1.0f},
{1.0f, 0.0f},
{0.0f, 0.0f},
{0.0f, 1.0f},
{1.0f, 1.0f},
{1.0f, 0.0f},
};
//Defining triangles based on the vertice array indexes
const unsigned short elements[12u][3u] = {
{0, 2, 1},
{2, 1, 3},
{4, 5, 6},
{5, 6, 7},
{8, 9, 10},
{9, 10, 11},
{12, 13, 14},
{13, 14, 15},
{16, 17, 18},
{17, 18, 19},
{20, 21, 22},
{21, 22, 23}
};发布于 2012-09-19 20:48:12
,我说的对吗?我做错了什么?
凝视我的水晶球…不,我不明白你有什么问题,你也没告诉我们。
不管怎样,你的纹理坐标确实是错的,你的数组只有4个,但是你有一个8个顶点的立方体。但是,要使其成为天框,您需要一个包含24个顶点的立方体,因为纹理坐标是顶点的一部分,并且您不能在由6个纹理组成的天框的某些顶点上共享纹理坐标。
然而,我建议你使用立方图纹理,这有一个很大的好处,你可以使用顶点坐标,因为你已经有了它们,也用于纹理坐标。
https://stackoverflow.com/questions/12494702
复制相似问题