C++ OpenGL VBO不工作(C+;+;)

C++ OpenGL VBO不工作(C+;+;),c++,opengl,vbo,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_

当我试图使用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我没有正确使用索引


有人能帮我解决这个问题吗?

您只向VBO传递3个浮动,您想传递更多:

glBufferData(GL_ARRAY_BUFFER,sizeof(GLfloat)*vertices.size(),&vertices[0],GL_STATIC_DRAW);
当您绑定了
GL\u元素\u数组\u缓冲区时
gldrawerelements中的void*与绑定的缓冲区相关:

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

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

当你遇到问题时,一定要检查glGetError,这将有助于了解你在哪些电话上开始出错。

在问题的顶部@ratched\u freak已经在他的回答中提到(对于顶点,传递给
glBufferData
的大小错误,
glBufferData
未为索引缓冲区调用,并相应地将最后一个参数更新为
glpaurements
),您还有另一个问题。请仔细查看您的坐标:

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);

第一个和第三个顶点是相同的。所以你有一个退化的三角形。

这可能会有帮助吗?glGenBuffers(1,&bufferID);glGenBuffers(1,&bufferID2);glBindBuffer(GL_数组_BUFFER,bufferID);glBindBuffer(GL_数组_BUFFER,sizeof(GLfloat)*顶点。size(),&vertexts[0],GL_静态图)glBufferData(GL_元素数组缓冲区,sizeof(GLuint)*index.size(),&index[0],GL_静态绘制);glEnableClientState(GL_顶点数组);glVertexPointInter(3,GL_浮点,0,0);glDrawerElements(GL_三角形,index.size(),GL_无符号顶点,0);glDisableClientState(GL_顶点数组);仍然不起作用。嗯,glGetErrornvm也没有错误。它起作用了!我的向量->中的三角形坐标错误