W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Three.js使用matrix編碼3D變換 —— 平移(位置),旋轉(zhuǎn)和縮放。 Object3D的每個實例都有一個matrix,用于存儲該對象的位置,旋轉(zhuǎn)和比例。本頁介紹如何更新對象的變換。
有兩種方法可以更新對象的轉(zhuǎn)換:
object.position.copy( start_position );
object.quaternion.copy( quaternion );
默認情況下,matrixAutoUpdate屬性設(shè)置為true,并且將自動重新計算矩陣。 如果對象是靜態(tài)的,或者您希望在重新計算時手動控制,則可以通過將屬性設(shè)置為false來獲得更好的性能:
object.matrixAutoUpdate = false;
更改任何屬性后,手動更新矩陣:
object.updateMatrix();
object.matrix.setRotationFromQuaternion( quaternion );
object.matrix.setPosition( start_position );
object.matrixAutoUpdate = false;
請注意,在這種情況下,matrixAutoUpdate 必須 設(shè)置為false,并且您應(yīng)該確保 不 調(diào)用updateMatrix。 調(diào)用updateMatrix將破壞對矩陣所做的手動更改,從position,scale重新計算矩陣,依此類推。
一個對象的matrix存儲了該對象 相對于 其Object3D.parent(父節(jié)點)的變換。要在 世界 坐標系中獲取對象的轉(zhuǎn)換,您必須訪問該對象的Object3D.matrixWorld。
當父對象或子對象的變換發(fā)生更改時,可以通過調(diào)用[page:Object3D.updateMatrixWorld updateMatrixWorld()]來請求更新子對象的matrixWorld。
Three.js提供了兩種表示3D旋轉(zhuǎn)的方式:Euler angles(歐拉角)和Quaternions(四元數(shù)),以及兩者之間的轉(zhuǎn)換方法。 歐拉角有稱為“萬向節(jié)鎖定”的問題,其中某些配置可能失去一定程度的自由度(防止物體繞一個軸旋轉(zhuǎn))。 因此,對象旋轉(zhuǎn) 始終 存儲在對象的quaternion中。
該庫的早期版本包含useQuaternion屬性,當設(shè)置為false時,將導致對象的matrix從歐拉角計算。這種做法已被棄用 - 作為代替,您應(yīng)該使用setRotationFromEuler方法,該方法將更新四元數(shù)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: