openGL android中带有虚线边框的绘制矩形

问题描述 投票:1回答:1

我是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++;
}

可以在这里找到完整的课程。

https://github.com/classified/Android-Work/blob/master/android_packages_apps_Gallery2-cm-10.2/src/com/android/gallery3d/glrenderer/GLES11Canvas.java

有人可以帮我吗?

Note the GLES 11 does not support GL_LINE_STIPPLE

android opengl-es
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.