GLSL 效果示例

无限隧道:用空间重复排列一串发光拱门

相机向前移动,拱门连续经过视点,远端随距离淡出。

在线示例

修改右侧代码,左侧预览会实时更新。

观察什么

相机向前移动,拱门连续经过视点,远端随距离淡出。

实现原理

将 Z 坐标折回固定周期,在一个单元里定义拱门;相机平移让重复结构连续经过。

找到控制效果的代码

p.z=mod(p.z+1.,2.)-1.;vec2 q=abs(p.xy)-vec2(1.2,1.);return max(abs(length(vec2(max(q.x,0.),p.y))-1.)-.08,abs(p.z)-.07);

动手修改

把 ro 中的前进位移 u_time*.6 改成 u_time*1.2。重复拱门会以两倍速度经过相机,z 方向的间隔仍为两个单位。

调试与成本

重复折叠 mod(p.z+1.,2.)-1. 能定义无限单元,但射线仍在距离 12 或 80 步后停止。把拱门薄片半厚度 abs(p.z)-.07 改为 abs(p.z)-.12,每片会变厚,重复单元数量不变。

用到的内置函数

一步步学会这个效果