我是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++;
}
可以在这里找到完整的课程。
有人可以帮我吗?
Note the GLES 11 does not support GL_LINE_STIPPLE
Drawing rectangle with dashed boundary in openGL android
在OpenGL ES 1.1中,您不能使用glLineStipple
,也不能使用着色器。但是您可以使用一维纹理和Alpha test。参见OpenGL ES 1.1 Full Specification。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 test并启用二维纹理。
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,10]:
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