U3D 數學--Transform 分析

反編譯的U3D 的Transform 的源碼,研究了下里面的關於數學的一些藉口,

發現有兩個函數的實現有 性能問題。

如圖

當relativeTo=Space.Self 的時候,其實直接改成

this.localPosition += translation; 接可以了。

其實底層存的應該都是localPosition. 即使算出了worldposition最終底層還是需要轉換爲localPosition的,如果節點的層級關係很多,

這樣計算量就更大了。

測試1百萬次6個節點的情況,調用Translate函數需要391毫秒。直接this.localPosition += translation 消耗135毫秒



Rotate函數在relativeTo == Space.World的情況下也有性能問題。

參考源碼可以發現

     this.rotation *= (Quaternion.Inverse(this.rotation) * quaternion) * this.rotation;

等價於

this.rotation = quaternion * this.rotation;

 四元素是滿足結合律的。

測試1百萬次6個節點的情況,調用Translate函數需要718.1761毫秒。直接this.rotation = quaternion * this.rotation; 消耗421.4793毫秒



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章