2013-04-16 161 views
0

我有一個包含以下數據的bunny.h:OpenGL的頂點緩衝區對象不起作用

bunny[] | vertex coordinates xyz 

NUM_TRIANGLES | the amount of triangles for the bunny 

normals[] | the normals for each triangle 

triangles[] | indices for the triangles 

我想用數據的頂點緩衝區對象。

這裏是我嘗試加載數據

GLfloat values[NUM_TRIANGLES*3]; 
    for(int i = 0; i < NUM_TRIANGLES*3; i++) 
     values[i] = bunny[i]; 

    // init and bind a VBO (vertex buffer object) // 
    glGenBuffers(1, &bunnyVBO); 
    glBindBuffer(GL_ARRAY_BUFFER, bunnyVBO); 


    // copy data into the VBO // 
    glBufferData(GL_ARRAY_BUFFER, sizeof(values), &values, GL_STATIC_DRAW); 

    // init and bind a IBO (index buffer object) // 
    glGenBuffers(1, &bunnyIBO); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bunnyIBO); 

    // copy data into the IBO // 
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(triangles), &triangles, GL_STATIC_DRAW); 
    // unbind active buffers // 
    glBindVertexArray(0); 
    glBindBuffer(GL_ARRAY_BUFFER, 0); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); 

在節目後來我想用這個代碼來渲染緩存:

glBindBuffer(GL_ARRAY_BUFFER, bunnyVBO); 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bunnyIBO); 
glEnableClientState(GL_VERTEX_ARRAY); 
glDrawElements(GL_TRIANGLES, NUM_TRIANGLES, GL_UNSIGNED_INT, triangles); 
glDisableClientState(GL_VERTEX_ARRAY); 

的OpenGL工作正常,但我沒有看到兔子......(數據沒有損壞或類似的東西,錯誤是在我的代碼中) 有些人可以幫我嗎?

回答

2

我沒有看到任何致電glVertexPointer。如果你想使用從VBO的元素,它應該是

glDrawElements(GL_TRIANGLES, NUM_TRIANGLES, GL_UNSIGNED_INT, 0); 
+0

我在哪裏必須調用glVertexPointer - 加載數據或使數據? – glethien

+1

@glethien:渲染過程中。您傳遞給它的指針是頂點VBO內的偏移量,在此情況下爲零。 – JWWalker

+0

我嘗試過,但仍然是黑色 - 渲染包含glDrawElements之前的glVertexPointer。 – glethien