在openGL中使用glGenBuffers时的空白屏幕

#include  #include  #include  #include  void changeSize(int w, int h) { if(h == 0) h = 1; float ratio = w / h; glMatrixMode(GL_PROJECTION); glLoadIdentity(); glViewport(0, 0, w, h); gluPerspective(40,ratio,1.5,20); glMatrixMode(GL_MODELVIEW); } void renderScene(void) { glClear(GL_COLOR_BUFFER_BIT ); glLoadIdentity(); glTranslatef(0.0,0.0,-5.0); glDrawArrays(GL_TRIANGLES,0,3); glutSwapBuffers(); } void init() { GLfloat verts[] = { 0.0, 1.0, -1.0, -1.0, 1.0, -1.0 }; GLuint bufferid; glGenBuffers(1,&bufferid); glBindBuffer(GL_ARRAY_BUFFER,bufferid); glBufferData(GL_ARRAY_BUFFER,sizeof(verts),verts,GL_STATIC_DRAW); glEnableVertexAttribArray(0); glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,0,0); if(glGetError()==GL_NO_ERROR) printf("no error"); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(500,500); glutCreateWindow("MM 2004-05"); glewInit(); init(); glutDisplayFunc(renderScene); glutReshapeFunc(changeSize); if (GLEW_ARB_vertex_program && GLEW_ARB_fragment_program) printf("Ready for GLSL\n"); else { printf("No GLSL support\n"); //exit(1); } glutMainLoop(); return 0; } 

当使用glGenBuffers时,我的屏幕显示黑色并且没有显示错误。 如果我在不使用缓冲区的情况下绘制其他形状,则显示它们但不显示缓冲区对象。

openGL版本:3.0操作系统:ubuntu IDE:eclipse

使用glGenBuffers您使用的是OpenGL-3.0规范。 要在OpenGL-3.0 +中绘制任何内容,您需要使用着色器,因此屏幕为黑色; 你的三角形没有阴影。

您在此处使用调用通用顶点属性:

 glEnableVertexAttribArray(0); glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,0,0); 

通用顶点属性只能与着色器结合使用。 只要您使用固定function管道,您还必须使用固定function顶点属性。

使用固定function属性的相应调用是:

 glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(2, GL_FLOAT, 0, 0);