(OPEN_GL& LWJGL)glDrawElements()不绘制顶点

时间:2016-06-25 15:12:11

标签: java opengl lwjgl

美好的一天,

我已多次看到这个问题,但答案似乎并不适用于我的案例。 我有一个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版本,所以我认为这可能有效。在评论中有人建议这可能是个问题?

0 个答案:

没有答案