2010-12-10 39 views
5

我試圖繪製在iPad上有超過65536個頂點的3D對象,但無法弄清楚我做錯了什麼。我使用GL_UNSIGNED_SHORT的原始模型工作得很好,但現在使用GL_UNSIGNED_INT,我無法使用glDrawElements命令顯示任何內容。這就像渲染器完全忽略了我的glDrawElements行。說我引用我的渲染循環的部分低於:如何將glDrawElements與GL_UNSIGNED_INT用於索引?

glEnableClientState(GL_VERTEX_ARRAY); 
glEnableClientState(GL_NORMAL_ARRAY); 

glVertexPointer(3, GL_FLOAT, sizeof(assemblyObj->vertices[0])*6, &assemblyObj->vertices[0]); 
glNormalPointer(GL_FLOAT, sizeof(assemblyObj->vertices[0])*6, &assemblyObj->vertices[0]); 

for (int i = 0; i < assemblyObj->numObjects; i++) 
{ 
    glDrawElements(GL_TRIANGLES, assemblyObj->partList[i].faceArray.size(), GL_UNSIGNED_INT, &assemblyObj->partList[i].faceArray[0]); 
} 

glDisableClientState(GL_VERTEX_ARRAY); 
glDisableClientState(GL_NORMAL_ARRAY); 

頂點被定義爲:

vector<float> vertices; 

每個faceArray被定義爲:在

vector<UInt32> faceArray; 

任何建議我在做什麼錯誤,是防止我的幾何圖形?

回答

7

股票OpenGL ES不支持GL_UNSIGNED_INT的指數。如果類型不GL_UNSIGNED_BYTE或GL_UNSIGNED_SHORT產生

GL_INVALID_ENUM:

GLES glDrawElements man page

當支持GL_OES_element_index_uint時,此限制放寬。

如果您在目標平臺上沒有支持,最好的辦法是將您的網格劃分爲多個子網格,每個子網格指標爲< 64K

至於ipad的具體,據我所知iOS does not support this extension(見支持的擴展),但你可以驗證實際設備上的擴展名單,如果你想確保。

+0

這是否比使用glDrawArrays繪圖更快?我現在可以用glDrawArrays做同樣的事情,但我想盡可能多地使用FPS進行渲染。 – Davido 2010-12-14 00:14:53

+0

我想通了,我只是使用它自己的頂點數組渲染每個對象,它工作得很好。我渲染大約125,000個頂點,總共有90個模型,並且可用,每秒渲染大約12幀。現在我只是想弄清楚是否有任何事情可以加速渲染。有什麼建議麼? – Davido 2010-12-14 23:56:42

+3

這個回答是不正確的,如果實現了GL_OES_element_index_uint'(在iOS中,根據)'GL_UNSIGNED_INT'支持'glDrawElements'。 – 2012-03-07 06:37:24

相關問題