这是一个基于三角形单元构建的3D迷宫,墙壁为镜面反射效果。
这并不是真正意义上的游戏,因为迷宫中没有目标或出口。
默认操作:
-
[WASD]/[方向键] 移动
-
[M] 显示地图
不可配置按键:
-
[N] 生成新迷宫
-
[空格] 开启更多反射效果(Turbo模式渲染更快)
-
[G] 显示球体裁剪测试/演示
-
[K] 显示物体(钥匙)裁剪和镜面测试(物体不能绕Y轴旋转)
使用建议:
为了减少运行时卡顿,进入迷宫内部观察前,请先停止项目,使用滚轮仅水平浏览代码(水平滚动:Shift+滚轮)。
舞台中有一些变量可以自行调整和实验。
渲染原理简述:
迷宫由三角形单元组成。
每个迷宫中的物体和墙壁,都以可裁剪的方式绘制在两个X坐标之间。
渲染器先从玩家所在单元开始,递归绘制邻近单元(仅显示当前单元可视范围内),最后绘制当前单元本身。
项目中并非绘制球体,而是绘制圆形。
这是因为球体的透视投影为椭圆,计算较复杂,且存在球心位于相机后方等特殊情况。
阴影通过顶端偏移1像素的线条绘制实现。
迷宫生成算法简介:
起初所有墙壁设为“实心”,所有单元设为“未完成”。
随机选取一个单元设为“完成”。
然后重复以下操作直到所有单元都完成:
从随机一个“未完成”单元开始随机游走,直到遇到一个“完成”单元。
游走路径中的所有单元设为“完成”,路径经过的墙壁设为“非实心”。
完成后,随机选10堵墙设为“非实心”。
其他说明:
该项目灵感来源于现实中的镜面迷宫。
迷宫生成算法参考自维基百科(Wilson算法)。