Open GL, glDrawElements, GL_LINE_LOOP 没有正确连接顶点

Open GL, glDrawElements, GL_LINE_LOOP does not connect vertices correctly

当我绘制一个具有以下顶点的正方形时:

private static float[] vertexArray = {
        // vertex
        -0.5f,  0.5f, 0.5f,
        -0.5f, -0.5f, 0.5f,
        0.5f, -0.5f, 0.5f,
        0.5f,  0.5f, 0.5f            
};
private static short indicesArray[] = {
        0, 1, 2,
        0, 2, 3,
};

结果很好,它正确绘制了循环

但是当我按照

绘制另一个平行正方形时
 private static float[] vertexArray = {
        // vertex
        -0.5f,  0.5f, 0.5f,
        -0.5f, -0.5f, 0.5f,
        0.5f, -0.5f, 0.5f,
        0.5f,  0.5f, 0.5f,

        -0.5f,  0.5f, -0.5f,
        -0.5f, -0.5f, -0.5f,
        0.5f, -0.5f, -0.5f,
        0.5f,  0.5f, -0.5f,

};
private static short indicesArray[] = {
        0, 1, 2,
        0, 2, 3,

        4, 5, 6,
        4, 6, 7,
};

结果是这样的:

我不知道为什么会这样。我认为有些事情我不知道 GL_LINE_LOOP 是如何工作的。 GL_LINE_STRIPS 也给出相同的结果。 如何解决这个问题?我希望方块是分开的。

代码如下:

  GLES30.glDrawElements(GLES30.GL_LINE_LOOP, indicesArray.length,GLES30.GL_UNSIGNED_SHORT,0);

提前致谢。

对不起,图片太大了,希望有人能帮我解决一下。

如果要画多个GL_LINE_LOOP with a single draw call, then you can use the Primitive Restart技术

固定的原始重启索引必须是 2^N-1,其中 N 是用于索引的数据类型的位数。
这意味着 255 GL_UNSIGNED_BYTE,65535 GL_UNSIGNED_SHORT 和 2147483647 GL_UNSIGNED_INT

将索引添加到索引列表中,在形成分离图元的索引之间:

private static short indicesArray[] = {
    0, 1, 2,
    0, 2, 3,

    65535, // restart primitive

    4, 5, 6,
    4, 6, 7,
};

必须启用固定索引的原始重启:

glEnable(GL_PRIMITIVE_RESTART_FIXED_INDEX);

在桌面 OpenGL 中,可以通过 glPrimitiveRestartIndex 选择重启索引。这必须由 glEnable(GL_PRIMITIVE_RESTART).

启用