我正在尝试使用lwjgl(java OpenGL绑定)渲染基本模型。我想尽可能地利用我记忆中的知识来做这件事。我创建了一个像这样的vbo:
int verticesVBO = GL15.glGenBuffers ( );
vboIDs.add ( verticesVBO );
FloatBuffer verticesData = bufferFromData ( vertices );// Custom Method
GL15.glBindBuffer ( GL15.GL_ARRAY_BUFFER , verticesVBO );
GL15.glBufferData ( GL15.GL_ARRAY_BUFFER , verticesData , GL15.GL_STATIC_DRAW );
GL20.glVertexAttribPointer(0, 3, GL11.GL_FLOAT, false, 0, 0);// Binds the vbo to the bound vao
if(( error = GL11.glGetError()) != GL11.GL_NO_ERROR) System.err.println(GLU.gluErrorString(error));
我使用索引缓冲区对象实现了这一点:
int indicesVBO = GL15.glGenBuffers ( );
vboIDs.add ( verticesVBO );
IntBuffer indicesData = bufferFromData ( indices );
GL15.glBindBuffer ( GL15.GL_ELEMENT_ARRAY_BUFFER , indicesVBO );
GL15.glBufferData ( GL15.GL_ELEMENT_ARRAY_BUFFER , indicesData , GL15.GL_STATIC_DRAW );
//Problem Here
if(( error = GL11.glGetError()) != GL11.GL_NO_ERROR) System.err.println(GLU.gluErrorString(error));
我遇到的问题是我不知道用于将索引缓冲区绑定到vao的方法。对于包含我知道使用GL20.glVertexAttribPointer(0, 3, GL11.GL_FLOAT, false, 0, 0);
的顶点数据的vbo,我记得索引缓冲区的行为不同。这是一个学习过程,所以请批评你的建设性。
答案 0 :(得分:1)
您需要做的就是在绑定VAO时绑定索引缓冲区。
请参阅https://www.opengl.org/wiki/Buffer_Object#General_use:
document.getElementById(your id).className = classname # class name you want
gl * Draw * Elements *形式的所有渲染函数都将使用指针字段作为绑定到此目标的缓冲区对象开头的字节偏移量。用于索引渲染的索引将从缓冲区对象中获取。 请注意,此绑定目标是“顶点数组对象”状态的一部分,因此必须在绑定缓冲区之前绑定VAO。