3

圖形學系列-Ch6 Transformation Matrices-閲讀筆記

 2 years ago
source link: https://blog.matrixs.site/post/2020-08-21-%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9B%BE%E5%BD%A2%E5%AD%A6-%E7%AC%AC%E5%85%AD%E7%AB%A0%E9%98%85%E8%AF%BB%E7%AC%94%E8%AE%B0/%E5%9C%96%E5%BD%A2%E5%AD%B8%E7%B3%BB%E5%88%97-ch6-transformation-matrices-%E9%96%B2%E8%AE%80%E7%AD%86%E8%A8%98.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

6.1 2D-綫性變換

6.1.1 Scaling

scale(sx,sy)=[sx,00,sy]

6.1.2 Shearing

shearx(s)=[1,s0,1]=[1,tan⁡ϕ0,1] sheary(s)=[1,0s,1]=[1,0tan⁡ϕ,1]

6.1.3 Rotation

ϕ逆時針爲正,順時針為負。 rotate(ϕ)=[cos⁡ϕ,−sin⁡ϕsin⁡ϕ,cos⁡ϕ] 旋转矩阵有一个很好的特性 RT=[cos⁡ϕ,sin⁡ϕ−sin⁡ϕ,cos⁡ϕ]=R−1

6.1.4 Reflection

reflect-x=[1,00,−1] reflect-y=[−1,00,1]

6.1.5 變換的組合

例如有scale變換S和旋轉變換R,那麽可以將這兩種變換組合成一個變換矩陣M作用於目標上,M=RS。這種組合對順序有嚴格要求,變換從右到左先後進行,换句话说就是,矩阵乘法不满足交换律。

figure6.10.png

从旋转和缩放两个变换理论上可构造出任意的线性变换,这对于之后的变换拆解有一定指导意义。

6.1.6 變換的拆解

Symmetric Eigenvalue Decomposition

任意对称矩阵A,都能使用特徵值分解成如下形式: A=RSRT 其中,R是單位正交矩陣,由矩陣A的特徵向量構成,S是特徵值構成的對角矩陣。再假設矩陣R的列向量為v1、v2,矩陣A特徵值為λ1、λ2。

從幾何角度分析等式A=RSRT:

  1. 旋轉v1和v2至x軸和y軸(RT);
  2. 按(λ1,λ2)縮放x和y(S);
  3. 旋轉x軸和y軸囘原來的位置(R)
figure6.13.png

從以上分析可以看出,對於對稱矩陣,幾何上其實只是做了縮放操作,而這個縮放操作可以是非軸向且不均匀的。

figure6.14.png

再從旋轉和縮放組合後的矩陣驗證:

RSRT=[cos⁡ϕ,−sin⁡ϕsin⁡ϕ,cos⁡ϕ][λ1,00,λ2][cos⁡ϕ,sin⁡ϕ−sin⁡ϕ,cos⁡ϕ]=[λ1cos2⁡ϕ+λ2sin2⁡ϕ,(λ2−λ1)cos⁡ϕsin⁡ϕ(λ2−λ1)cos⁡ϕsin⁡ϕ,λ2cos2⁡ϕ+λ1sin2⁡ϕ]

Singular Value Decomposition

對於非對稱矩陣,SVD分解同樣也能獲得相應的效果 A=USVT 其中,相較於特徵值分解中單個旋轉矩陣R,這裏使用矩陣U和矩陣V,矩陣U由左奇異向量ui構成,矩陣V由右奇異向量vi構成,而對角矩陣S是由奇異值構成。

從幾何角度分析奇異值分解A=USVT:

  1. 旋轉v1和v2至x軸和y軸(VT);
  2. 按(σ1,σ2)縮放x和y(S);
  3. 旋轉x軸和y軸至u1和u2(U)

奇異值分解與特徵值分解的區別除了兩個不同的正交矩陣和單個旋轉矩陣外,還有另外一個區別。由於奇異值分解后有不同的奇異值向量,我們可以通過翻轉符號來保持奇異值非負,同時需要翻轉奇異值向量的方向來保證結果不變,這樣就導致矩陣U和矩陣V不再是單純的旋轉矩陣,它們還包含了reflection操作。雖然看起來在使用過程中不太方便,但是通過矩陣的行列式的值就能判斷是旋轉(+1)還是鏡像(−1)。

