我从一个顶点缓冲区渲染多个对象时出现问题。 我有一个包含所有顶点和多个IBO的VBO。 我的想法是为n个IBO创建n个VAO,并为每个这个VAO绑定VBO和一个IBO。不要真正知道如何解决这个问题。单个VBO和多个IBO
// all indices
std::vector<std::vector<unsigned int>> allIndices;
// gen buffers for ibos
glGenBuffers(allIndices.size(),ibos);
// gen vaos
glGenVertexArray(allIndices.size(),vaos);
// vbo for vertices
glGenBuffers(1,&vbo);
glBindBuffer(GL_ARRAY_BUFFER,vbo);
glBufferData(GL_ARRAY_BUFFER,...);
// bind VAOn + IBOn + VBO
for(unsigned int x = 0; x < allIndices.size(); x++) {
glBindVertexArray(vao[x]);
// bind current ibo
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,ibo[x]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER,...);
//
glBindBuffer(GL_ARRAY_BUFFER,vbo);
// how to bind this buffer to the vao without uploading the data once more?
glBindVertexArray(0);
}
我的第二个想法是concatinate所有指数,并与glDrawRangeElements打电话给他们()
使用corect标签。这不是C. – Olaf
“*如何将此缓冲区绑定到vao而无需再次上传数据?*”您从未将此缓冲区添加到VAO中以开始。将数据上传到缓冲区与使用顶点数据的缓冲区无关(除了将顶点数据传递给缓冲区)。 –