🎮 控製(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):
步骤如下:
-
空间分(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)
-
-
构建(jian)二叉树结构:
-
每次划分(fēn)形成(cheng)左右两箇(ge)子(zi)空间
-
递归進(jin)行,直到(dao)每箇(ge)子(zi)空间只包含一(yi)箇(ge)物(wù)體(ti)爲(wei)止
-
最终形成(cheng)空间层次结构
-
-
绘製(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)景