Paeth Decomposition of Rotations

旋轉矩陣可分解爲一系列斜切操作:

[cos⁡ϕ,−sin⁡ϕsin⁡ϕ,cos⁡ϕ]=[1,cos⁡ϕ−1sin⁡ϕ0,1][1,0sin⁡ϕ,1][1,cos⁡ϕ−1sin⁡ϕ0,1]
figure6.16.png

6.2 3D-綫性變換

類似2D的綫性變換,其中旋轉操作因爲多了兩個自由度,所以略有不同: scale(sx,sy,sz)=[sx000sy000sz]rotate-z(α)=[cos⁡α−sin⁡α0sin⁡αcos⁡α0001]rotate-x(β)=[1000cos⁡β−sin⁡β0sin⁡βcos⁡β]rotate-y(γ)=[cos⁡γ0sin⁡γ010−sin⁡γ0cos⁡γ]shear-x(dy,dz)=[1dydz010001]shear-y(dx,dz)=[100dx1dz001]shear-z(dx,dy)=[100010dxdy1]

與2D綫性變換類型,3D綫性變換也能通過矩陣乘法將多種變換組合成一個矩陣,同樣也能通過SVD變換將變換矩陣分解成任意旋轉和縮放;3D旋轉也同樣能分解成3D錯切變換的組合。

6.2.1 任意3D旋轉

通過上面三個軸的旋轉矩陣可以發現,3D旋轉矩陣是正交陣,現假設笛卡爾坐標系下,三軸為x、y和z ,可以通過一個旋轉矩陣Ruvw獲得新的基坐標軸u, v和w,這三個基坐標軸滿足:

u=xux+yuy+zuzv=xvx+yvy+zvzw=xwx+ywy+zwzu⋅u=v⋅v=w⋅w=1u⋅v=v⋅w=w⋅u=0

這個旋轉矩陣Ruvw就可用如下方式表示:

Ruvw=[xuyuzuxvyvzvxwywzw]

很容易驗證得出:

Ruvwu=[u⋅uu⋅vu⋅w]=[100]=x

同理可得:

Ruvwv=yRuvww=z

由於Ruvw是正交矩陣,那麽RT=R−1,這就説明:

RuvwTx=uRuvwTy=vRuvwTz=w

舉例:假設需要將物體繞坐標系xyz下的任一向量a旋轉ϕ度,該旋轉矩陣如何求? 解答:先令w=a,再通過單向量構建基向量的方式構建出u和v,然後先將物體旋轉至基向量uvw的坐標系下,再用繞z軸的旋轉矩陣進行變換,最後變換囘原坐標係xyz下即可,變換矩陣為:

[xuxvxwyuyvywzuzvzw][cos⁡ϕ−sin⁡ϕ0sin⁡ϕcos⁡ϕ0001][xuyuzuxvyvzvxwywzw]

**這個例子説明在空間中繞旋轉任意軸旋轉,可以先構造新的坐標系,將現有坐標系變換到新坐標系后,再做旋轉,最後變換囘原坐標系。**

6.2.2 Transforming Normal Vectors

對於3維向量,可以表示位置、偏移量、方向等,同樣也可以用於表示物體表面的法向量。表面法向量垂直于該位置表面的切平面。而在對3維表面進行變換時,表面法向量若使用相同的變換矩陣往往會得到與其定義不一樣的結果,即變換後的法向量不垂直與切平面。如下圖:

figure6.17.png 為解決該問題,需要重新推到一個變換矩陣N,使其作用於法向量n后,法向量n依然垂直於切平面。假設物體變換矩陣為M,切向量為t,變換後的切向量為tM=Mt,法向量為nN=Nn。現要滿足一下等式:
nNTtM=0

先從原始等式nTt=0出發,令I=M−1M:

