3D數學 矩陣的更多知識(5)

2021-06-27 03:09:24 字數 2591 閱讀 7938

一般仿射變換

3x3矩陣僅能表達3d中的線性變換,不能包含平移。經過4x4矩陣的武裝後,現在我們可以構造包含平移在內的一般仿射變換矩陣了。例如:

(1)繞不通過原點的軸旋轉。

(2)沿不穿過原點的平面縮放。

(3)沿不穿過原點的平面鏡像。

(4)向不穿過原點的平面正交投影。

它們的基本思想是將變換的"中心點"平移到原點,接著進行線性變換,然後再將"中心點"平移回原來的位置。開始使用平移矩陣t將點p移到原點,接著用線性變換矩陣r進行線性變換,最終的仿射變換矩陣m等於矩陣的積,即:trt-1t-1是平移矩陣,執行和t相反的變換。

觀察這種矩陣的一般形式,它非常有趣。讓我們先用 "分塊"形式寫出前面用到的trt-1

可以看出,仿射變換中增加的平移部分僅僅改變了4x4矩陣的最後一行,並沒有影響到上面所包含的線性變換的3x3部分。

透視投影

學習透視投影最好的方法是將它和平行投影相比較。正交投影也稱作平行投影,因為投影線都是平行的(投影線是指從原空間中的點到投影點的連線)。正交投影中的平行線如圖9.3所示:

3d中的透視投影仍然是投影到2d平面上,但是投影線不再平行,實際上,它們相交於一點,該點稱作投影中心。如圖9.4所示:

因為投影中心在投影平面前面,投影線到達平面之前已經相交,所以投影平面上的影象是翻轉的。當物體遠離投影中心時,正交投影仍保持不變,但透視投影變小了。如圖9.5所示:

圖9.5中,右邊的茶壺離投影平面更遠,所以它的投影比離投影平面較近的那個茶壺小。這是一種非常重要的視覺現象,稱作透視縮略。

小孔成像

透視投影在圖形學中非常重要,因為它是人類視覺系統的模型。實際上,人類視覺系統遠比這複雜,因為我們有兩隻眼睛,而且對於每只眼睛,投影表面(視網膜)不是乙個平面。所以,讓我們來看乙個簡單些的例子----小孔成像。小孔成像系統就是乙個盒子,一側上有小孔,光線穿過小孔照射到另一側的背面,那裡就是投影平面。如圖9.6所示:

圖9.6中,盒子左面和右面是透明的,以使你能看見盒子內部。注意盒子內部的投影是倒著的,這是因為光線(投影線)已經在小孔處(投影中心)相交了。

讓我們探索小孔成像背後的幾何原理。設想乙個3d座標系,它的原點在投影中心,z軸垂直於投影平面,x和y軸平行於投影平面。如圖9.7所示:

讓我們看看能否計算出任意點p通過小孔投影到投影平面上的座標p'。首先,需要知道小孔到投影平面的距離,設為d。因此,投影平面為z=-d。現在,從另乙個角度來看問題,求出新的y。如圖9.8所示。

由相似三角形得到:

注意小孔成像顛倒了影象,pypy'的符號相反。px'的值可通過類似的方法求得:

所有投影點的z值都是相同的:-d。因此,點p通過原點向平面z=-d投影的結果如公式9.11所示:

在實際應用中,負號會帶來不必要的複雜性。所以將投影平面移到投影的前面(也就是說,平面z=d),如圖 9.9所示:

當然,這對於實際的小孔成像是不可能的。因為設定小孔的目的就是使光線只能通過小孔,但在計算機數學世界中,可以不理會這些規定。如你所願,將投影平面移到投影中心前面,煩人的負號消失了,如公式9.12所示:

使用4x4矩陣進行透視投影

從4d到3d的變換就意味著除法運算,因此我們可以利用4x4階矩陣來編寫**,以實現透視投影。基本思想是提出乙個關於p'的公式,其中的x、y、z有公分母,然後構造乙個4x4矩陣,使w與這個公分母相等。這裡我們假設初始點處有w=1。

先對3d形式表達的p'公式變形,可以得到:

將4d齊次向量變換到3d時,要用4d向量除以w,反推可知p'的4d形式為:

[x  y   z  z/d]

因此我們需要乙個4x4矩陣,它可接收乙個奇異的齊次向量。該向量的形式為[x, y, z, 1],然後將其變換為上述形式。這樣的矩陣如公式9.13所示:

這樣就得到了乙個4x4投影矩陣,有幾個需要注意的地方:

(1)乘以這個矩陣並沒有進行實際的透視投影變換,它只是計算出合適的分母。投影實際發生在從4d向3d變換時。

(2)存在多種變換。例如,將投影平面放在z=0處而投影中心在[0, 0, -d],這將導致乙個不同的公式。

(3)這裡看起來比較複雜,似乎只需要簡單地除以z,不必勞煩矩陣。那麼為什麼要使用齊次矩陣呢?第一,4x4矩陣提供了乙個方法將投影表達為變換,這樣就能和其他變換相連線;第二,使得投影到不平行於座標軸的平面變得可行。實際上,我們不需要齊次座標做任何運算,但4x4矩陣提供了一種簡潔的方法表達和操縱投影變換。

(4)實際的圖形幾何管道中的投影矩陣不像這裡匯出的那樣,還有許多重要的細節需要考慮。如用以上矩陣對向量進行變換後,z值實際上被捨棄了,而很多圖形系統的z緩衝用到了該值。

3D數學 矩陣的更多知識(3)

正交矩陣的運算法則 若方陣m是正交的,則當且僅當m與它轉置矩陣mt的乘積等於單位矩陣,見公式9.8 矩陣乘以它的逆等於單位矩陣 m m 1 i 所以,如果乙個矩陣是正交的,那麼它的轉置等於它的逆 這是一條非常有用的性質,因為在實際應用中經常需要計算矩陣的逆,而3d圖形計算中正交矩陣出現又是如此頻繁。...

3D數學 矩陣的更多知識(2)

矩陣的逆 另外一種重要的矩陣運算是矩陣的求逆,這個運算只能用於方陣。運算法則 方陣m的逆,記作m 1,也是乙個矩陣。當m與m 1相乘時,結果是單位矩陣。表示為公式9.6的形式 並非所有的矩陣都有逆。乙個明顯的例子是若矩陣的某一行或列上的元素都為0,用任何矩陣乘以該矩陣,結果都是乙個零矩陣。如果乙個矩...

3D數學 矩陣的更多知識(1)

矩陣的行列式 在任意方陣中都存在乙個標量,稱作該方陣的行列式。線性運算法則 方陣m的行列式記作 m 或 detm 非方陣矩陣的行列式是未定義的。n x n階矩陣的行列式定義非常複雜,讓我們先從2 x 2,3 x 3矩陣開始。公式9.1給出了2 x 2階矩陣行列式的定義 注意,在書寫行列式時,兩邊用豎...