Shader特效——实现“羽化”【GLSL】
来源:互联网 发布:乐天免税店有没有mac 编辑:程序博客网 时间:2024/04/29 22:55
原理参考自 小熊不去实验室 的博客
在PHOTOSHOP里,羽化就是使你选定范围的图边缘达到朦胧的效果。
羽化值越大,朦胧范围越宽,羽化值越小,朦胧范围越窄。可根据你想留下图的大小来调节。
算法分析:
1、通过对rgb值增加额外的V值实现朦胧效果
2、通过控制V值的大小实现范围控制。
3、V = 255 * 当前点Point距中点距离的平方s1 / (顶点距中点的距离平方 *mSize)s2;
4、s1 有根据 ratio 修正 dx dy值。
原图:
效果图:
片元着色器代码:
uniform sampler2D Tex;const float size = 0.5;void main(void){ vec2 realSize = vec2(textureSize(Tex, 0)); float ratio = (realSize.x > realSize.y) ? realSize.y/realSize.x : realSize.x/realSize.y; vec2 texSize = vec2(512., 512.); vec2 xy = gl_FragCoord.xy; if(realSize.x > realSize.y) { xy.x = xy.x * ratio; } else { xy.y = xy.y * ratio; } vec2 center = vec2(texSize/2.);// ---------------------------------------------------- float maxV = dot(center, center); float minV = floor(maxV*(1. - size)); float diff = maxV - minV; vec2 uv = xy / texSize; vec4 srcColor = texture2D(Tex, uv); float dx = center.x - xy.x; float dy = center.y - xy.y; float dstSq = pow(dx, 2.) + pow(dy, 2.); float v = (dstSq / diff); float r = clamp(srcColor.r + v, 0., 1.); float g = clamp(srcColor.g + v, 0., 1.); float b = clamp(srcColor.b + v, 0., 1.); gl_FragColor = vec4( r, g, b, 1.0 );}
1 0
- Shader特效——实现“羽化”【GLSL】
- Shader特效——实现“火苗”【GLSL】
- Shader特效——实现“闪电”【GLSL】
- Shader特效——“水彩画”的实现【GLSL】
- Shader特效——实现“抗锯齿(AntiAliasing)”【GLSL】
- Shader特效——实现“噪声”【基于ShaderToy】【GLSL】
- Shader特效——实现简单的“FishEye”【GLSL】
- Shader特效——“马赛克”的实现【GLSL】
- Shader特效——实现“HDR”效果【GLSL】
- Shader特效——实现“放大镜/缩小镜”【GLSL】
- Shader特效——“Kuwahara Filter”的实现 【OpenCV】【GLSL】
- Shader特效——“Bilateral Filter”的实现 【GLSL】
- Shader特效——“Barrel Blur”的实现 【GLSL】
- Shader特效——“Canny边缘检测”的实现 【GLSL】
- Shader特效——“Gamma校正”的实现 【GLSL】
- Shader特效——“径向模糊”的实现 【GLSL】
- Shader特效——“翻页”的实现 【GLSL】
- Shader特效——“Voronoi 图像”的实现 【GLSL】
- MAVEN项目打包文件不全
- javascript Function类型
- SQL Server相关资源(站点/工具)整理
- 在Windows上打造出自己的Linux开发环境
- 测试
- Shader特效——实现“羽化”【GLSL】
- 二分查找
- QToolButton的例子
- linux学习之路(一)
- Codeforces #367(Div.2)B Interesting drink【树状数组】
- 从PLC到PHP
- 聚焦里约奥运赛场,为你锁定每一刻精彩瞬间
- Oracle10g 安装步骤
- 漫步微积分十八——变化率问题