1

我正在尝试使用 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);但我记得索引缓冲区的行为不同。这是一个学习过程,所以请以建设性的态度提出您的批评。

4

1 回答 1

2

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

https://www.opengl.org/wiki/Buffer_Object#General_use

GL_ELEMENT_ARRAY_BUFFER

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

于 2015-08-08T00:47:28.457 回答