Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用opengles具有透明的背景_Android_Opengl Es - Fatal编程技术网

Android 使用opengles具有透明的背景

Android 使用opengles具有透明的背景,android,opengl-es,Android,Opengl Es,我正在用Opengl es为android开发一款视频游戏。我使用的图像的背景有问题,因为它会绘制背景的颜色 这里是我的渲染器: @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { //Initialize GL: gl.glDisable(GL10.GL_DITHER); gl.glEnable(GL10.GL_TEXTURE_2D);

我正在用Opengl es为android开发一款视频游戏。我使用的图像的背景有问题,因为它会绘制背景的颜色

这里是我的渲染器:

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {

    //Initialize GL:                
    gl.glDisable(GL10.GL_DITHER);
    gl.glEnable(GL10.GL_TEXTURE_2D);            //Enable Texture Mapping ( NEW )
    gl.glShadeModel(GL10.GL_SMOOTH);            //Enable Smooth Shading
    gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);    //Black Background
    gl.glClearDepthf(1.0f);                     //Depth Buffer Setup
    gl.glEnable(GL10.GL_DEPTH_TEST);            //Enables Depth Testing
    gl.glEnable(GL10.GL_CULL_FACE);
    gl.glDepthFunc(GL10.GL_LEQUAL);             //The Type Of Depth Testing To Do
    gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST); //Really Nice Perspective Calculations //<---- SI LAG, probar GL_FASTEST

    LoadTextures(gl);
}
以及每个实体的绘制方法:

gl.glColor4f(red, green, blue, alpha);

    // bind the previously generated texture
    gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId);

    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

    // Point to our vertex buffer
    gl.glVertexPointer(2, GL10.GL_FLOAT, 0, screenBuffer); //2 dimensiones
    gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);

    // Draw the vertices as triangle strip
    gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 4); //12 /3 -> 12 es el tamano del vector de vertices del cuadrado

    //Disable the client state before leaving
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
我的GLSURFACHEVIEW中也有:

setEGLConfigChooser(8,8,8,8,16,0);
    renderer = new GRenderer(c);
    setRenderer(renderer);        
    setRenderMode(RENDERMODE_WHEN_DIRTY);
    getHolder().setFormat(PixelFormat.TRANSLUCENT);
    setZOrderOnTop(true);

但它不起作用。我应该使用哪种颜色来实现半透明背景?代码中有错误吗?感谢您实现了alpha,您的代码在OpenGL调用方面似乎还不错

但是,对于图像:

1) 您的图像需要烘焙一个alpha通道。RGB不会切断它-你需要RGBA。这可以很容易地在Photoshop、Gimp或其他图像编辑器中修复

2) 如果想要半透明,最好将alpha通道设置为某个中间值,并将RGB设置为希望成为“半透明”混合颜色的任何颜色。或者,您可以在片段着色器中创建自定义混合函数,以对alpha通道执行一些特殊操作

setEGLConfigChooser(8,8,8,8,16,0);
    renderer = new GRenderer(c);
    setRenderer(renderer);        
    setRenderMode(RENDERMODE_WHEN_DIRTY);
    getHolder().setFormat(PixelFormat.TRANSLUCENT);
    setZOrderOnTop(true);