四、OpenGL 矩陣變換原理

1、概述

上節(jié)提到,3D圖形的移動(dòng),旋轉(zhuǎn),縮放等變換,都是通過乘以一個(gè)矩陣實(shí)現(xiàn)。那么為什么通過矩陣就可以實(shí)現(xiàn)呢?本節(jié)主要是探討這個(gè)問題。要理解本節(jié)內(nèi)容,你最好有點(diǎn)向量和矩陣的知識(shí)。

  • 向量:有大小和方向的有向線段。物體的每一點(diǎn),就是物體原點(diǎn)到每一點(diǎn)的向量,表示為:[1,0,0]等,也可以理解為點(diǎn)的坐標(biāo)。
  • 矩陣:可以理解為二維數(shù)組,OpenGL只考慮3x3或者4x4的矩陣。

更多向量和矩陣知識(shí),請(qǐng)查閱:3D圖形.pdf-對(duì)應(yīng)向量和矩陣章節(jié)

2、向量變換

物體通過矩陣進(jìn)行變換,其實(shí)就是物體里面的每個(gè)點(diǎn)(向量)通過矩陣進(jìn)行變換。所以我們可以簡單討論向量通過矩陣的變換:

公式:新向量 = 矩陣 x 向量(v' = Mv)

image

上面是向量和矩陣的乘法。

行向量與矩陣相乘,行向量必須在矩陣左邊,這叫行向量左乘,左乘才有意義。同理,列向量右乘才有意義。OpenGL使用列向量。后面的部分內(nèi)容可能還是使用行向量,原理一樣。

3、矩陣的幾何意義

矩陣是怎么變換向量的呢,或者說我們?cè)趺粗酪粋€(gè)矩陣表示的意義呢,是使向量旋轉(zhuǎn)了多少度,縮放了多少呢?

image

上圖,我們分別用x軸的單位向量(基向量)[1 0 0],y軸的單位向量[0 1 0],z軸的單位向量[0 0 1],乘以矩陣,進(jìn)行向量變換。

[1 0 0],x軸的單位向量,乘以矩陣后,得到了矩陣的第一行,所以矩陣的第一行就是x軸單位向量[1 0 0]經(jīng)過矩陣轉(zhuǎn)換后的向量。以后我們看到矩陣的第一行,就知道了x軸單位向量[1 0 0]變換后的向量。

同理,[0 1 0]y軸單位向量經(jīng)過矩陣變換為第二行,[0 0 1]z軸單位向量經(jīng)過矩陣變換為第三行。

知道上面的原理后,我們就可以進(jìn)行下面的推導(dǎo)了:

image

矩陣為:

image

所以:

x軸基向量[1 0] --> [2 1]

y軸基向量[0 1] --> [-1 2]

所以我們就可以得到右圖

反過來,如果我們想讓左圖轉(zhuǎn)變?yōu)橛覉D,根據(jù)右圖的x軸和y軸,反推出矩陣。

再來看個(gè)三維的例子:

image

矩陣意義總結(jié):

image

我們可以推理出:

1、繞x軸旋轉(zhuǎn)的矩陣為:

image

2、繞y軸旋轉(zhuǎn)的矩陣為:

image

3、繞z軸旋轉(zhuǎn)的矩陣為:

image

縮放:

image

4、4x4矩陣

平移,你會(huì)發(fā)現(xiàn),按上面的理論,根本無法表示平移?

上面的變換都是圍繞坐標(biāo)原點(diǎn)的,平移會(huì)使物體離開原點(diǎn),一個(gè)3x3的矩陣是無法表示平移的。

要加入平移,我們得用4x4的矩陣,如下圖:

image

藍(lán)色部分:我們知道旋轉(zhuǎn)、縮放等的線性變換只需要通過3x3的矩陣就可以。所以這里的藍(lán)色部分矩陣就代表線性變換(線性變換包括旋轉(zhuǎn),縮放等,表示的變換原點(diǎn)位置是不變的)。

紫色:表示投影相關(guān)參數(shù),暫不關(guān)注。

綠色:

image

看下面例子:

image

向量[Vx Vy Vz] 分別產(chǎn)生了 tx、ty、tz的平移量。比如原點(diǎn)[0 0 0]就變成了[tx ty tz]

下面我們通過幾個(gè)例子加深理解向量的仿射變換(仿射變換包括線性變換,可以理解為增加了平移的線性變換):

1、平移:

image

2、放大:

image

3、旋轉(zhuǎn)

image

4、組合

image

向量 v' = Mv

矩陣 M = TR T為平移矩陣,R為旋轉(zhuǎn)矩陣

所以 v' = (TR)v

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容