Я пытаюсь установить прозрачность текстуры на квадранте в opengl, игра с функциями blend не помогла никому ничего не делать в google. Любые предложения?
Прозрачная текстура в OpenGL ES для Android
Ответ 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, следовательно, это изменение.