说明:这是一个基于三角形的 3D 迷宫,带有镜面墙。
这不是真正的游戏,因为迷宫中没有目标或出口。
请不要在评论中宣传不相关的东西。
默认控件:
[WASD]/[箭头键] 移动
[M] 显示地图
不可配置:
[N] 生成新迷宫
[停止,然后按空格键] 使用更多反射进行渲染
[G] 显示球体剪辑测试/演示
[K] 显示对象(键)剪辑 + 镜像测试/演示(但它们不能绕 Y 轴旋转)
查看内部之前:
为了减少代码中的滞后,请在查看内部之前停止项目,并且仅使用滚轮滚动代码(水平滚动:Shift+滚轮)
工作原理:
渲染:
迷宫被分成三角形单元。
迷宫中的每个物体和墙壁都以某种方式绘制,以便可以将它们剪裁到两个给定的 X 坐标之间。
渲染器从玩家所在的单元格开始。然后,它首先递归绘制相邻单元格,剪裁到它们可以通过当前单元格看到的区域,然后再绘制当前单元格。
该项目实际上绘制了一个圆圈,而不是球体。这是因为虽然球体的透视投影具有椭圆形,但公式很复杂,并且存在边缘情况,例如球体的中心位于相机后面。
使用顶端与底端偏移 1 个像素的线绘制阴影。
迷宫生成器:
在迷宫中,首先将每面墙设置为“实心”,将每个单元格设置为“未完成”。然后将一个随机单元格设置为“完成”。之后,在有未完成的单元格时重复此操作:从随机未完成的单元格开始随机游走。当它到达一个完成的单元格时,随机游走中的所有单元格都设置为完成,随机游走穿过的每一面墙都设置为“非固体”。当所有单元格都处于“完成”状态时,选择 10 面随机墙并将其设置为“非固体”。