WEBGL學習筆記(二):矩陣變換


游戲已經做好,但是博客園不能支持哈,我在我的獨立博客里面加入了這個游戲。

 

加載時候會黑屏,等待數秒即可,點擊這里體驗試玩:FlappyBird3d游戲試玩

 

 

Three.js 使用矩陣 matrices進行3D變換---位置(position)平移, 旋轉rotations, 和縮放scaling. 每一個Object3D實例都存儲一個矩陣保存位置,旋轉和縮放信息.

 

這一頁描述了 如何更新對象的變換

方便的屬性和矩陣自動更新(Convenience properties and matrixAutoUpdate)

 

 

 

有兩種方法更新3d物體(object)矩陣的變換:

  1. 修改對象的位置position, 四元quaternion, 和 縮放scale 屬性, 讓Three.js 根據這些屬性的值重新計算對象的矩陣信息 :
    object.position.copy(start_position);
    object.quaternion.copy(quaternion);

     

    默認的,  matrixAutoUpdate 屬性設置為true, 會自動的重新計算矩陣. 如果對象是靜態的,或者你希望當再計算發生時可以手動控制,可以通過設置object.matrixAutoUpdate = false;來獲得更好的性能,改變這些屬性之后,手動更新矩陣matrix: object.updateMatrix();
  2. 直接修改對象的矩陣. 矩陣4的類有很多種方法來修改矩陣,
    object.matrix.setRotationFromQuaternion(quaternion); 
    object.matrix.setPosition(start_position);
    object.matrixAutoUpdate = false;

     

    請注意這種情況下matrixAutoUpdate 必須設置為 false ,同時你也確保別去調用updateMatrix. 調用 updateMatrix 將會干擾手動設置的結果。(你懂得)

對象和世界矩陣(Object and world matrices)

 

 

 

對象的矩陣存儲了對象的變換信息,這些變化是相對於他的parent的(我理解為容器)。為了獲得對象在世界坐標系下的變換,你必須獲得對象Object3D.matrixWorld.

不管parent或者child的變換transformation如何改變, 你都能用過updateMatrixWorld()來更新child。

旋轉和四元(Rotation and Quaternion

 

 

 

Three.js提供了兩種方法進行3D 旋轉:歐拉角Euler angles和四元Quaternions, 同時兩者可以互相轉換.

歐拉角都受到了所謂的“萬向節鎖定”,其中某些配置可以失去一個自由度(防止被繞一個軸的對象)的問題。出於這個原因,對象旋轉總是存儲在對象的四元數。(谷歌翻譯的,實在是...下面是這句話原文)

Euler angles are subject to a problem called "gimbal lock," where certain configurations can lose a degree of freedom (preventing the object from being rotated about one axis). For this reason, object rotations are always stored in the object's quaternion.

(翻譯到這感覺這節沒什么大用,先到這吧~翻譯也要找有價值的!)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM