2011-10-24 19 views
5

Estoy tratando de encontrar la manera de trabajar con VBO, usando un contexto de renderizado OpenGL 2.0. Tengo una 2D (orto) renderizado contexto configurado, y puedo dibujar un rectángulo simple como esto:¿Qué puede hacer que glDrawArrays con un VBO no dibuje nada?

glBegin(GL_QUADS); 
    glColor4f(1, 1, 1, 1); 
    glVertex2f(0, 0); 
    glVertex2f(0, 10); 
    glVertex2f(100, 10); 
    glVertex2f(100, 0); 
glEnd; 

Pero cuando trato de hacerlo con un VBO, falla. He definido la VBO así, con los mismos datos que antes:

procedure initialize; 
const 
    VERTICES: array[1..8] of single = 
    (
    0, 0, 
    0, 10, 
    100, 10, 
    100, 0 
    ); 
begin 
    glEnable(GL_VERTEX_ARRAY); 
    glGenBuffers(1, @VBO); 
    glBindBuffer(GL_ARRAY_BUFFER, VBO); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(VERTICES), @VERTICES[1], GL_DYNAMIC_DRAW); 
    glBindBuffer(GL_ARRAY_BUFFER, 0); 
end; 

y trato de dibujar como esto:

begin 
    glColor4f(1, 1, 1, 1); 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glBindBuffer(GL_ARRAY_BUFFER, VBO); 
    glVertexPointer(2, GL_FLOAT, 0, 0); 
    glDrawArrays(GL_QUADS, 0, 1); 
    glBindBuffer(GL_ARRAY_BUFFER, 0); 
end; 

De todo lo que he leído, que se debe trabajar. Lo ejecuto a través de gDEBugger y no hay errores GL, y los datos en el VBO se cargan correctamente, pero nada aparece cuando cambio los búferes. Cambiar los datos en la matriz de vértices para usar coordenadas normalizadas (desde 0..1.0) también termina sin mostrar nada. ¿Alguna idea de lo que estoy haciendo mal? (Suponga que el contexto rendir su vez está configurado correctamente y los punteros de función GL han sido cargados correctamente.)

Respuesta

6

glDrawArrays(GL_QUADS, 0, 1);

parece que estás tratando de dibujar un quad con un solo vértice. Se necesitan tres más:

glDrawArrays(GL_QUADS, 0, 4); 

O cambiar a puntos:

glDrawArrays(GL_POINTS, 0, 1); 
+0

Oh, que necesita un recuento de vértices? Mi error; Pensé que necesitaba un recuento de ** elementos **, así que estaba tratando de dibujar 1 cuadrante. ¡Ahora funciona! –

Cuestiones relacionadas