在android上使用OpenGL绘制文本

在android上使用OpenGL绘制文本,android,opengl-es,Android,Opengl Es,我想在GLSURFACHEVIEW相机预览上绘制正方形和文本 首先我试着画正方形 private void drawSquare() { GLES20.glEnable(GLES20.GL_SCISSOR_TEST); GLES20.glScissor(20, 300, 500, 50); GLES20.glClearColor(1.0f, 0.0f, 0.0f, 1.0f); GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);

我想在GLSURFACHEVIEW相机预览上绘制正方形和文本

首先我试着画正方形

private void drawSquare() {
    GLES20.glEnable(GLES20.GL_SCISSOR_TEST);
    GLES20.glScissor(20, 300, 500, 50);
    GLES20.glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
    GLES20.glDisable(GLES20.GL_SCISSOR_TEST);
}
此方法调用onDrawFrame(); 并在相机预览GLSURFACHEVIEW上显示方形

我试着画文本

public void GLText(GL10 gl) {

    Bitmap bitmap = Bitmap.createBitmap(64, 64, Bitmap.Config.ARGB_4444);
    Canvas canvas = new Canvas(bitmap);
    bitmap.eraseColor(0);

    Paint paint = new Paint();
    paint.setTextSize(18);
    paint.setAntiAlias(true);
    paint.setARGB(0xff, 0xff, 0xff, 0xff);
    paint.setTextAlign(Paint.Align.LEFT);
    paint.setTextScaleX(0.5f);
    canvas.drawText("testGLText", 0.f, 15.f, paint);

    GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);

    bitmap.recycle();
}
并显示文本。但是背景颜色是绿色的

为什么背景颜色是绿色? 请帮我


谢谢。

我没有看到您使用openGL api绘制代码文本,但没有理由将您的fbo设置为绿色

    GLES20.glEnable(GLES20.GL_SCISSOR_TEST);
    GLES20.glScissor(20, 300, 500, 50);
    GLES20.glClearColor(1.0f, 0.0f, 0.0f, 1.0f); // here you initialize your fbo color as black
    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
    GLES20.glDisable(GLES20.GL_SCISSOR_TEST);
如果要绘制正方形,请执行以下步骤

glclearcolor(...); //Actually, glclearColor() and glclear() are not required.
glclear();
glviewport(....);
gluseprogram() // a shader program you compiled 
bindVBO() // VBO you already set in this case, it saves four vertices
glactivetexture() and bindtexture()
gluniform1f(..) // for the texture
gldrawarray(...) or gldrawelement(...)

你的消息来源是draw square。正方形不是绿色背景。只画文本。@Chohyunbook你不会画正方形。上面的代码从不画正方形。gldraw****()只能画一个正方形,这就是为什么我提到“我看不到实际的绘图代码”@chohyunwook答案已更新。现在你似乎从未使用过OpenGL。您只需使用画布来绘制文本,并使用相机预览来绘制每个相机帧。不过,这两项都可以通过OpenGL完成。但是,如果不需要,就不必使用OpenGL。