OpenGLES滤镜开发汇总 —— 特罗斯特效应

德罗斯特效应

德罗斯特效应是一种递归的视觉形式,是指一张图片的某个部分与整张图片相同,如此产生无限循环。

德罗斯特效应的OpenGLES实现

fragment shader 如下:

precision highp float;
uniform sampler2D inputTexture;
varying highp vec2 textureCoordinate;

uniform float repeat; // 画面重复的次数

void main() {
    vec2 uv = textureCoordinate;
    // 反向UV坐标
    vec2 invertedUV = 1.0 - uv;
    // 计算重复次数之后的uv值以及偏移值
    vec2 fiter = floor(uv * repeat * 2.0);
    vec2 riter = floor(invertedUV * repeat * 2.0);
    vec2 iter = min(fiter, riter);
    float minOffset = min(iter.x, iter.y);
    // 偏移值
    vec2 offset = (vec2(0.5, 0.5) / repeat) * minOffset;
    // 当前实际的偏移值
    vec2 currenOffset = 1.0 / (vec2(1.0, 1.0) - offset * 2.0);
    // 计算出当前的实际UV坐标
    vec2 currentUV = (uv - offset) * currenOffset;

    gl_FragColor = texture2D(inputTexture, fract(currentUV));
}

重复4次的德罗斯特效应的效果如下:


四重德罗斯特的效果
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容