2012-07-15 22 views
5

Estoy probando las cosas de Vertex Arrays, pero por alguna razón el comando glDrawElements no me atrae nada. Puedo dibujar usando glBegin/glEnd y glDrawElements entre, pero glDrawElements no funciona. He aquí un fragmento de código:OpenGL: glDrawElements no dibuja

Estas matrices de ponerse en marcha en el constructor:

double points[100]; 
GLint indices[50]; 

for (int i=0; i < 50; i++){ 
    points[2*i] = radius * cos(i*2*PI/50); 
    points[2*i + 1] = radius * sin(i*2*PI/50); 
    indices[i] = i; 
} 

código utilizando sólo la matriz de puntos con glArrayElement de trabajo:

void GLCircle::draw() 
{ 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glVertexPointer(2, GL_DOUBLE, 0, points); 

    glBegin(GL_POLYGON); 
    for (int i=0; i < 50; i++){ 
     glArrayElement(i); 
    } 
    glEnd(); 
} 

código también de trabajo, utilizando variedad puntos, índices específicos accedidos mediante matriz de índices:

void GLCircle::draw() 
{ 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glVertexPointer(2, GL_DOUBLE, 0, points); 

    glBegin(GL_POLYGON); 
    for (int i=0; i < 50; i++){ 
     glArrayElement(indices[i]); 
    } 
    glEnd(); 
} 

Código que no funciona , intentando usar glDrawElements:

void GLCircle::draw() 
{ 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glVertexPointer(2, GL_DOUBLE, 0, points); 

    glDrawElements(GL_POLYGON, 4, GL_INT, indices); 
} 

¿Algún consejo? No es del todo necesario que yo utilizo en este punto, pero es preocupante que no funciona ...

Respuesta

7

El segundo parámetro es de glDrawElementscount, por lo que no debe ser 4 el número de índices (50) ?

4

Los parámetros para

glDrawElements() 

son los siguientes ..:

primera parámetro [modo de] es qué tipo de primitiva de render.

2nd [count] parámetro debe ser el número de elementos para representar. es decir. el número de vértices

tercera [tipo] parámetro debe ser el tipo del valor en el cuarto parámetro.. SOLO puede ser cualquiera de

GL_UNSIGNED_BYTE or GL_UNSIGNED_SHORT or GL_UNSIGNED_INT 

4º [índices] parámetro es un puntero a donde se almacenan los índices.

Usted puede leer más sobre esto .. here

+3

"[índices] 4º parámetro es un puntero a la que se almacenan los índices". ¡NOOOOOO! Los índices DEBEN almacenarse en el búfer que actualmente está vinculado a GL_ELEMENT_ARRAY_BUFFER. El 4 ° parámetro es el puntero de desplazamiento en la matriz de índices. – IceCool

+0

Estaba citando los documentos oficiales .. http://www.opengl.org/sdk/docs/man/xhtml/glDrawElements.xml – iKlsR

+5

Oh sí, cierto sry. De hecho, es un indicador de dónde se almacenan los índices.Pero a diferencia de un puntero c normal, no apunta a datos en la memoria del sistema, sino que apunta a datos en el búfer del elemento (por lo que 0x0 es el primer elemento en el IB). – IceCool

0

acabo enfrentado el mismo problema.

Trate GL_UNSIGNED_INT

glDrawElements(GL_POLYGON, 4, GL_UNSIGNED_INT, indices); 
Cuestiones relacionadas