Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LWJGL顶点索引缓冲区导致一半的;网眼布“;装载_Java_Opengl_3d_Lwjgl - Fatal编程技术网

Java LWJGL顶点索引缓冲区导致一半的;网眼布“;装载

Java LWJGL顶点索引缓冲区导致一半的;网眼布“;装载,java,opengl,3d,lwjgl,Java,Opengl,3d,Lwjgl,我正在跟随Antonio Bejarano的LWJGL书进行3D游戏开发。我已经达到了能够在屏幕上渲染四边形的程度。在实现了顶点索引缓冲区之后,只有一个三角形的四边形渲染到屏幕上,所以我认为可以安全地假设问题出在代码上 // Vertex Index Buffer idxVboId = glGenBuffers(); vertsIdxBuffer = MemoryUtil.memAllocInt(indices.length); v

我正在跟随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);
第二版 位置数组更改前后


查看四边形网格初始化代码后,错误似乎是由于第二个四边形上的顶点
3
2
是相同的顶点,即两者都位于
(0.5,0.5,0.0)
。可能是您错误地复制了阵列中的第4个和第5个顶点

i、 也许你是有意的

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}

可能是因为背面剔除?您是否启用了
GL\u CULL\u FACE
,以及设置了哪种约定?(见附件)。另外,请展示您在何处以及如何声明四边形网格数据。感谢您的回复,我现在将查看剔除,我已经添加了形成四边形网格的代码。我附上了两张照片,向您展示您建议的更改实现了什么。现在似乎有两个独立的三角形,但它们不再对齐,我认为这可能与索引缓冲区中的值没有与新的位置数组对齐有关。@LiamDevlin是的,因为您的索引是错误的。我会更新答案谢谢你的帮助,问题解决了。故事的寓意:检查你的坐标:D@LiamDevlin的确是的,它们可能是一种痛苦,即使对于像四边形/立方体这样简单的东西也是如此