🎮 控製(zhi)方(fang)式(shi):WASD / ←↑→↓ 移動(dòng)/旋转,Q / E 上升/下降,空格键 回到(dao)初始位置


✅ 支持內(nei)容

该引擎适用(yong)于(yu)不相互接触的(de)静态矩形立方(fang)體(ti)(長(zhang)方(fang)體(ti))的(de)正确绘製(zhi)。适郃(he)构建(jian)静态3D地图、平檯(tai)结构等(deng)。


⚙️ 渲染機(jī)製(zhi)概述

1. 三維(wei)转换与视图变换

  • 先(xian)定义世界坐(zuò)标係(xi)与视图坐(zuò)标係(xi)

  • 使用(yong)旋转矩阵(rotation matrix)進(jin)行视图变换

  • 由三維(wei)坐(zuò)标转换爲(wei)二維(wei)坐(zuò)标(基于(yu)深度缩放实現(xian)透视)

    → 深度越大(da),位置越靠近屏幕中(zhong)心

2. 绘製(zhi)方(fang)式(shi)

  • 点渲染:若深度 ≤ 1 则忽略该点

  • 線(xiàn) / 面渲染:对深度小(xiǎo)于(yu)1的(de)部(bu)分(fēn)進(jin)行裁剪处理(li)(clipping)

  • 使用(yong) TriFiller 技(ji)術(shù)在(zai)变换后(hou)的(de)顶点间生(sheng)成(cheng)三角面,构成(cheng)立體(ti)表面

3. 性能(néng)優(you)化

  • 所有(yǒu)涉及(ji)三角函數(shu)的(de)旋转計(ji)算,在(zai)程(cheng)序初始化时预計(ji)算完成(cheng),避免运行时重(zhong)复計(ji)算,提高(gao)帧率


🌲 空间分(fēn)割与绘製(zhi)排(pai)序:k-d Tree 实現(xian)方(fang)式(shi)

爲(wei)了(le)实現(xian)正确的(de)绘製(zhi)顺序(避免遮挡错误),引擎使用(yong)了(le)一(yi)种BSP(Binary Space Partitioning)的(de)简化版本(ben) —— k-d 树(k-dimensional tree):

步骤如下:

  1. 空间分(fēn)割

    • 從(cong)所有(yǒu)物(wù)體(ti)中(zhong),选取一(yi)箇(ge)切分(fēn)平面

    • 评估每箇(ge)平面切分(fēn)其他(tā)物(wù)體(ti)的(de)代(dai)价(越少越好)

    • 從(cong)中(zhong)选择切割代(dai)价最小(xiǎo),且两边物(wù)體(ti)數(shu)量差(cha)值最小(xiǎo)的(de)平面進(jin)行划分(fēn)

  2. 构建(jian)二叉树结构

    • 每次划分(fēn)形成(cheng)左右两箇(ge)子(zi)空间

    • 递归進(jin)行,直到(dao)每箇(ge)子(zi)空间只包含一(yi)箇(ge)物(wù)體(ti)爲(wei)止

    • 最终形成(cheng)空间层次结构

  3. 绘製(zhi)时遍歷(li) k-d 树

    • 從(cong)相機(jī)(摄像機(jī))位置出髮(fa),判斷(duan)当前(qian)帧中(zhong)应先(xian)绘製(zhi)哪一(yi)侧

    • 若某一(yi)空间在(zai)视野外,仅绘製(zhi)靠近相機(jī)一(yi)侧,避免无效渲染


🚀 效果与優(you)勢(shi)

  • 实現(xian)了(le)精(jīng)准的(de)绘製(zhi)顺序高(gao)效的(de)空间筦(guan)理(li)

  • 无需克隆體(ti),完全通(tong)過(guo)绘图扩展(zhan)(pen extension)+ 數(shu)据结构模拟

  • 适郃(he)复杂结构的(de)静态3D場(chang)景