2017-01-19 96 views
0

我想在GLSurfaceView相機預覽中繪製正方形並繪製文本。使用OpenGL在android上繪製文本

首先我試着畫正方形

上onDrawFrame
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); 
} 

這個方法調用(); 並在相機預覽glsurfaceview上顯示正方形。

,我嘗試繪製文本

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(); 
} 

和顯示文本。但研究背景顏色爲綠色

enter image description here

爲什麼背景色綠? 請幫我。

謝謝。

回答

1

我沒有看到你的代碼使用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(...) 
+0

你的來源是平方。廣場不是綠色的背景。只有文字畫。 – chohyunwook

+0

@chohyunwook你不知道如何畫一個正方形。上面的代碼從不畫方形。 gldraw ****()只能繪製一個正方形,這就是爲什麼我提到「我沒有看到實際繪圖代碼」 – Sung

+0

@chohyunwook答案已更新。現在看來你從不使用OpenGL。您只需使用畫布繪製文本和相機預覽即可繪製每個相機框。兩者都可以用OpenGL完成。但是,如果不需要,則不必使用OpenGL。 – Sung