【问题标题】:LWJGL Vertex Index Buffer causes half of "Mesh" to loadLWJGL 顶点索引缓冲区导致加载一半“网格”
【发布时间】:2017-07-18 12:38:05
【问题描述】:

我正在关注 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);

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

    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);

第二次编辑 前后位置数组变化

Before

After

【问题讨论】:

  • 可能是因为背面剔除?您是否启用了GL_CULL_FACE,您也设置了哪个约定? (见khronos.org/opengl/wiki/Face_Culling)。此外,请显示您声明四边形网格数据的位置和方式。
  • 感谢您的回复,我现在要研究剔除,我已经添加了形成四边形网格的代码

标签: java opengl 3d lwjgl


【解决方案1】:

查看四边形网格初始化代码后,错误似乎是由于第二个四边形上的顶点 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 }

【讨论】:

  • 我附上了两张照片,以向您展示您提出的更改所取得的成果。现在似乎有两个单独的三角形,但它们不再排列,我认为这可能与索引缓冲区中的值没有与新的位置数组对齐有关。
  • @LiamDevlin 是的,因为您的索引错误。我会更新答案
  • 非常感谢您的帮助,问题已解决。故事的寓意:检查你的坐标:D
  • @LiamDevlin 确实是的,它们可能会很痛苦,即使对于像四边形 / 立方体这样简单的东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 2015-08-23
  • 1970-01-01
相关资源
最近更新 更多