德羅斯特效應(yīng)
德羅斯特效應(yīng)是一種遞歸的視覺形式凫碌,是指一張圖片的某個(gè)部分與整張圖片相同,如此產(chǎn)生無限循環(huán)展辞。
德羅斯特效應(yīng)的OpenGLES實(shí)現(xiàn)
fragment shader 如下:
precision highp float;
uniform sampler2D inputTexture;
varying highp vec2 textureCoordinate;
uniform float repeat; // 畫面重復(fù)的次數(shù)
void main() {
vec2 uv = textureCoordinate;
// 反向UV坐標(biāo)
vec2 invertedUV = 1.0 - uv;
// 計(jì)算重復(fù)次數(shù)之后的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;
// 當(dāng)前實(shí)際的偏移值
vec2 currenOffset = 1.0 / (vec2(1.0, 1.0) - offset * 2.0);
// 計(jì)算出當(dāng)前的實(shí)際UV坐標(biāo)
vec2 currentUV = (uv - offset) * currenOffset;
gl_FragColor = texture2D(inputTexture, fract(currentUV));
}
重復(fù)4次的德羅斯特效應(yīng)的效果如下:
四重德羅斯特的效果