跳到主要内容
← Built-In functions

Built-In functions

材质镜像

我这结论是基本和chatgpt聊出来的

实时渲染 · 纹理 GLSL

第 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>