繁体   English   中英

Android中我的Opengl Vignette Shader中的问题

[英]Issue in my Opengl Vignette Shader in Android

我正在尝试编写一个应用Vigenette Shader的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纹理设置为重复而不是钳制到边缘。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM