JHHK

欢迎来到我的个人网站
行者常至 为者常成

20、GLSL灰度马赛克等滤镜

目录

灰度

一、shader.vsh

attribute vec4 Position;
attribute vec2 TextureCoords;
varying vec2 TextureCoordsVarying;

void main (void) {
    gl_Position = Position;
    TextureCoordsVarying = TextureCoords;
}

二、shader.fsh

precision highp float;
uniform sampler2D Texture;
varying vec2 TextureCoordsVarying;
const highp vec3 W = vec3(0.2125, 0.7154, 0.0721);//灰度计算向量

void main (void) {
    
    vec4 mask = texture2D(Texture, TextureCoordsVarying);//原始纹素
    
    
    float luminance = dot(mask.rgb, W);//点乘后得到灰度纹素
    
    
    gl_FragColor = vec4(vec3(luminance), 1.0);//内建向量赋值 透明度不变
}

颠倒

一、shader.vsh

attribute vec4 Position;
attribute vec2 TextureCoords;
varying vec2 TextureCoordsVarying;

void main (void) {
    gl_Position = Position;
    TextureCoordsVarying = TextureCoords;
}

二、shader.fsh

precision highp float;
uniform sampler2D Texture;
varying vec2 TextureCoordsVarying;

void main (void) {
    
    vec4 color = texture2D(Texture, vec2(TextureCoordsVarying.x, 1.0 - TextureCoordsVarying.y));
    
    gl_FragColor = color;
}

颠倒的处理方式有很多:

1、可以在创建纹理时,进行变换

2、可以在顶点着色器对纹理坐标进行变换

3、可以在片元着色器对纹理坐标进行变换

旋涡

一、shader.vsh

attribute vec4 Position;
attribute vec2 TextureCoords;
varying vec2 TextureCoordsVarying;

void main (void) {
    gl_Position = Position;
    TextureCoordsVarying = TextureCoords;
}

二、shader.fsh


行者常至,为者常成!





R
Valine - A simple comment system based on Leancloud.