C++ OpenGL VBO不工作(C+;+;)
当我试图使用VBO+索引绘制三角形时,它不起作用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_
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也没有错误。它起作用了!我的向量->中的三角形坐标错误