Open GL,glDrawElements,GL_LINE_LOOP不能正确连接顶点

问题描述 投票:1回答:1

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

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,
};

结果很好它正确绘制循环enter image description here

但是当我通过跟随绘制另一个平行方格时

 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,
};

结果是:enter image description here enter image description here

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

代码如下:

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

提前致谢。

对不起大图片我希望有人能帮我解决这个问题。

android opengl-es
1个回答
0
投票

如果你想用一个绘图调用绘制多个GL_LINE_LOOP,那么你可以使用Primitive Restart技术。

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

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

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)启用。

© www.soinside.com 2019 - 2024. All rights reserved.