2013-08-27 6 views
1

Я пытаюсь смешивать альфа двух текстур. Сначала текстура это изображение, вторая текстура - прямоугольник с прозрачным круглым в центре. Мне нужно смешать эти две текстуры, чтобы в результате я получил свой фон с трансперентным раундом в центре. Для этого я пытаюсь использовать glBlendFunc, но мне удалось получить только весь прозрачный фон, другими словами, весь мой фон стал прозрачным. Как я могу смешать альфа текстур с помощью glBlendFunc?Смешивание альфа в opengl es 2.0

ответ

1

Одна из проблем заключается в том, что вы не можете использовать GLUtils.texImage2D() для загрузки альфа-текстур из растрового изображения на Android. Это распространенная проблема, которую Google действительно должен документировать лучше. Проблема заключается в том, что класс Bitmap преобразует все изображения в предварительно умноженный формат, но это не работает с OpenGL ES, если изображение полностью непрозрачно. Эта статья дает более подробную информацию по этому вопросу:

http://software.intel.com/en-us/articles/porting-opengl-games-to-android-on-intel-atom-processors-part-1

Чтобы использовать glBlendFunc(), вы должны включить его в первую очередь с glEnable (GL_BLEND), но самый быстрый способ смешать 2 текстуры вместе с OpenGL ES 2.0 сделать это в шейдере фрагмента. Вот простой пример:

uniform sampler2D sampler2d_0; 
uniform sampler2D sampler2d_1; 
varying mediump vec2 texCoord; 

void main() 
{ 
    vec3 vTexture0 = texture2D(sampler2d_0, texCoord); 
    vec3 vTexture1 = texture2D(sampler2d_1, texCoord); 
    vec3 vColor = mix(vTexture0, vTexture1, alpha); 

    gl_FragColor = vec4(vColor, 1.0); 
} 
Смежные вопросы