2012-09-19 115 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個紋理構成的天空盒的某些頂點上共享紋理座標。

不過我建議你使用一個立方體貼圖相反,它具有很大的好處,你可以使用頂點座標,因爲你已經有了他們,也爲紋理座標。

相關問題