c opengl graphics 3d opengl-es-2.0

Pantalla en blanco mientras usa glGenBuffers en openGL



graphics 3d (2)

#include <stdio.h> #include <stdlib.h> #include <GL/glew.h> #include <GL/glut.h> 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; }

Cuando uso glGenBuffers mi pantalla se vuelve negra y no muestra ningún error. Si dibujo otra forma sin utilizar almacenamientos intermedios, se muestran pero no con objetos de almacenamiento intermedio.

Versión OpenGL: 3.0 sistema operativo: ubuntu IDE: eclipse


Cuando usa glGenBuffers está usando la especificación OpenGL-3.0. Para dibujar cualquier cosa en OpenGL-3.0 + necesita usar sombreadores, por lo que la pantalla es negra; su triángulo no está sombreado


Está utilizando llamadas para atributos de vértices genéricos aquí:

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

Los atributos de vértice genéricos solo se pueden usar en combinación con sombreadores. Siempre que use la tubería de función fija, también debe usar atributos de vértice de función fija.

Las llamadas correspondientes que utilizan atributos de funciones fijas son:

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