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)
.
启用
当我绘制一个具有以下顶点的正方形时:
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)
.