Android OpenGL ES 纹理 - alphablending

标签 android opengl-es

我想“杀死”纹理的黑色。或者,我想显示没有背景的 png 文件(透明背景)

我该怎么做? 有什么例子吗?

最佳答案

没那么难。这是主要部分:

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

Bitmap.Config.RGB_565 在这里很重要。然后像往常一样添加位图并获取纹理 ID。

现在在渲染器的 onSurfaceCreated(GL10 gl, EGLConfig config) 中添加:

    // 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);

以及绘图部分(您可能已经这样做了):

        // 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);

关于Android OpenGL ES 纹理 - alphablending,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4701842/

相关文章:

android - ListView 中的 "Separators"

java - y 轴 2D 上的 OpenGL Android 转换对象

iphone - 白色背景的 GLPaint

android - EditText 斜体样式剪切第一个字母

android - 新的应用程序包是否会取代 abi split?

java - 您如何确定默认的 Messenger 应用程序是否在 Android 上打开?

ios - CVOpenGLESTexture - 值得吗

android - 对在 android 中被杀死的应用程序的操作

ios - 在 Unity 项目中使用 OpenGL ES 在 iOS 上进行纹理渲染

iphone - 如何在 iOS 中以编程方式截取屏幕截图?