Android / OpenGLES альфа-текстуры не полупрозрачные, а бинарные прозрачные - PullRequest
5 голосов
/ 03 сентября 2010

Я рисую некоторые текстуры с альфа-каналом, но когда они отображаются, похоже, что альфа-канал является только двоичным.Таким образом, пиксель либо прозрачен, либо непрозрачен, хотя в самом файле текстуры пиксель полупрозрачен.Смешивание настроено так:

gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);

Есть ли обходной путь для этой проблемы?

Выше показано, как это должно быть, а ниже показано, как оно есть:

alt text

Ответы [ 4 ]

3 голосов
/ 20 сентября 2010

Попробуйте это:

gl.glEnable(GL10.GL_BLEND);    
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

gl.glEnable(GL10.GL_ALPHA_BITS);
//draw...
gl.glDisable(GL10.GL_ALPHA_BITS);
1 голос
/ 07 сентября 2010

Кажется, что он использует альфа-тестирование вместо альфа-смешивания, что объясняет поведение порога.Хотя он не включен по умолчанию, стоит попробовать:

gl.glDisable(GL10.GL_ALPHA_TEST);
0 голосов
/ 12 сентября 2010

Сохраняете ли вы PNG для текстуры GL, которая имеет только 1 бит альфа, например 16-битный формат 5-5-5-1?Это вызвало бы поведение выше.

0 голосов
/ 08 сентября 2010

Какой формат поверхности вы используете для GLSurfaceView?Это полупрозрачный (не прозрачный) формат?

surfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT);

Также в настройках EGL должна быть установлена ​​поддержка альфа.Это даст вам лучшее качество ...

surfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0);

Редактировать: Еще одна мысль: возможно, вы не загружали изображение в OpenGL в полупрозрачном формате с glTexImage2D?

...