第 37 课:材质镜像
实现:我这结论是基本和chatgpt聊出来的
实现
uniform vec2 iResolution;
uniform sampler2D iChannel0;
void main() {
vec2 uv = gl_FragCoord.xy / iResolution.xy * 4.0;
uv *= vec2(iResolution.x / iResolution.y, 1.0);
vec2 modedUV = abs(mod(uv+1.0,2.0)-1.0);
//使 `uv` 落入 `[0, 2]` 的 tile 块中,形成 tile 重复。
//`- 1.0`, 把 `[0, 2]` 平移成 `[-1, 1]`,让 tile 中点在 0。
gl_FragColor = texture(iChannel0, modedUV);
}
复盘笔记
- 我这结论是基本和chatgpt聊出来的
- 它喜欢用mod代替fract, fract是mod(x, 1.0)
abs(...)- → 把每个 tile 变成
[1 → 0 → 1],形成镜像(ping-pong)。 - 这里很牛的地方来自
tx = mix(tx, 1.0 - tx, step(1.0, mod(uv.x, 2.0))); mod(uv.x, 2.0)制造[0,2)- 然后step不断地判断0-1, 1-2,
- 前半段跳0,后半段跳1;
- 然后再mix里面,前半段给正常图像,否则跳镜像。
<2025/05/19>