2010-12-10 15 views
5

Sto provando a disegnare oggetti 3d che hanno più di 65536 vertici sull'iPad, ma non riesco a capire cosa sto facendo male. Il mio modello originale che utilizzava GL_UNSIGNED_SHORT funzionava bene, ma ora con GL_UNSIGNED_INT, non riesco a ottenere nulla da mostrare usando il comando glDrawElements. È come se il renderer ignorasse completamente la mia linea glDrawElements. La parte del mio ciclo di rendering che sto riferimento è qui sotto:Come usi glDrawElements con GL_UNSIGNED_INT per gli indici?

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

vertici è definito come:

vector<float> vertices; 

e ogni faceArray è definito come:

vector<UInt32> faceArray; 

qualche suggerimento su cosa sto facendo male che sta impedendo alla mia geometria di disegnare?

risposta

7

Stock OpenGL ES non supporta GL_UNSIGNED_INT per gli indici.

Dal GLES glDrawElements man page:

GL_INVALID_ENUM viene generato se il tipo non è GL_UNSIGNED_BYTE o GL_UNSIGNED_SHORT.

Questa restrizione è rilassata quando GL_OES_element_index_uint è supportato.

Se non si dispone di supporto sulla piattaforma di destinazione, la soluzione migliore è quella di munge la mesh in più mesh secondarie con gli indici < 64K per ciascuna.

Come per l'iPad in particolare, per quanto ne so, iOS does not support this extension (Vedi Estensioni supportate), ma è possibile verificare l'elenco di estensioni sul dispositivo effettivo se si vuole essere sicuri.

+0

Lo fa più veloce del disegno con glDrawArrays? Posso fare la stessa cosa che sto facendo ora con glDrawArrays, ma voglio renderizzare il maggior numero possibile di FPS. – Davido

+0

L'ho capito, ho solo renderizzato ogni oggetto usando il proprio array di vertici e funziona perfettamente. Sto rendendo circa 125.000 vertici con un totale di 90 modelli ed è utilizzabile, rende circa 12 fotogrammi al secondo. Ora sto solo cercando di capire se c'è qualcosa che posso fare per accelerare il rendering. Eventuali suggerimenti? – Davido

+3

Questa risposta non è corretta, 'GL_UNSIGNED_INT' è supportato per' glDrawElements' se 'GL_OES_element_index_uint' è implementato (che è in iOS, secondo ). –

Problemi correlati