2012-12-04 49 views
0

我是OpenGl ES的新手。我試圖建立一個不使用任何手冊,tutrials的球體...GLubyte/GLushort使用問題

我已經成功實現了我的目標。我可以使用TRIANGLE_STRIP繪製一個球體。繪圖前我指定的經絡/水平線的數量。

一切工作正常,當我有少於256 vertixes索引。我試圖使用GLushort而不是GLubyte,但圖片改變了很多。

GLubyte *Indices; 
... 
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLubyte) * (meridians * (horizontals * 2 + 2)), Indices, GL_STATIC_DRAW); 
... 
Indices = malloc(sizeof(GLubyte) * (meridians * (horizontals * 2 + 2))); 

這就是我把字節改短的地方。

Current project on GitHub

我應該怎麼辦?

這裏是哪裏我改變字節的短

GLushortGLubyte

+1

你改變這一行 - >'glDrawElements(GL_TRIANGLE_STRIP ,(經線*(水平* 2 + 2)),GL_UNSIGNED_BYTE,0);''到'glDrawElements(GL_TRIANGLE_STRIP,(子午線*(水平* 2 + 2)),GL_UNSIGNED_SHORT,0) – borrrden

+0

我的不好!我沒有改變它...... Thx很多,我知道有一些小錯誤 – iWheelBuy

+0

我會把它寫成一個答案,解釋它爲什麼會失敗,但我認爲你已經知道爲什麼了。 – borrrden

回答

4

看起來你忘了更改以下行的照片:

glDrawElements(GL_TRIANGLE_STRIP, (meridians * (horizontals * 2 + 2)), GL_UNSIGNED_BYTE, 0);

這表明有一些的索引進行渲染,每一個都是無符號字節的大小(最有可能是8位,但實際數量是平臺特定的...非常非常非常罕見雖然它不是8位)。但是,您已經填充了無符號短褲(可能是16位)大小的索引數組,因此最終會發生的是每個數字都將被讀取兩次。一旦用「第一」8位,並用「第二」一次(endian將決定高位還是低位先出現)。由於你的很多指數(大多數?)都在255以下,所以會有很多頂點變成「0」,因爲更高的8位都是0.最重要的是,你只能渲染一半的指數。

所以,你需要以指示,而不是改變上述行這OpenGL的,它需要借鑑這些指數爲unsigned短褲:

glDrawElements(GL_TRIANGLE_STRIP, (meridians * (horizontals * 2 + 2)), GL_UNSIGNED_SHORT, 0);