Android OpenGL ES Текстурирование - Alphablending - PullRequest
1 голос
/ 15 января 2011

Я бы хотел "убить" черный цвет моей текстуры. Или я хочу показать png файлы без фона (прозрачный bg)

Как я могу это сделать? Любой пример?

1 Ответ

3 голосов
/ 15 января 2011

это не так сложно. Это основные произведения:

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. Затем добавьте растровое изображение и получите свой идентификатор текстуры как обычно.

Теперь в 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...