
前面聊了定點數(shù),也說了它在 3D 空間里做向量運算有多痛苦。這一篇講另一條路——很多現(xiàn)代 3D 聯(lián)機游戲走的其實是這條:不換掉浮點,而是把浮點"管起來",讓它在所有平臺上表現(xiàn)一致。這條路分兩個層次,從輕到重:約束浮點(還是用硬件 FPU,但掐掉不確定的來源)和軟件浮點(干脆不用硬件 FPU,用軟件重新實現(xiàn)整套 IEEE-754)。我們一個個說。為什么 3D 不想用定點數(shù)先補上上一篇沒展開的痛點。定點數(shù)在 2D 網格、RTS 那種場景很舒服,但一進 3D 就開始難受:向量運算量程爆炸。一個叉乘、一個矩陣連乘,中間結果的量級可能跨好幾個數(shù)量級。定點數(shù)量程固定,你得手動盯著每一步的移位,稍不留神就溢出或者精度全丟。歸一化是家常便飯。3D 里到處是normalize、sqrt、點積、投影。定點數(shù)下這些全要自己實現(xiàn)、自己管精度,寫一個四元數(shù) slerp 能把人寫哭。物理和碰撞更復雜。膠囊體、射線、多次滑動迭代,全套定點化的工程量大到不現(xiàn)實。所以很多 3D FPS 的想法是:浮點用起來那么順手,我干嘛要換掉它?我只要讓它別亂就行。于是就有了約束浮點。第一層:約束浮點(Constrained Floa