nTt=nTIt=nTM−1Mt=0⇒(nTM−1)(Mt)=(nTM−1)tM=0

這樣可得到:

nNT=nTM−1⇒nN=(nTM−1)T=(M−1)Tn

這樣就可以得到我們需要的N=(M−1)T。 還可以進一步簡化,由於對於法向量,我們只使用其方向,而不關心其長度,所以在計算N時可以忽略矩陣逆變換的行列式計算,這樣就能得到N的值爲:

ch6-6.2.2_N.png

6.3 平移和仿射變換

前面介紹的利用矩陣對物體進行變換,只能實現縮放和旋轉操作,無法實現平移。若要實現平移,需要在之後添加平移向量。

[x′y′]=[m00m01m10m11][xy]+[xtyt]

這樣表示顯然不夠優雅,我們希望用一個矩陣就能同時實現綫性變換和平移變換。爲達到這個目的,齊次坐標表示就顯得非常有用。將二維空間中的點用三維向量表示,就可實現:

[x′y′1]=[m00m01xtm10m11yt001][xy1]

之後就將這種合并了綫性變換和平移變換的矩陣統稱為仿射變換矩陣(Affine Transformation)。 齊次坐標表示有兩種:[xy1]和[xy0],前者表示點的位置,後者表示方向或位移。 同樣,利用矩陣乘法,也能將平移變換和綫性變換組合成一個矩陣形式,而單純的平移變換矩陣如下:

translate(xt,yt,zt)=[100xt010yt001zt0001]

例如,對下圖窗口進行一系列變換:

figure6.18.png
window=translate(xl′,yl′)scale(xh′−xl′xh−xl,yh′−yl′yh−yl)translate(−xl,−yl)=[10xl′01yl′001][xh′−xl′xh−xl000yh′−yl′yh−yl0001][10−xl01−yl001]=[xh′−xl′xh−xl0xl′xh−xh′xlxh−xl0yh′−yl′yh−ylyl′yh−yh′ylyh−yl001]

6.4 變換矩陣的逆

從幾何角度看:

scale(sx,sy,sz)−1=scale(1/sx,1/sy,1/sz)rotate(ϕ)−1=rotate(−ϕ)translate(xt,yt,zt)−1=translate(−xt,−yt,−zt)

而對於一系列變換組合

M=M1M2⋯Mn
其逆變換為
M−1=Mn−1⋯M2−1M1−1

同樣也能使用SVD分解來求逆變換,例如,已知變換M:

M=R1scale(σ1,σ2,σ3)R3

利用SVD分解特性和逆變換規則可得:

M−1=R2Tscale(1/σ1,1/σ2,1/σ3)R1T

6.5 坐標系變換

之前所説的變換,坐標系都是固定的,變換都是作用於物體上;本節是固定物體,通過變換坐標系來獲得相同的結果。如下圖,清晰的展示了兩種方法的區別:

figure6.19.png 幾何中,定義坐標系需要定義原點p和基向量{u,v,w},該坐標系上所有的點(u,v,w)都能用以下方式表示:

p+uu+vv+ww

通常三個基向量會選取正交向量。2D情況類似。下面就在2D下舉例説明:

figure6.20.png 如圖所示,點p在xoy坐標系下表示爲:

p=(xp,yp)≡o+xpx+ypy

在坐標系uev下,表示為:

p=(up,vp)≡e+upu+vpv

我們可以通過以下變換,將點p坐標在兩個坐標系閒切換:

[xpyp1]=[10xe01ye001][xuxv0001][upvp1]=[xuxvxeyuyvye001][upvp1]⇒Pxy=[uve001]Puv

上面這種坐標系閒變換的矩陣稱爲frame-to-canonical矩陣。

frame-to-canonical解釋如下:It takes points expressed in the (u, v) frame and converts them to the same points expressed in the canonical frame.

同樣,其逆變換如下:

[upvp1]=[xuxv0yuyv0001][10−xe01−ye001][xpyp1]⇒Puv=[uve001]−1Pxy

