【发布时间】:2012-01-08 07:13:28
【问题描述】:
我能够让 VBO 为单个网格工作。 首先我设置了opengl:
//....
GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY);
对于每个网格,我生成缓冲区(每个网格对此函数调用两次):
vertBuffer = GL15.glGenBuffers( BufferUtils.createIntBuffer(1));
//same idea for faceBuffer
我将网格数据放入 FloatBuffers 和 IntBuffers。 然后我必须将这些发送到opengl:
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vertBuffer)
GL15.glBufferData(GL15.GL_ARRAY_BUFFER, myVertPositions,GL15.GL_STATIC_DRAW);
//same idea for faces.
注意:以上所有步骤只执行一次。
终于有渲染了:
//...
int stride = 0; //0 = compact arrays.
int offset = 0; //Each mesh would need a different offset?
GL11.glVertexPointer(3, GL11.GL_FLOAT, stride, offset);
GL12.glDrawRangeElements(GL11.GL_TRIANGLES, 0, numVerts,
numFaces*3, GL11.GL_UNSIGNED_INT, offset);
//Using the "buffer versions" of these functions throws
//"Cannot use Buffers when Array Buffer Object is enabled"
//Whether or not glEnableClientState is called.
我添加的任何新网格都会覆盖旧网格。将我所有的网格放入同一个缓冲区听起来效率不高。 否则我怎样才能让多个网格共存?
【问题讨论】: