android - 打开 GL、glDrawElements、GL_LINE_LOOP 没有正确连接顶点
问题描述
当我用以下顶点绘制一个正方形时:
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技术。
固定的原始重启索引必须是 2^N-1,其中 N 是用于索引的数据类型的位数。
这意味着255、GL_UNSIGNED_BYTE
65535GL_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)
。
推荐阅读
- java - "No operations allowed after connection closed " using Dart and Java
- python - 为什么 Django DoesNotExist 擦除其他对象?
- mysql - MySQL - 从变量设置 DESC LIMIT
- python - script does not print variable value consistently
- javascript - 如何根据变量在剃须刀页面中有条件地呈现 div 类?
- python - Which way is the best for running background processes?
- ffmpeg - 使用 FFMpeg 将网页流式传输到 YouTube
- python - Trying to run Python using Reticulate giving a module not found error, but it is installed
- python - 使用 Azure Pipelines 为 Raspberry Pi 构建 Python 包
- instagram - 如何根据最新的 instagram api 规则获取 instagram 访问令牌?