幫助查找錯誤。
我想這是綁定的錯誤。在「顯示」我用VBO - 一切正常。
但是,當我使用VAO - 我得到黑屏。VAO綁定問題
void createVAO(GLuint *_vId, GLuint *_cId, GLuint *_tId, GLuint *_vao) {
glGenVertexArrays(1, _vao);
glBindVertexArray(*_vao);
glEnableClientState(GL_VERTEX_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, *_vId);
glVertexPointer(3, GL_FLOAT, 0, 0);
glBindVertexArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); }
void createVBO(GLuint *_vId, GLuint *_cId, GLuint *_tId) {
glGenBuffers(1, _vId);
glBindBuffer(GL_ARRAY_BUFFER, *_vId);
glBufferData(GL_ARRAY_BUFFER, sizeof(XYZ) * cubeVerticesCount, cubePositions, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0); }
void display() {
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0, 0, -800);
glRotatef(rotate.angle_x, 1, 0, 0);
glRotatef(rotate.angle_y, 0, 1, 0);
glScalef(zoom,zoom,zoom);
// VAO - dont work
glColor3f(1.0f,1.0f,1.0f);
glBindVertexArray(vao);
glDrawElements(GL_POINTS, 0, GL_UNSIGNED_INT, NULL);
glBindVertexArray(0);
// VBO - work
//glEnableClientState(GL_VERTEX_ARRAY);
//glBindBuffer(GL_ARRAY_BUFFER, vId);
//glVertexPointer(3, GL_FLOAT, 0, 0);
//glDrawArrays(GL_POINTS, 0, cubeVerticesCount);
//glDisableClientState(GL_VERTEX_ARRAY);
calculateFPS();
glutSwapBuffers(); }
完整的源代碼。 http://codepad.org/I87AxDl4
對不起很多不必要的代碼。
我有沒有正確認識?我還需要創建一個索引數組,並綁定它? – ObiSan 2013-05-04 14:30:51
@ObiSan:這就是'glDrawElements' *做的事情*:它[使用一系列索引](http://www.opengl.org/wiki/Vertex_Specification)。因此,如果要使用一系列索引進行繪製,則需要使用一系列索引進行繪製。如果你不想用一系列索引來繪製,你爲什麼要用'glDrawElements'? – 2013-05-04 14:32:35
找到一個很好的教程,但不要仔細閱讀。謝謝。 – ObiSan 2013-05-04 15:00:59