GLSL 效果示例
生命游戏:用纹理记录细胞的生灭
每个纹素是一个细胞,数八个邻居并执行 B3/S23。初始滑翔机种子固定重复,便于复现;边界夹紧而不循环。
在线示例
修改右侧代码,左侧预览会实时更新。
观察什么
以滑翔机作初始图案,可暂停和单步观察演化。
实现原理
每个纹素是一个细胞,数八个邻居并执行 B3/S23。初始滑翔机种子固定重复,便于复现;边界夹紧而不循环。
找到控制效果的代码
float alive=texture2D(u_cells,(floor(uv*80.)+.5)/u_resolution).r;c=mix(vec3(.02,.04,.1),vec3(.3,.95,.65),alive);
u_cells 执行八邻居规则,Fragment 放大状态纹理的一部分用于显示。把 Fragment 的 floor(uv*80.) 改为 floor(uv*160.),可显示同一细胞状态中更大范围的区域,而不是改变模拟规则。
动手修改
暂停后用单步查看重复的滑翔机种子如何逐代移动。在 u_cells 中把 neighbors==3. 改为 neighbors==4.,出生规则便会改变,原滑翔机也不再遵循康威规则下的运动方式。
调试与成本
每次更新读取当前细胞及八个邻居;mod(floor(gl_FragCoord.xy),32.) 让种子每 32 个纹素重复。把 32. 改为 16.,目标里会初始化更多滑翔机;显示仍只放大 floor(uv*80.) 选定的区域。