GLSL 效果示例
雷达扫描:旋转的光束扫亮目标再慢慢淡出
各目标按扇叶上次经过的角度衰减,单帧即可计算余辉。
在线示例
修改右侧代码,左侧预览会实时更新。
观察什么
各目标按扇叶上次经过的角度衰减,单帧即可计算余辉。
实现原理
以当前扫描角与目标角的模差计算距上次扫过的时间,因此静态目标的余辉不需要上一帧缓冲。
找到控制效果的代码
float ang=atan(p.y,p.x),r=length(p),sweep=u_time*(.3+u_parameter);float age=mod(sweep-ang+6.28318,6.28318);float grid=exp(-abs(fract(r*5.)-.5)*90.);c+=vec3(.05,.6,.25)*(exp(-age*2.)*.55+grid*.15)*step(r,.85);for(int i=0;i<6;i++){float fi=float(i);vec2 pt=(.25+.08*fi)*vec2(cos(fi*2.3),sin(fi*2.3));float a=atan(pt.y,pt.x);c+=vec3(.3,1.,.5)*exp(-length(p-pt)*160.)*exp(-mod(sweep-a+6.28318,6.28318)*1.4);}
动手修改
把两处余辉指数中的 *1.4 改为 *3.。扫描扇区和目标亮点会在光束扫过后更快淡去,目标位置仍保持固定。
调试与成本
循环计算六个目标位置,余辉来自角度差表示的时间,而非反馈缓冲。把 i<6 改为 i<3,只保留三个目标后,扫描网格本身仍不受目标数量影响。