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

2022-01-23 08:51:02 字數 1770 閱讀 6646

遊戲已經做好,但是不能支援哈,我在我的獨立部落格裡面加入了這個遊戲。

載入時候會黑屏,等待數秒即可,點選這裡體驗試玩:

three.js 使用矩陣matrices進行3d變換---位置(position)平移, 旋轉rotations, 和縮放scaling. 每乙個object3d例項都儲存乙個矩陣儲存位置,旋轉和縮放資訊.

這一頁描述了 如何更新物件的變換

有兩種方法更新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將會干擾手動設定的結果。(你懂得)

物件的矩陣儲存了物件的變換資訊,這些變化是相對於他的parent的(我理解為容器)。為了獲得物件在世界座標系下的變換,你必須獲得物件object3d.matrixworld.

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

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.

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

WebGL學習 變換 矩陣 動畫(五)

uniform vec4 u translation 定義u translation 平移相關資訊 void main 函式中倆者相加 gl position a position u translation 倆者相加 平移函式 function translation gl uniform mat...

WebGL 頂點資料矩陣變換

此處需要了解乙個矩陣函式庫cuon matrix.js這是 webgl程式設計指南 作者寫的乙個庫,它封裝了一些簡單易用的方法,來實現一些複雜繁瑣的矩陣計算操作 具體方法如下表 matrix4物件有兩種方法,一種是名稱中帶有set和一種不帶set的 使用上面的方法可以方便進行矩陣變換 如平移操作 v...

WebGL學習筆記3

webgl lesson 10 loading a world,and the most basic kind of camera 這個demo載入了乙個場景,並且能處理鍵盤事件。載入場景 xmlhttprequest http get request a callback function當載入場...