2010-12-10 22 views
5

Estoy tratando de dibujar objetos en 3D que tengan más de 65536 vértices en el iPad, pero no puedo entender lo que estoy haciendo mal. Mi modelo original que usó GL_UNSIGNED_SHORT funcionó bien, pero ahora con GL_UNSIGNED_INT, no puedo hacer que aparezca nada con el comando glDrawElements. Es como si el renderizador estuviera ignorando por completo mi línea glDrawElements. La parte de mi bucle de renderizado que estoy haciendo referencia es a continuación:¿Cómo se usa glDrawElements con GL_UNSIGNED_INT para los índices?

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

vértices se define como:

vector<float> vertices; 

y cada faceArray se define como:

vector<UInt32> faceArray; 

alguna sugerencia sobre ¿Qué estoy haciendo mal que impide que se dibuje mi geometría?

Respuesta

7

Stock OpenGL ES no admite GL_UNSIGNED_INT para los índices.

Desde el GLES glDrawElements man page:

GL_INVALID_ENUM se genera si el tipo no está GL_UNSIGNED_BYTE o GL_UNSIGNED_SHORT.

Esta restricción se relaja cuando GL_OES_element_index_uint es compatible.

Si no tiene soporte en la plataforma de destino, su mejor opción es manchar su malla en múltiples submallas con < 64K índices para cada una.

En cuanto a ipad específicamente, hasta donde yo sé, iOS does not support this extension (Consulte las extensiones compatibles), pero puede verificar la lista de extensiones en el dispositivo real si quiere asegurarse.

+0

¿Es esto más rápido que dibujar con glDrawArrays? Puedo hacer lo mismo que hago ahora con glDrawArrays, pero quiero renderizar a tantos FPS como sea posible. – Davido

+0

Lo descubrí, simplemente renderizo cada objeto usando su propia matriz de vértices y funciona muy bien. Estoy renderizando alrededor de 125,000 vértices con un total de 90 modelos y es utilizable, rinde aproximadamente 12 fotogramas por segundo. Ahora solo estoy tratando de averiguar si hay algo que pueda hacer para acelerar la renderización. ¿Alguna sugerencia? – Davido

+3

Esta respuesta es incorrecta, 'gl_UNSIGNED_INT' es compatible con' glDrawElements' si se implementa 'GL_OES_element_index_uint' (que está en iOS, de acuerdo con ). –