🎮 控制方式:
WASD
/←↑→↓
移动/旋转,Q
/E
上升/下降,空格键
回到初始位置
✅ 支持内容
该引擎适用于不相互接触的静态矩形立方体(长方体)的正确绘制。适合构建静态3D地图、平台结构等。
⚙️ 渲染机制概述
1. 三维转换与视图变换
-
先定义世界坐标系与视图坐标系
-
使用旋转矩阵(rotation matrix)进行视图变换
-
由三维坐标转换为二维坐标(基于深度缩放实现透视)
→ 深度越大,位置越靠近屏幕中心
2. 绘制方式
-
点渲染:若深度 ≤ 1 则忽略该点
-
线 / 面渲染:对深度小于1的部分进行裁剪处理(clipping)
-
使用 TriFiller 技术在变换后的顶点间生成三角面,构成立体表面
3. 性能优化
-
所有涉及三角函数的旋转计算,在程序初始化时预计算完成,避免运行时重复计算,提高帧率
🌲 空间分割与绘制排序:k-d Tree 实现方式
为了实现正确的绘制顺序(避免遮挡错误),引擎使用了一种BSP(Binary Space Partitioning)的简化版本 —— k-d 树(k-dimensional tree):
步骤如下:
-
空间分割:
-
从所有物体中,选取一个切分平面
-
评估每个平面切分其他物体的代价(越少越好)
-
从中选择切割代价最小,且两边物体数量差值最小的平面进行划分
-
-
构建二叉树结构:
-
每次划分形成左右两个子空间
-
递归进行,直到每个子空间只包含一个物体为止
-
最终形成空间层次结构
-
-
绘制时遍历 k-d 树:
-
从相机(摄像机)位置出发,判断当前帧中应先绘制哪一侧
-
若某一空间在视野外,仅绘制靠近相机一侧,避免无效渲染
-
🚀 效果与优势
-
实现了精准的绘制顺序与高效的空间管理
-
无需克隆体,完全通过绘图扩展(pen extension)+ 数据结构模拟
-
适合复杂结构的静态3D场景