开发者

Android OpenGL ES Texturing - alphablending

开发者 https://www.devze.com 2023-02-04 17:43 出处:网络
I d like to \"kill\" the black color of my texture. Or, I want to show png files, without background (t开发者_StackOverflow中文版ransparent bg)

I d like to "kill" the black color of my texture. Or, I want to show png files, without background (t开发者_StackOverflow中文版ransparent bg)

How i can do this? Any example?


it's not that difficult. This are the main pieces:

public static Bitmap loadBitmapFromId(Context context, int bitmapId) {
        InputStream is = context.getResources().openRawResource(bitmapId);
        try {
            BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
            bitmapOptions.inPreferredConfig = Bitmap.Config.RGB_565;
            return BitmapFactory.decodeStream(is, null, bitmapOptions);
        } catch (Exception ex) {
            Log.e("bitmap loading exeption", ex.getLocalizedMessage());
            return null;
        }
    }

The Bitmap.Config.RGB_565 is important here. Then add the bitmap and get your texture id as usual.

Now in the onSurfaceCreated(GL10 gl, EGLConfig config) of your renderer add this:

    // Transparancy
    // important: transparent objects have to be drawn last!
    gl.glEnable(GL10.GL_BLEND);
    gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

And the drawing part (you are probably already doing this):

        // first disable color_array for save:
        gl.glDisableClientState(GL10.GL_COLOR_ARRAY);

        // Enabled the vertices buffer for writing and to be used during
        // rendering.
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        // Specifies the location and data format of an array of vertex
        // coordinates to use when rendering.
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);

        gl.glEnable(GL10.GL_TEXTURE_2D);

        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
                GL10.GL_LINEAR);
        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
                GL10.GL_LINEAR);

        gl.glBindTexture(GL10.GL_TEXTURE_2D, myTextureId);
        gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
        gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);

        gl.glDrawArrays(drawMode, 0, verticesCount);

        gl.glDisable(GL10.GL_TEXTURE_2D);
        // Disable the vertices buffer.
        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
0

精彩评论

暂无评论...
验证码 换一张
取 消