2012-09-19 80 views
1

我正在做空中包厢(立方体与它的每一个6个面的不同纹理)这里纹理映射就是我做什么:的OpenGL ES:在立方体上

我定义我的顶点:

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} 
}; 

编辑:天空盒绝对不显示自己,我只看到我的纹理在一种奇怪的方式重复一个二维平面图像。是绝对没有的立方体

绘图部分工作,我想我的问题是基于纹理坐标,是吗?我做错了什么?

+0

什么是你的*问题*?你写的绘图工作,但不是,什么都行不通。 – datenwolf

+0

我的意思是绘图功能应该是有效的。 我的问题是,该显示器是绝对是不随机重复上一个立方体,但与我的纹理2D平面图像 – IggY

+0

好了,没有任何一个屏幕截图,或显示功能的源代码,我能做的只有猜测相比更差。我需要更多的信息来提供有用的帮助。 – datenwolf

回答

-1

对不起我的问题不明确。 我并没有真正理解纹理坐标的想法。现在我认为我做了: 告诉你多少你想让每张脸都被你的纹理所充满。我的例子是充满。 这是我的新(看起来像)工作代码,以防万一它可以帮助某人:

//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} 
}; 
0

我说得对不对?我做错了什么?

凝视着我的水晶球......不,我没有看到你的问题是什么,你也没有告诉我们。

无论如何,你的纹理坐标的确是错了,您的阵列只包含4。但你有8个顶点的立方体。然而,为了成为一个天空盒,你需要一个包含24个顶点的立方体,因为纹理坐标是顶点的一部分,并且你不能在由6个纹理构成的天空盒的某些顶点上共享纹理坐标。

不过我建议你使用一个立方体贴图相反,它具有很大的好处,你可以使用顶点坐标,因为你已经有了他们,也为纹理坐标。

相关问题