glsl shader简明教程系列1 web
底层的东西我就不说了(本身去百度翻基础教程) 我直接说上层了(片断着色器)算法
web编辑器还在开发中 有了编辑器 到时候能够把代码复制上去能够看到效果了编辑器
1 实现图片变灰spa
void main () { // 这个变量c就是图片每一个像素的 颜色值 vec4 c = vec4(1,1,1,1) * texture2D(texture, uv0); //下面是变灰算法 只要明白这个算法能变灰就行 float clrbright = (c.r + c.g + c.b) * (1. / 3.); float gray = (0.6) * clrbright; //给图片每一个像素从新赋值颜色值 gl_FragColor = vec4(gray, gray, gray, c.a); }
2 图片变亮效果code
vec4 dim(vec4 col, float factor) { return vec4(col.r * factor, col.g * factor, col.b * factor, col.a); } void main () { // 这个变量c就是图片每一个像素的 颜色值 vec4 c = vec4(1,1,1,1) * texture2D(texture, uv0); // 提升亮度(dim第二个参数 设置1以上提升亮度 1如下下降亮度 这些都是颜色算法 不用深究明白有什么做用就行 vec4 blurred_image = dim(c,1.6); //给图片每一个像素从新赋值颜色值 gl_FragColor = vec4(blurred_image); }
3 图片变模糊blog
#define repeats 5. #define num 0.02 // 随机值 float rand(vec2 co){ return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); } // 应用贴图UV vec4 draw(vec2 uv) { return texture2D(texture,uv).rgba; } void main () { // 模糊贴图 vec4 blurred_image = vec4(0.); // 重复采样 for (float i = 0.; i < repeats; i++) { // 第一采样点 vec2 q = vec2(cos(degrees((i/repeats)*360.)),sin(degrees((i/repeats)*360.))) * (rand(vec2(i,uv0.x+uv0.y))+num); vec2 uv2 = uv0+(q*num); blurred_image += draw(uv2)/2.; // 第二采样点 q = vec2(cos(degrees((i/repeats)*360.)),sin(degrees((i/repeats)*360.))) * (rand(vec2(i+2.,uv0.x+uv0.y+24.))+num); uv2 = uv0+(q*num); blurred_image += draw(uv2)/2.; } // 中和 blurred_image /= repeats; // 导出颜色 gl_FragColor = vec4(blurred_image); }