如何设置索引缓冲对象



我正在尝试使用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的方法。对于包含顶点数据的vbo,我知道使用GL20.glVertexAttribPointer(0, 3, GL11.GL_FLOAT, false, 0, 0);,但我记得索引缓冲区的行为不同。这是一个学习的过程,所以请提出建设性的批评。

您所需要做的就是在绑定VAO的同时绑定索引缓冲区。

看到https://www.opengl.org/wiki/Buffer_Object General_use:

GL_ELEMENT_ARRAY_BUFFER

gl*Draw*Elements*形式的所有渲染函数将使用指针字段作为从绑定到此目标的缓冲区对象开始的字节偏移量。用于索引呈现的索引将从缓冲区对象中获取。注意,这个绑定目标是顶点数组对象状态的一部分,所以在绑定缓冲区之前必须绑定VAO。

最新更新