美好的一天,
我已多次看到这个问题,但答案似乎并不适用于我的案例。 我有一个JAVA类,应该使用VBO绘制一个球体。 在构造函数中,我定义了顶点和索引缓冲区,并计算每个顶点的坐标:
public sphereHelper(float fRadius, int iSlices, int iStacks)
{
FBVertices = GLDrawHelper.directFloatBuffer(new float[iSlices*iStacks*4*3]);
FBVertices.clear();
IBVerticesIndex = GLDrawHelper.directIntBuffer(new int[iSlices*iStacks*4]);
IBVerticesIndex.clear();
int index=0;
//在此之后,我们有很长的代码来计算每个顶点'将x,y,z放在顶点缓冲区中,同时将indexbuffer IBVerticesIndex放在一起指向当时,然后是:
VertexBufferID= GL15.glGenBuffers();
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER,VertexBufferID);
GL15.glBufferData(GL15.GL_ARRAY_BUFFER,FBVertices,GL15.GL_STATIC_DRAW);
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER,0);
//generate unique buffer id(like texture id) to bind to the GL_ELEMENT_ARRAY_BUFFER
VertexIndexBufferID=GL15.glGenBuffers();
GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, VertexIndexBufferID);
GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, IBVerticesIndex, GL15.GL_STATIC_DRAW);
GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER,0);}
我的draw()函数如下所示:
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, VertexBufferID);
GL20.glEnableVertexAttribArray(0);
GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER,VertexIndexBufferID);
GL11.glDrawElements(GL11.GL_TRIANGLES,IBVerticesIndex.limit(),GL11.GL_UNSIGNED_INT,0);
GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER,0);
GL20.glDisableVertexAttribArray(0);
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER,0);
它尝试了很多东西,但glDrawElements()只是没有画出任何东西。
这是另外令人困惑的,因为glDrawArrays(GL11.GL_TRIANGLES, 0,FBVertices.capacity());
确实绘制了它。
我感谢任何建议!
编辑:在here中他们一起使用不同的OPENGL版本,所以我认为这可能有效。在评论中有人建议这可能是个问题?