這種逆變換稱爲canonical-to-frame矩陣。 canonical-to-frame解釋如下:It takes points expressed in the canonical frame and converts them to the same points expressed in the (u,v) frame.

因爲所有坐標系都是平等的,所以,上面的逆變換也可以寫成:

Puv=[xuvyuvouv001]Pxy

ch6-frequently_asked_questions.png

該文檔是本人閲讀書籍《Fundamentals of Computer Graphics, Fourth_Edition》和學習課程《Games-101:现代计算机图形学入门》時整理的閲讀筆記,文檔中所有圖片來自本書截圖和Games-101課件截圖。若發現錯誤,歡迎討論指正:[email protected]


Recommend

  • 6
    • blog.matrixs.site 2 years ago
    • Cache

    圖形學系列 Ch14-Sampling-閲讀筆記

    本章又是數學的内容,主要介紹采樣相關的方法與數學工具——蒙特卡洛積分、Metropolis方法等。這些技術在全局光照和路徑追蹤等方面得到有效利用。本章二十幾頁的内容其實并沒有説清楚很多事,所以需要自行查找或補充一些知識才能搞懂。比如,Measure(測度...

  • 7

    何爲紋理?在圖形學中,定義物體表面空間變化屬性,即隨著空間位置變換,物體表面呈現出不同屬性,但這種屬性并未真的改變整個物體表面形狀,我們將這種變換的屬性稱爲物體表面紋理。 圖形學中,爲了在物體表面獲得紋理效果,會使用紋理映射(tex...

  • 2

    在第四章的4.5節已經簡單介紹過兩個shading模型,Lambertian Shading和Blinn-Phong Shading,以及Ambient Shading。本章節將進一步探討這些Shading模型以及它們的應用。 10.1 Diffus...

  • 6

    在第十八章中介紹了BRDF,它描述了光綫經過反射表面作用后的變化。在本章中,繼續討論某種材料對於視覺上最重要的屬性,並介紹一些有助於捕捉這些屬性的簡單模型。圖形學中大量使用了BRDF模型,本章介紹的模型是爲了給出非漫反射BRDF的概念。 Real-Worl...

  • 6

    現實中,許多物體表面接受到的光不僅僅來自光源,還來自其他反射表面。這通常被稱爲間接光照或相互光照。根據這一性質可知,任意一個表面都可能被場景中所有其他表面照亮,這就導致計算複雜度為O(N2),因此這一問題的處理也被稱爲“全局光照問題”。本章節就將介...

  • 7

    光綫追蹤技術是產生一些高級渲染效果的基礎,在

  • 5

    本章节介绍第二种(第一种是第四章中的ray tracing)渲染方式:逐个将物体绘制到屏幕上。两者的不同在于:ray tracing是每个像素会被哪些几何图元影响,而本章节中的渲染方式是每个几何图元影响哪...

  • 4
    • blog.matrixs.site 2 years ago
    • Cache

    圖形學系列 Ch15-Curves-閲讀筆記

    圖形學系列 Ch15-Curves-閲讀筆記注意,任意一條曲綫都可能有多種數學表示,所以在數學上會謹慎的區別曲綫和它的表示。但是在圖形學中,我們通常只關心它的表示方式而不是曲綫本身。 不同的表示方式有各自優缺點。 隱式表...

  • 7
    • blog.matrixs.site 2 years ago
    • Cache

    圖形學系列 Ch18-Light-閲讀筆記

    本章節介紹測量光綫的一個工具 —— Radiometry,該工具對於計算機圖形學來説非常重要。本章節還包含Photometry,它用於量化Radiometry,並通過縮放來估計有多少“有用”的光綫。 18.1 Radiometry 本節有許多術語與概念...

  • 4
    • blog.matrixs.site 2 years ago
    • Cache

    圖形學系列-Ch4 Ray Tracing-閲讀筆記

    4.1 - Ray Tracing算法框架 Basic Ray Tracing分为三个部分: ray generation: 计算光源位置和光线方向; ray intersection: 计算与光路相交的最近的物体; shading: 基于ray intersection计算每个点的特性,例如颜色...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK