ps 色相/饱和度,描边,外发光算法(opengl)
做游戏可能需要有些动态的改变图片效果要求,这些用ps做的很容易,但是耗资源,所以在这里列举几个常用的滤镜算法,效果算是一般,没ps的专业 ~~。
#ifdef GL_ES
precision mediump float;
#endif
uniform float Hue; //色相
uniform float Sat; //饱和度
uniform float Lig; //明度
uniform float Bri; //亮度
uniform float mode;
uniform vec2 TextureSize;
uniform vec2 resolution;
uniform vec3 GlowColor;//发光色
uniform float GlowRange;//发光范围
uniform float GlowExpand; //发光强度
uniform vec3 OutlineColor;//描边颜色
uniform float OutlineRange;//描边范围
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
1.色相/饱和度
if( Hue != 0.0 || Sat !=0.0 || Lig != 0.0 )
{
float Cmax, Cmin;
float D;
float H, S, L;
Cmax = max (R, max (G, B));
Cmin = min (R, min (G, B));
L = (Cmax + Cmin) /2.0;
if (Cmax == Cmin)
{
H =0.0;
S =0.0;
}
else
{
D = Cmax - Cmin;
if (L < 0.5)
{
S = D / (Cmax + Cmin);
}
else
{
S = D / (2.0 - (Cmax + Cmin));
}
if (R == Cmax)
{
H = (G - B) / D;
}
else
{
if (G == Cmax)
{
H =2.0 + (B - R) /D;
}
else
{
H =4.0 + (R - G) / D;
}
}
H = H /6.0;
}
// modify H/S/L values
H += Hue;
S += Sat;
L += Lig;
if (H < 0.0)
{
H = H +1.0;
}
H = clamp(H,0.0, 1.0);
S = clamp(S,0.0, 1.0);
L = clamp(L,0.0, 1.0);
// convert back to RGB
float var_2, var_1;
if (S == 0.0)
{
R = L;
G = L;
B = L;
}
else
{
if ( L < 0.5 )
{
var_2 = L * (1.0 + S );
}
else
{
var_2 = ( L + S ) - ( S * L );
}
var_1 =2.0 * L - var_2;
R = Hue_2_RGB( var_1, var_2, H + (1.0 / 3.0 ) );
G = Hue_2_RGB( var_1, var_2, H );
B = Hue_2_RGB( var_1, var_2, H - (1.0 / 3.0 ) );
}
}
if ( Bri != 0.0 )
{
if ( Bri > 0.0 )
{
R = R + (255.0 - R) /255.0 * Bri;
G = G + (255.0 - G) /255.0 * Bri;
B = B + (255.0 - B) /255.0 * Bri;
}
else
{
R = R + R /255.0 * Bri;
G = G + G /255.0 * Bri;
B = B + B /255.0 * Bri;
}
}
2.描边
float radius=0.005;
normal = texture2D(jjxx, vec2(jjv_texCoord.x, jjv_texCoord.y));
accum += texture2D(jjxx, vec2(jjv_texCoord.x - radius, jjv_texCoord.y - radius));
accum += texture2D(jjxx, vec2(jjv_texCoord.x + radius, jjv_texCoord.y - radius));
accum += texture2D(jjxx, vec2(jjv_texCoord.x + radius, jjv_texCoord.y + radius));
accum += texture2D(jjxx, vec2(jjv_texCoord.x - radius, jjv_texCoord.y + radius));
accum *=1.0;
accum.rgb = vec3(1,1,0) * accum.a;
//accum.a = 1;
normal = ( accum * (1.0 - normal.a)) + (normal * normal.a);
gl_FragColor =normal;
3.外发光
float samplerPre = 2.0;
float radiusX = 1.0 / TextureSize.x;
float radiusY = 1.0 / TextureSize.y;
float glowAlpha = 0.0;
float count = 0.0;
for( float i = -GlowRange ; i <= GlowRange ; i += samplerPre )
{
for( float j = -GlowRange ; j <= GlowRange ; j += samplerPre )
{
vec2 samplerTexCoord = vec2( v_texCoord.x + j * radiusX , v_texCoord.y + i * radiusY );
if( samplerTexCoord.x < 0.0 || samplerTexCoord.x > 1.0 || samplerTexCoord.y <0.0 || samplerTexCoord.y > 1.0 )
glowAlpha +=0.0;
else
glowAlpha += texture2D( CC_Texture0, samplerTexCoord ).a;
count +=1.0;
}
}
glowAlpha/= (count+500);
R = GlowColor.r;
G = GlowColor.g;
B = GlowColor.b;
A = glowAlpha *GlowExpand;
描边和外发光主要是滤波算法取附近的颜色算平均色,描边是在颜色alpha为0,也就是没有颜色的时候取附近的颜色,如果附近有颜色,那么就设置为描边色,可以根据alpha算颜色值。外发光,外观上表现为离颜色区域近的发光色多些,远的就慢慢淡了,所以可以根据附近的alpha总和取平均值计算透明度,这样运行的效果有发光的表现,但是与ps的发光效果相比还有一定差距,这个需要更好的完善发光算法吧。~
发光效果图:
色相效果图:
ps 色相/饱和度,描边,外发光算法(opengl)相关推荐
- 易语言 调节系统对比度api_一分钟完成色相饱和度!2019最新PS对比度色彩智能调节滤镜来袭...
大家好,又到了分享的时刻!上期呢给大家分享的PS插件相信大家都已经领取到了!本期了小编继续给大家分享!这次分享的是款堪称傻瓜式的 Photoshop(调节色相插件,因为操作简单不需要基础.它就是Top ...
- 在QT框架下进行仿照PS图像调整功能设计(亮度对比度,色相饱和度及明度)
原文链接:https://blog.csdn.net/maozefa/article/details/4778934 图像亮度调整分为非线性和线性两种方法. 非线性图像亮度是将图像像素的R.G.B分别 ...
- 用OpenCV实现Photoshop算法(七): 调整色相饱和度
系列文章: 用OpenCV实现Photoshop算法(一): 图像旋转 用OpenCV实现Photoshop算法(二): 图像剪切 用OpenCV实现Photoshop算法(三): 曲线调整 用Ope ...
- C++实现Photoshop色相/饱和度/明度功能
本文用C++实现Photoshop色相/饱和度/明度功能,界面程序使用BCB6:图片操作采用GDI+.代码也可适用于其它C/C++编译器(可能要稍作修改). 有关Photoshop饱和度调整原理可参见 ...
- Opencv-python 色相饱和度(HLS)
Opencv-python 色相饱和度(HLS) import cv2 as cv import numpy as np# 全局变量 g_hls_h = [] # 图片分量 hls g_hls_l = ...
- PHP HSV色相 饱和度 亮度 增强
PHP HSV色相 饱和度 亮度 增强 在开始之前我们先了解一下什么是HSV HSV 是颜色模型 色调H 用角度度量,取值范围为0°-360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°, ...
- html的hsl形式的颜色选择器,hsl() - 色相饱和度明度模式 - css3颜色
hsl() 版本:CSS3 hsl()函数符被定义为色相-饱和度-明度(Hue-saturation-lightness)模式.HSL 相比 RGB 的优点是更加直观:你可以估算你想要的颜色,然后微调 ...
- 修改图片颜色 色相 饱和度 亮度 ColorMatrix
Android开发中经常会遇到一些简单的图片处理,比如修改图片的颜色,饱和度,亮度等.今天就给大家介绍一下简单的图片处理. 基础知识 颜色的三要素 色调(色相/颜色):物体的颜色: 饱和度(彩度):色 ...
- 曲线快捷键,色阶快捷键,曝光度,自然饱和度,色相饱和度,色彩平衡
ctrl+m 曲线快捷键 ctrl+l 色阶快捷键 曝光度可以调整一下曝光度,减少灰蒙蒙的感觉 自然饱和度可以提亮一下颜色的亮度.自然饱和度中的饱和度对于已经饱和的颜色就不会再进行饱和.色相饱 ...
最新文章
- 简单介绍.Net性能测试框架Crank的使用方法
- windows下使用word2vec训练维基百科中文语料全攻略!(二)
- mysql出现error 2003_mysql启动时出现ERROR 2003 (HY000)问题的解决方法
- java画方块_[求助]用Swing就画一个方块代码出错了
- 用c语言编写linux守护进程
- php 开启 pathinfo,Nginx + php-fpm 开启 PATH_INFO 模式
- 大麦dw11sa不拆机刷机padavan+breed
- Bug系列路径规划算法原理介绍(三)——Tangent BUG算法
- 六度短网址服务平台原理
- sql server 2016不能全部用到CPU的逻辑核心数的问题
- 算符优先算法java实现,算符优先算法
- 360浏览器(QQ浏览器 等双核浏览器) 极速 IE 兼容 模式的 兼容问题处理:设置优先使用极速模式 渲染和加载
- python--测试使用不同的方式计算位涡平流项的差异
- 支持HEVC/H265 RTMP播放的VLC WINDOWS版本
- 调焦后焦实现不同距离成像_一次性学全佳能尼康的对焦模式、对焦区域模式等对焦知识!(上)...
- linux/windows下基于opc ua协议使用open62541开发客户端-上
- #9733;一名“标题党”自我修炼的10…
- 复数fft的时间复杂度,如何复数捕获阶段,振幅和频率的FFT的结果?
- 深入浅出leveldb之基础知识
- linux系统有哪些版本 linux系统哪个版本好用
热门文章
- Nexus+Docker私服+GitLab的一些记录
- 苹果高通诉讼之争 会成下个苹果VS爱立信吗?
- 亚马逊代开店入驻—亚马逊开店需要什么条件亚马逊站点入驻流程和注意事项
- 私人牙科诊所管理系统(含源码+论文+答辩PPT等)
- Pytorch源码学习之四:torchvision.models.squeezenet
- 新的刷脸支付方式掘起手机支付将会終结
- Int类型数据的序列化以及反序列化(与Java服务器通讯预热)
- 罗技K375s如何切换通道
- 【业务理解】数据指标
- mAPI软件发布升级版本v1.3.0(测试版)