首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我在Android中的Opengl微缩着色器中的问题

我在Android中的Opengl微缩着色器中的问题
EN

Stack Overflow用户
提问于 2016-12-30 07:39:15
回答 1查看 71关注 0票数 0

我正在尝试编写一个opengl着色器,应用Vigenette Shader。但我面临的问题是,它显示了一个圆圈,你可以在正确的图像中看到。

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

我也粘贴了下面的代码。

我的Vigenette Shader的代码

代码语言:javascript
复制
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);

}

提前谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2016-12-30 10:28:35

有点猜测,因为没有足够的信息来确定,但我认为您的代码期望的结果是

代码语言:javascript
复制
float d = dot(tc, tc);

在0到1之间,但实际上在0到2之间。

也许你想重放它,或者u_Vigenette纹理被设置为重复,而不是夹子到边缘。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41392522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档