2013-10-29 19 views
2

我寫了下面的簡單代碼,以瞭解如何使用VBO,但沒有出現任何東西:頂點緩衝對象C++簡化版,出現

GLuint vbo=0; 
GLfloat data[] = {175.0, 25.0, 0.0, 1.0, 0.0, 0.0, 100.0, 325.0, 0.0, 0.0,1.0,0.0, 
250.0, 25.0, 0.0, 0.0, 0.0, 1.0}; 

void display() 
{ 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

glGenBuffers(1, &vbo); 
glBindBuffer(GL_ARRAY_BUFFER, vbo); 
glBufferData(GL_ARRAY_BUFFER, sizeof(data),data, GL_STATIC_DRAW); 
glEnableClientState(GL_VERTEX_ARRAY); 
glVertexPointer(3, GL_FLOAT, 0, 0); 
glEnableClientState(GL_COLOR_ARRAY); 
glColorPointer(3, GL_FLOAT, 0, (void*)(3*sizeof(float))); 
glDrawArrays(GL_TRIANGLES, 0,3); 
glDisableClientState(GL_COLOR_ARRAY); 
glDisableClientState(GL_VERTEX_ARRAY); 
glBindBuffer(GL_ARRAY_BUFFER, 0); 
glutSwapBuffers(); 
glFlush(); 
} 
void reshape(int w, int h){ 
glClearColor(0.5,0.2,0.5,1); 
glViewport(0, 0, (GLsizei) w, (GLsizei) h); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0, (GLsizei) w, 0, (GLsizei) h, -1,1); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

} 
int main(int argc, char** argv){ 
glutInit(&argc, argv); 
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); 
glutInitWindowSize(350, 350); 
glutInitWindowPosition(100, 100); 
glutCreateWindow("VBO"); 
glutDisplayFunc(&display); 
glutReshapeFunc(reshape); 
glutMainLoop(); 

} 

哪裏有錯誤?

回答

5

您正在傳遞0的跨度,這意味着數據應該緊密排列(所有頂點在一起,所有顏色在一起等)。但是你的數據陣列似乎是交錯的。改變指針調用:

glVertexPointer(3, GL_FLOAT, 6 * sizeof(GLfloat), 0); 

glColorPointer(3, GL_FLOAT, 6 * sizeof(GLfloat), (void*)(3 * sizeof(GLfloat))); 

作爲一個側面說明,你絕對不應該產生一個全新的VBO在每次調用display()