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