2014-04-15 89 views
0

我有一個小問題,我做了一個非常基本的VBO立方體。 它的工作原理,但是當我嘗試移動它(glTranslatef)時,它變得混亂。VBO位置問題OpenGL,C++

圖: http://imgur.com/8mhQm40

代碼: http://pastebin.com/hKp0u0QQ

爲什麼會出現這種情況? 此外,如果有人看到了紋理問題的解決方案,這將是從澄清意見

我使用3 for循環包括閱讀:)

偉大:)

謝謝產生一個很大的立方體(16 * 16 * 16),但他們的位置被搞砸了:/

for (int x = 0; x < 16; x++) 
{ 
    for (int y = 0; y < 16; y++) 
    { 
     for (int z = 0; z < 16; z++) 
     { 
      VBOrender(x, y, z); 
     } 
    } 
} 
+0

你可以發佈你的主要繪製/渲染方法嗎?或者是'VBOrender'呢? – ssell

+0

它在引擎收錄的文件(VBO的):) (功能VBOInit,VBORender) –

+0

我使用3 for循環產生一個很大的立方體(16 * 16 * 16) 但他們的位置搞砸了:/ –

回答

1

的問題,我相信,在您使用的glTranslate

作爲一個例子,我們有3個立方體。我們希望在(0,0,0),(1,0,0),(2,0,0)處繪製它們。根據你使用的glTranslate將發生以下情況:

Cube 1將在(0,0,0)glTranslate(0,0,0)是envoked繪製。

Cube 2將被畫在(1,0,0),因爲glTranslate(1,0,0)被煽動。

Cube 3將被繪製在(3,0,0)處,因爲glTranslate(2,0,0)被煽動。

你有沒有發現問題出在哪裏?

glTranslate從當前矩陣轉換而不是原點。因此,您需要在每次調用VBOrender結束時將矩陣重置回原點(0,0,0)。所以:

{ 
    glTranslate(x,y,z); 

    // ... 

    glTranslate(-x,-y,-z); 
} 

我建議使用某種形式的矩陣堆疊或創建自己避免這樣的問題,在未來。

+0

非常感謝:) 現在2天后,我終於可以繼續我的遊戲:) 添加了代表! –

+0

任何想法如何修復紋理? –

+0

很高興我能幫上忙。我目前沒有時間調查紋理問題,但今晚晚些時候我可以研究它,並用任何相關信息編輯我的答案。 – ssell