c++ - OpenGL 顶点缓冲对象不起作用

标签 c++ opengl vertex-buffer

我有一个包含以下数据的 bunny.h:

bunny[] | vertex coordinates xyz

NUM_TRIANGLES | the amount of triangles for the bunny

normals[] | the normals for each triangle

triangles[] | indices for the triangles

我想将数据用于顶点缓冲对象。

这是我尝试加载数据的方式

GLfloat values[NUM_TRIANGLES*3];
    for(int i = 0; i < NUM_TRIANGLES*3; i++)
        values[i] = bunny[i];

  //  init and bind a VBO (vertex buffer object) //
    glGenBuffers(1, &bunnyVBO);
    glBindBuffer(GL_ARRAY_BUFFER, bunnyVBO);


  //  copy data into the VBO //
    glBufferData(GL_ARRAY_BUFFER, sizeof(values), &values, GL_STATIC_DRAW);

  // init and bind a IBO (index buffer object) //
    glGenBuffers(1, &bunnyIBO);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bunnyIBO);

  //  copy data into the IBO //
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(triangles), &triangles, GL_STATIC_DRAW);
  // unbind active buffers //
  glBindVertexArray(0);
  glBindBuffer(GL_ARRAY_BUFFER, 0);
  glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

稍后在程序中我想使用这段代码渲染缓冲区:

glBindBuffer(GL_ARRAY_BUFFER, bunnyVBO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bunnyIBO);
glEnableClientState(GL_VERTEX_ARRAY);
glDrawElements(GL_TRIANGLES, NUM_TRIANGLES, GL_UNSIGNED_INT, triangles);
glDisableClientState(GL_VERTEX_ARRAY);

OpenGL 工作正常,但我没有看到兔子...(数据没有损坏或类似的东西,错误在我的代码中) 有人可以帮助我吗?

最佳答案

我没有看到对 glVertexPointer 的任何调用。如果你想使用 VBO 中的元素,它应该是

glDrawElements(GL_TRIANGLES, NUM_TRIANGLES, GL_UNSIGNED_INT, 0);

关于c++ - OpenGL 顶点缓冲对象不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16044937/

相关文章:

c++ - 防止头文件中类实现的 "already defined"错误

c++ - 改变RGBA颜色后OpenGL以16种颜色绘制

c++ - 绘制许多四边形

c++ - glTranslatef 等价于没有它

opengl - 经典的 "nothing is getting rendered"OpenGL 问题

opengl - 使用 VAO 时,VBO 中的交错是否会提高性能

c++ - 如何检查分割的平面是否是真实平面

C++ 控制 cout 何时刷新

c++ - 尝试在 C++ OpenGL 中打印但返回一个整数?

c++ - VBO : Array not drawn