android - 在openGL android中绘制带有虚线边界的矩形
问题描述
我是openGL的新手。我想在 GLES11 画布上绘制一个带有虚线边界的矩形。我可以使用drawRect()
此处提供的方法绘制一个普通矩形:
@Override
public void drawRect(float x, float y, float width, float height, GLPaint paint) {
GL11 gl = mGL;
mGLState.setColorMode(paint.getColor(), mAlpha);
mGLState.setLineWidth(paint.getLineWidth());
saveTransform();
translate(x, y);
scale(width, height, 1);
gl.glLoadMatrixf(mMatrixValues, 0);
gl.glDrawArrays(GL11.GL_LINE_LOOP, OFFSET_DRAW_RECT, 4);
restoreTransform();
mCountDrawLine++;
}
完整的课程可以在这里找到。
有人可以帮我吗?
注意 GLES 11 不支持GL_LINE_STIPPLE
解决方案
在 OpenGL ES 1.1 中glLineStipple
,您不能使用也不能使用着色器。但是您可以使用一维纹理和Alpha 测试。请参阅OpenGL ES 1.1 完整规范。OpenGL ES 1.1 也不支持一维纹理。但这可以很容易地用二维 Nx1 纹理代替。
使用内部格式GL_ALPHA
和以下模式创建 2D (4x1) 纹理:
1 0 0 1
缩小和放大功能是GL_NEAREST
。包装参数是GL_REPEAT
(这是默认值)。
byte arr[] = new byte[] { 255, 0, 0, 255 };
ByteBuffer textureBuffer = ByteBuffer.wrap(arr);
gl2.glGenTextures(1, texture_id_, stippleTexObj);
gl.glBindTexture(GL.GL_TEXTURE_2D, stippleTexObj);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_NEAREST);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_S, GL.GL_REPEAT);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_T, GL.GL_REPEAT);
gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_ALPHA, 4, 1, 0, GL.GL_ALPHA, GL.GL_UNSIGNED_BYTE, textureBuffer);
绘制线条时,您必须启用Alpha 测试并启用 2 维纹理。
gl.glEnable(GL11.GL_ALPHA_TEST);
gl.glAlphaFunc(GL11.GL_GEQUAL, 0.5f);
gl.glEnable(GL11.GL_TEXTURE_2D);
确保在 ypu 绘制线时与顶点关联的纹理坐标与整数值对齐:
例如,左下角为 (-0.5 -0.5) 和右下角为 (0.5, 0.5) 的四边形,纹理坐标在 [0, 5] 范围内:
x y u
-0.5f -0.5f 0.0f
0.5f -0.5f 5.0f
0.5f 0.5f 0.0f
-0.5f 0.5f 5.0f
推荐阅读
- stylesheet - 我正在尝试删除或更改表格元素的样式
- c++ - 注意:缺少 vtable 通常意味着第一个非内联虚拟成员函数没有定义
- arrays - 外部和内部forloop角度
- python - 在 conda 中创建 requriements.txt 不显示版本
- python - ValueError: 层序的输入 0 与层不兼容。我该如何解决这个问题?
- android - 为什么 vkCreateDevice() 在 Android 11 上崩溃?
- java - 将字符串 startTime 和 endTime 与当前时间进行比较并执行操作
- javascript - JavaScript 中的智能裁剪文档图像
- python - 如何使用列名作为 x 轴在 seaborn 中生成分组条形图?
- python - 如何消除此 pytorch 代码中的 for 循环