美文网首页
OpenGLES滤镜开发汇总 —— 特罗斯特效应

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

作者: cain_huang | 来源:发表于2018-09-10 16:05 被阅读216次

德罗斯特效应

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

德罗斯特效应的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次的德罗斯特效应的效果如下:


四重德罗斯特的效果

相关文章

网友评论

      本文标题:OpenGLES滤镜开发汇总 —— 特罗斯特效应

      本文链接:https://www.haomeiwen.com/subject/zlmsgftx.html