【发布时间】:2014-06-28 14:46:28
【问题描述】:
大约 3 小时,我正在尝试使用 glDrawElement 函数绘制简单的 3d 三角形,但似乎我做错了,这就是我所做的:
float[] verts = new float[9];
int[] tris = new int[3];
verts[0]=0;verts[1]=0;verts[2]=0;
verts[3]=0;verts[4]=1;verts[5]=0;
verts[6]=1;verts[7]=0;verts[8]=1;
tris[0]=3;
tris[1]=2;
tris[2]=1;
vertBuffer= BufferUtils.createFloatBuffer(verts.length);
trisBuffer= BufferUtils.createIntBuffer(tris.length);
vertBuffer.put(verts);
vertBuffer.flip();
trisBuffer.put(tris);
trisBuffer.flip();
那就是创建缓冲区。
if(VBOID==-1)VBOID=GL15.glGenBuffers();
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, VBOID);
GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertBuffer,GL15.GL_STATIC_DRAW);
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
if(VAOID==-1)VAOID=GL15.glGenBuffers();
GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, VAOID);
GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, trisBuffer,GL15.GL_STATIC_DRAW);
GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);
这就是绑定缓冲区
glEnableClientState(GL_VERTEX_ARRAY);
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, VBOID);
glVertexPointer(3, GL_FLOAT, 0, 0);
GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, VAOID);
glPushMatrix();{
glDrawElements(GL_TRIANGLES, WIDTH*HEIGHT*2, GL_INT, 0);
}glPopMatrix();
GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
glDisableClientState(GL_VERTEX_ARRAY);
Display.update();
这是绘图代码 当我直接绘制它而不传递索引时它可以工作,但它不能以这种方式工作。 我希望有人能告诉我这段代码有什么问题。
【问题讨论】: