Прозрачная текстура в OpenGL ES для Android

Я пытаюсь установить прозрачность текстуры на квадранте в opengl, игра с функциями blend не помогла никому ничего не делать в google. Любые предложения?

Ответ 1

У меня была аналогичная проблема: один кусок кода работал правильно, а другой - нет. После большого количества протоколирования и отладки я обнаружил, что разница была в одной строке кода.

В коде, в котором была работающая альфа, я вызывал следующее перед установкой моего средства визуализации.

    setEGLConfigChooser(false)

Если это не помогает, вот пара других указателей...

Убедитесь, что вы включили смешение перед загрузкой текстуры.

Например:

    // Enable blending using premultiplied alpha.
    gl.glEnable(GL10.GL_BLEND);
    gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);

... и убедитесь, что битмап, который вы используете для создания текстуры, фактически имеет альфа-компонент.

Ответ 2

Мне удалось исправить мою проблему, используя другой метод. Я сначала установил

gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, /*GL10.GL_REPLACE*/ GL10.GL_MODULATE);

Затем удалось установить альфа текстуры, используя

gl.glColor4f

Ответ 3

После ответа Рона я подошел ближе к решению моей проблемы прозрачности текстуры, которая не отображается. Следующий вопрос, который у меня был, у меня был не-GL SurfaceView за моим GLSurfaceView и с помощью:

setEGLConfigChooser(false);

Я видел, что моя текстура в порядке, но весь SurfaceView был затемнен. Следующая исправленная проблема:

setEGLConfigChooser(8, 8, 8, 8, 0, 0);

Установка false в качестве единственного параметра - это один из способов отключения тестирования глубины, но вы можете сделать то же самое, установив от второго до последнего параметра значение 0. Первый создаст конфигурацию RGB_565 по умолчанию, тогда как мне понадобится конфигурация RGBA_8888, следовательно, это изменение.