Добавьте текстуру радиального градиента к каждой белой части другой текстуры в шейдере

Недавно я прочитал статью о Sun Shader ( XNA Sun Shader) и решил реализовать его с помощью OpenGL ES 2.0, Но я столкнулся с проблемой, связанной с шейдером:

У меня есть две текстуры, одна из которых - текстура градиента огня: огненный градиент текстуры

И еще одна текстура, каждая белая часть которой должна быть окрашена первой текстурой: целевая текстура

Итак, я собираюсь получить результат, подобный приведенному ниже (не обращайте внимания на то, что результирующая текстура визуализируется на сфере сетки):

результат

Я очень надеюсь, что кто-нибудь знает, как реализовать этот шейдер.

1 ответ

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

uniform sampler2D Texture0; // original texture
uniform sampler2D Texture1; // gradient texture

varying vec2 texCoord;

void main(void)
{
    gl_FragColor = texture2D( Texture0, texCoord );

    // If the color in original texture is white
    // use the color in gradient texture.
    if (gl_FragColor == vec4(1.0, 1.0, 1.0,1.0)) {
        gl_FragColor = texture2D( Texture1, texCoord );
    }
}
Другие вопросы по тегам