GLSL 效果示例

三角镶嵌:用正反三角形拼出连续色块

交替识别朝上和朝下的三角形,每个三角形独立着色。

在线示例

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

观察什么

交替识别朝上和朝下的三角形,每个三角形独立着色。

实现原理

将坐标变换到斜格基底,再以格内对角线区分上下三角形,编号决定色块。

找到控制效果的代码

vec2 q=vec2(p.x-p.y*.57735,p.y*1.1547)*5.;vec2 id=floor(q),f=fract(q);float side=step(1.,f.x+f.y);c=palette(hash(id+side*31.));float edge=min(min(f.x,f.y),abs(f.x+f.y-1.)*.707);c*=.7+.3*smoothstep(.01,.04,edge);

动手修改

把 vec2(p.x-p.y*.57735,p.y*1.1547)*5. 末尾的网格比例从 5. 改为 3.。三角形会变大,每格内的两个三角形仍各自使用不同哈希颜色。

调试与成本

step(1.,f.x+f.y) 判断格子对角线的哪一侧参与颜色编号。把 hash 中的 id+side*31. 换成 id,两三角形会同色,从而显露底层斜网格单元。

用到的内置函数

一步步学会这个效果