Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android中我的Opengl Vignette着色器中的问题_Android_Opengl Es - Fatal编程技术网

Android中我的Opengl Vignette着色器中的问题

Android中我的Opengl Vignette着色器中的问题,android,opengl-es,Android,Opengl Es,我正在尝试编写一个应用Vigenette着色器的opengl着色器。但我面临的问题是,它显示了一个圆圈,如右图所示 我想知道我的代码到底出了什么问题 我也粘贴了下面的代码 我的Vigenette着色器的代码 precision mediump float; uniform sampler2D u_Texture; uniform sampler2D u_Vigenette; uniform sampler2D u_Map; varying vec2 v_TexCoordinate; vo

我正在尝试编写一个应用Vigenette着色器的opengl着色器。但我面临的问题是,它显示了一个圆圈,如右图所示

我想知道我的代码到底出了什么问题

我也粘贴了下面的代码

我的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);
}


提前感谢您的帮助。

有点猜测,因为没有足够的信息可以确定,但我认为您的代码期望

float d = dot(tc, tc);
在0到1之间,但实际上在0到2之间

也许您想要重新缩放它,或者可能u_Vigenette纹理设置为“重复”,而不是“钳制到边”