我正在尝试编写一个opengl着色器,应用Vigenette Shader。但我面临的问题是,它显示了一个圆圈,你可以在正确的图像中看到。
我想知道我的代码到底出了什么问题。
我也粘贴了下面的代码。

我的Vigenette Shader的代码
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);}
提前谢谢你的帮助。
发布于 2016-12-30 10:28:35
有点猜测,因为没有足够的信息来确定,但我认为您的代码期望的结果是
float d = dot(tc, tc);在0到1之间,但实际上在0到2之间。
也许你想重放它,或者u_Vigenette纹理被设置为重复,而不是夹子到边缘。
https://stackoverflow.com/questions/41392522
复制相似问题