当我绘制一个具有以下顶点的正方形时:
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
,那么你可以使用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)
启用。