Выпуск в моем Opengl Vignette Shader в Android

Я пытаюсь написать шейдер opengl, который применяет шейдер Vigenette. Но проблема, с которой я сталкиваюсь, заключается в том, что он показывает круг, как вы можете видеть на правильном изображении.

Я хочу выяснить, что именно, должно быть, пошло не так в моем коде.

Я также вставил код ниже тоже.

Введите описание изображения здесь

Код Для Шейдера My Vigenette

precision mediump float;
uniform sampler2D u_Texture;
uniform sampler2D u_Vigenette;
uniform sampler2D u_Map;

varying vec2 v_TexCoordinate;


void main()
{
 vec3 texel = texture2D(u_Texture, v_TexCoordinate).rgb;
 texel.r = (texel.r == 1.0)?.9961:texel.r;
 texel.g = (texel.g == 1.0)?.9961:texel.g;
 texel.b = (texel.b == 1.0)?.9961:texel.b;

 texel = vec3(
                   texture2D(u_Map, vec2(texel.r, .16666)).r,
                   texture2D(u_Map, vec2(texel.g, .5)).g,
                   texture2D(u_Map, vec2(texel.b, .83333)).b);

 texel.r = (texel.r == 1.0)?.9961:texel.r;
 texel.g = (texel.g == 1.0)?.9961:texel.g;
 texel.b = (texel.b == 1.0)?.9961:texel.b;

 vec2 tc = (2.0 * v_TexCoordinate) - 1.0;
 float d = dot(tc, tc);
 vec2 lookup = vec2(d, texel.r);
 texel.r = texture2D(u_Vigenette, lookup).r;
 lookup.y = texel.g;
 texel.g = texture2D(u_Vigenette, lookup).g;
 lookup.y = texel.b;
 texel.b    = texture2D(u_Vigenette, lookup).b;

 gl_FragColor = vec4(texel, 1.0);

}

Заранее спасибо за помощь.

1 ответ

  1. Немного угадать, потому что нет достаточно информации, чтобы быть уверенным, но я думаю, что ваш код ожидает результат

    float d = dot(tc, tc);
    

    быть в диапазоне от 0 до 1, но на самом деле в диапазоне от 0 до 2.

    Возможно, вы хотите масштабировать его, или, возможно, текстура u_Vigenette настроена на повторение вместо зажима к краю.