[轉]圖形學原理 矩陣變換

空間中的某個點(x,y,z)的任何移動,旋轉,縮放的變換,都是用這個點乘以某個一個矩陣而得到。那麼模型是由一個個(x,y,z)的點組成,模型整個要變換,就是讓每個點乘以某個矩陣。
這是三維引擎開發,和引擎代碼閱讀的必備的基礎常識。
由於(x,y,z)乘以3*3矩陣可以達到旋轉和縮放的目的,但是無法表示移動,所以爲了統一,我們通常是採用乘以一個4行4列的矩陣。也就是說所有變換方法,都是用如下公式:
變換後點的(x’,y’,z’)=原來的(x,y,z) 乘以 4*4矩陣M
如果使用pv3d的數學類,寫法如下:

var 點:number3D=new Number3D(x的值,y的值,z的值); //原來的點
var 數組:Array=[n11,n12,n13, 0,
                  n21,n22,n23, 0,
                  n31,n32,n33, 0,
                  nx , ny, nz, 1]; //構造矩陣內每個值,需要一個數組,我們通常都是以這種格式書寫
var 矩陣: Matrix3D=new Matrix3D(數組); //構造矩陣
Matrix3D.multiplyVector4x4(矩陣,點); //點的x,y,z數據直接就更新爲相乘後的數據了。

那麼具體是用哪個矩陣M呢?下面我們就列出來:

旋轉
旋轉在三維裏應該是最麻煩的東西,因爲人類對旋轉的描述是很有限。光靠矩陣控制旋轉很多情況是非常複雜和不形象的,所以我們還發明瞭優拉角和四元數這些對旋轉的控制更優良的辦法,這些我們以後會講到。

角度θ表示的是延某軸旋轉的角度。
下面三個矩陣分別表示了點繞x軸,y軸,z軸的旋轉矩陣。

移動
從公式我們很容易能看出,第4行1,2,3列的數,分別控制着點在x,y,z方向上的移動。

縮放
從公式我們很容易能看出,對角線上的n11,n22,n33,分別控制着點在x,y,z方向上的縮放。

這些就是最簡單的變換矩陣,熟悉了這些,我們就又向前邁進了一步。
圖形學應該是一個很有趣的東西,並非像很多學校和學生教授的的那種痛苦不堪的東西。其實道理非常簡單,如果自己再具備一點編程知識,很容易就能做出自己的成像程序。

發佈了172 篇原創文章 · 獲贊 4 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章