LWJGL顶点索引缓冲区导致一半“网格”加载

时间:2017-07-18 12:38:05

标签: java opengl 3d lwjgl

我正在跟随Antonio Bejarano的LWJGL书籍进行3D游戏开发。我已经达到了能够在屏幕上渲染四边形的程度。在实现了顶点索引缓冲区之后,四边形中只有一个三角形渲染到屏幕上,因此我认为可以安全地假设问题与该代码有关。

        // Vertex Index Buffer
        idxVboId = glGenBuffers();
        vertsIdxBuffer = MemoryUtil.memAllocInt(indices.length);
        vertsIdxBuffer.put(indices).flip();
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,idxVboId);
        glBufferData(GL_ELEMENT_ARRAY_BUFFER,vertsIdxBuffer,GL_STATIC_DRAW);

顶点缓冲区和颜色缓冲区的代码有效,因为我已经删除了对索引缓冲区的引用,并且出现了完整的四边形。我还更改了render方法以考虑要呈现的新类型:

    shaderProgram.bind();

        //bind to vao
        glBindVertexArray(mesh.getVaoId());
        //enable positions buffer
        glEnableVertexAttribArray(0);
        //enable colour buffer
        glEnableVertexAttribArray(1);

        //draw verts
        glDrawElements(GL_TRIANGLES, 
        mesh.getVertexCount(),GL_UNSIGNED_INT,0);

        //restore state (?)
        glDisableVertexAttribArray(0);
        glDisableVertexAttribArray(1);
        glBindVertexArray(0);

        shaderProgram.unbind();

任何建议都值得赞赏,因为我一直盯着这几个小时,并且无法真正看出我犯了哪些错误。

编辑:四网格代码

     renderer.init();

    float[] positions = new float[]{
            -0.5f,  0.5f, 0.0f,
            -0.5f, -0.5f, 0.0f,
            0.5f,  0.5f, 0.0f,
            0.5f,  0.5f, 0.0f,
            -0.5f, -0.5f, 0.0f,
            0.5f, -0.5f, 0.0f,
    };

    float[] colours = new float[]{0.5f,0f,0f,0f,0.5f,0f,0f,0f,0.5f,0f,0.5f,0.5f};

    int[] indices = new int[]{
            0, 1, 3, 3, 1, 2,
    };

    mesh = new BMesh(positions,colours,indices);

2ND编辑 位置数组更改之前和之后

Before

After

1 个答案:

答案 0 :(得分:0)

在查看四维网格初始化代码之后,似乎错误是由于第二个四边形上的顶点32是相同的顶点,即两者都在(0.5, 0.5, 0.0)。也许你错误地复制了数组中的第4和第5个顶点?

即。也许你的意思是

float[] positions = new float[]{
        -0.5f,  0.5f, 0.0f,
        -0.5f, -0.5f, 0.0f,
        0.5f,  0.5f, 0.0f,
        0.5f, -0.5f, 0.0f
};
编辑:您的指数似乎错了。将它们更改为{ 0, 1, 3, 0, 3, 2 }