游戲已經做好,但是博客園不能支持哈,我在我的獨立博客里面加入了這個游戲。
加載時候會黑屏,等待數秒即可,點擊這里體驗試玩:FlappyBird3d游戲試玩
Three.js 使用矩陣 matrices進行3D變換---位置(position)平移, 旋轉rotations, 和縮放scaling. 每一個Object3D實例都存儲一個矩陣保存位置,旋轉和縮放信息.
這一頁描述了 如何更新對象的變換
方便的屬性和矩陣自動更新(Convenience properties and matrixAutoUpdate)
有兩種方法更新3d物體(object)矩陣的變換:
- 修改對象的位置position, 四元quaternion, 和 縮放scale 屬性, 讓Three.js 根據這些屬性的值重新計算對象的矩陣信息 :
object.position.copy(start_position);
object.quaternion.copy(quaternion);
默認的, matrixAutoUpdate 屬性設置為true, 會自動的重新計算矩陣. 如果對象是靜態的,或者你希望當再計算發生時可以手動控制,可以通過設置object.matrixAutoUpdate = false;來獲得更好的性能,改變這些屬性之后,手動更新矩陣matrix:object.updateMatrix(); - 直接修改對象的矩陣. 矩陣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.
(翻譯到這感覺這節沒什么大用,先到這吧~翻譯也要找有價值的!)
