我在理解如何使用VBOs方面遇到了一些麻烦。我一直试图让图像相当于:使用VBOs渲染正方形
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
gluPerspective (70, 4.0f/3, 1, 1000);
glMatrixMode (GL_MODELVIEW);
glLoadIdentity();
gluLookAt (0, 0, -5,
0, 0, 0,
0, 1, 0);
glBegin (GL_TRIANGLES);
glVertex3f (-1, -1, -1);
glVertex3f (1, -1, -1);
glVertex3f (1, 1, -1);
glVertex3f (-1, -1, -1);
glVertex3f (1, 1, -1);
glVertex3f (-1, 1, -1);
glEnd();
导致一个白色正方形。使用维也纳各组织,从我可以从教程的分类收集,应更改代码以:
float vertexes[][3] = {
{ 1, 1, -1},
{ 1, -1, -1},
{-1, 1, -1},
{-1, -1, -1},
};
unsigned int indexes[] = {
3, 1, 0,
3, 0, 2,
};
GLuint vbo, ibo;
glGenBuffers (1, &vbo);
glBindBuffer (GL_ARRAY_BUFFER, vbo);
glEnableClientState (GL_VERTEX_ARRAY);
glVertexPointer (3, GL_FLOAT, 0, 0);
glGenBuffers (1, &ibo);
glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, ibo);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
gluPerspective (70, 4.0f/3, 1, 1000);
glMatrixMode (GL_MODELVIEW);
glLoadIdentity();
gluLookAt (0, 0, -5,
0, 0, 0,
0, 1, 0);
glBufferData (GL_ARRAY_BUFFER, sizeof vertexes, vertexes, GL_STATIC_DRAW);
glBufferData (GL_ELEMENT_ARRAY_BUFFER, sizeof indexes, indexes, GL_STATIC_DRAW);
glDrawElements (GL_TRIANGLES, 2, GL_UNSIGNED_INT, 0);
然而,这并未使任何东西。
“*从我可以从各种各样的教程中收集*”我从来没有见过任何教程认可代码或类似的东西。 –
@MeDiCS - 我只是猜测,但我不确定是否可以设置指向尚未创建的缓冲区的指针。在调用glBufferData之前不分配内存,因此glVertexPointer将不能存储指向内存的指针,因为它尚不存在。我建议尝试在glVertexPointer之前放置glBufferData。当你的代码不工作时,你应该使用'glGetError'。 – Tim
@Tim:OpenGL正在接受每一个命令---所有调用都包含一个检查错误的宏。另外,在'glBufferData'之后移动'glVertexPointer'不起作用。 – moatPylon