我看不到具有alpha通道的纹理背后的纹理

时间:2013-10-17 20:29:56

标签: android opengl-es transparency

我使用2D精灵纹理应用于具有透明或半透明区域的正方形,但如果后面还有其他纹理,我无法通过它们看到任何内容(背景除外)。我可以看到背景图片,因为我使用透明的 GLSurfaceView ,背景应用于 GLSurfaceView 后面的 ImageView

我在图片中的问题:

enter image description here

实际上我在 onSurfaceCreated 方法中使用此代码:

        gl.glEnable(GL10.GL_TEXTURE_2D);
        gl.glShadeModel(GL10.GL_SMOOTH);
        gl.glClearDepthf(1.0f);
        gl.glEnable(GL10.GL_DEPTH_TEST);
        gl.glDepthFunc(GL10.GL_LEQUAL);
        gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);

onDrawFrame 方法中:

        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();
        mObject1.draw(gl);
        mObject2.draw(gl);

和mObject1和mObject2的 draw 方法:

        gl.glPushMatrix();
        gl.glEnable(GL10.GL_TEXTURE_2D);

        gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);

        gl.glTranslatef((float) mPosition.getX(), (float) mPosition.getY(), 0f);

        float scaleFactor = (float) (2 * mRadius);
        gl.glScalef(scaleFactor, scaleFactor, 0);

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

        gl.glColor4f (1f, 1.0f, 1, 1f);

        gl.glFrontFace(GL10.GL_CW);

        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
        gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);

        gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length / 3);

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

        gl.glPopMatrix();

1 个答案:

答案 0 :(得分:2)

之后

gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glMatrixMode(GL10.GL_MODELVIEW);
    gl.glLoadIdentity();

gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);