c++ - OpenGL VBO 不工作(C++)

标签 c++ opengl vbo

当我尝试使用 VBO + 索引绘制三角形时,它不起作用

   vertices.push_back(0.5f);
   vertices.push_back(-0.5f);
   vertices.push_back(-2.0f);
   vertices.push_back(-0.5f);
   vertices.push_back(-0.5f);
   vertices.push_back(-2.0f);
   vertices.push_back(0.5f);
   vertices.push_back(-0.5f);
   vertices.push_back(-2.0f);

   indices.push_back(0);
   indices.push_back(1);
   indices.push_back(2);


   GLuint bufferID,bufferID2;

   glGenBuffers(1,&bufferID);
   glGenBuffers(1,&bufferID2);
   glBindBuffer(GL_ARRAY_BUFFER,bufferID);
   glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,bufferID2);
   glBufferData(GL_ARRAY_BUFFER,sizeof(GLfloat)*3,&vertices[0],GL_STATIC_DRAW);

   glEnableClientState(GL_VERTEX_ARRAY);

   glVertexPointer(3,GL_FLOAT,0,0);
   glDrawElements(GL_TRIANGLES,indices.size(),GL_UNSIGNED_INT,&indices[0]);

   glDisableClientState(GL_VERTEX_ARRAY);

   glDeleteBuffers(1,&bufferID);
   glDeleteBuffers(1,&bufferID2);

但是用 VBO 画一个点是可行的

vertices.push_back(0.5f);
vertices.push_back(-0.5f);
vertices.push_back(-2.0f);

GLuint bufferID;

glGenBuffers(1,&bufferID);
glBindBuffer(GL_ARRAY_BUFFER,bufferID);
glBufferData(GL_ARRAY_BUFFER,sizeof(GLfloat)*3,&vertices[0],GL_STATIC_DRAW);



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

glPointSize(100.0f);
glDrawArrays(GL_POINTS,0,1);
glDisableClientState(GL_VERTEX_ARRAY);

glDeleteBuffers(1,&bufferID);

我已经通读了一些教程和其他帖子,但没有任何效果。 mby 我没有正确使用索引?

谁能帮我解决这个问题?

最佳答案

你只传递 3 个 float 给你想传递更多的 VBO:

glBufferData(GL_ARRAY_BUFFER,sizeof(GLfloat)*vertices.size(),&vertices[0],GL_STATIC_DRAW);

并且当您绑定(bind)了 GL_ELEMENT_ARRAY_BUFFER 时,glDrawElements 中的 void* 是相对于绑定(bind)缓冲区的:

glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLuint)*indices.size(), &indices[0], GL_STATIC_DRAW);

glDrawElements(GL_TRIANGLES, indices.size(), GL_UNSIGNED_INT, 0);

并在遇到问题时始终检查 glGetError,这将有助于了解您从哪些调用开始出错。

关于c++ - OpenGL VBO 不工作(C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23740092/

相关文章:

c++ - IP_ADAPTER_ADDRESSES_LH 中的 IP 地址在哪里

opengl - OpenGL命令后缀 'v'代表什么?

visual-studio-2010 - 指定的文件是无法识别或不受支持的二进制格式

opengl - 你能计算每个实例而不是每个顶点的东西吗?

android - 优化 Android/iOS 设备上的巨大 VBO 绘图

c++ - 无法包含 winhttp.h (带有代码::blocks/mingw)c++

c# - Emgu Opencv C# ConvertTo 不同的结果

c++ - 标准库类型赋值运算符的引用限定符

C++/OpenGL VAO 问题

c++ - OpenGL 如何知道它应该根据 GL_ARRAY_BUFFER 将顶点绘制到什么位置?