Как отобразить цвет фона куба, а также цвета двух текстур в OpenGL

#java #android #opengl-es

Вопрос:

Я пытаюсь добавить две текстуры в 3d-куб. Я достиг своей цели, но по пути потерял цвет фона.

Я хочу показать исходный цвет изображений, а также цвет фона. Я использую микс, но он отображает фон полностью темным.

Вот как это выглядит мой фрагментшадеркод:

 private final String fragmentShaderCode =
        "precision mediump float;"  
                "uniform sampler2D u_Texture0;"  
                "uniform sampler2D u_Texture1;"  
                "uniform vec4 aColor;"  
                "varying vec2 v_TexCoordinate0;"  
                "varying vec2 v_TexCoordinate1;"  
                "void main() {"  
                "   vec4 base = texture2D(u_Texture0, v_TexCoordinate0);"  
                "   vec4 overlay = texture2D(u_Texture1, v_TexCoordinate1);"  
                "   mediump float ra = (overlay.a) * overlay.r   (1.0 - overlay.a) * base.r;"  
                "   mediump float ga = (overlay.a) * overlay.g   (1.0 - overlay.a) * base.g;"  
                "   mediump float ba = (overlay.a) * overlay.b   (1.0 - overlay.a) * base.b;"  
                "   gl_FragColor = vec4(mix(aColor.rgb, vec4(ra, ga, ba, 1.0).rgb , vec4(ra, ga, ba, 1.0).a), 1.0);"  
                "}";
 

Ответ №1:

Альфа — канал vec4(ra, ga, ba, 1.0) равен 1,0. Поэтому результат vec4(ra, ga, ba, 1.0).a всегда равен 1,0.

Вам нужно использовать альфа-каналы текстуры. например: max(base.a, overlay.a) :

 vec3 textureColor = vec3(ra, ga, ba);
float textureAlpha = max(base.a, overlay.a);
gl_FragColor = vec4(mix(aColor.rgb, textureColor, textureAlpha), 1.0); 
 

Упростите код, смешав цвета текстуры с mix функцией:

 void main() {
    vec4 base = texture2D(u_Texture0, v_TexCoordinate0);
    vec4 overlay = texture2D(u_Texture1, v_TexCoordinate1);
    vec3 textureColor = mix(base.rgb, overlay.rgb, overlay.a);
    float textureAlpha = max(base.a, overlay.a);
    gl_FragColor = vec4(mix(aColor.rgb, textureColor, textureAlpha), 1.0); 
}
 

Комментарии:

1. ух ты, спасибо! Это то, чего я хотел!!

2. @Bocho Спасибо тебе. Пожалуйста.