轉(zhuǎn)換矩陣
模型網(wǎng)格的三維空間位置都是由它們的頂點(diǎn)坐標(biāo)決定的,如果每次想要移動(dòng)一下模型位置都要依次改變每個(gè)網(wǎng)格的頂點(diǎn)坐標(biāo),這將一件非常頭疼的事,要是遇上需要顯示動(dòng)畫效果那就更糟了。為了解決這個(gè)問題,大部分的三維系統(tǒng)都會(huì)提供轉(zhuǎn)換操作,這個(gè)操作原理是整體移動(dòng)網(wǎng)格,這樣網(wǎng)格與世界坐標(biāo)就有一個(gè)相對(duì)轉(zhuǎn)換,而不需要去改變每一個(gè)頂點(diǎn)的坐標(biāo)值。其中,轉(zhuǎn)換操作包括:移動(dòng)、旋轉(zhuǎn)、縮放,這些操作都是針對(duì)網(wǎng)格整體相對(duì)世界坐標(biāo)系的,而不是特定的每一個(gè)頂點(diǎn)。
下圖中展示了轉(zhuǎn)換操作,圖中有三個(gè)立方體,每一個(gè)立方體都是由一個(gè)立方體網(wǎng)格組成,它們都包含相同的頂點(diǎn),在我們進(jìn)行移動(dòng)、旋轉(zhuǎn)、縮放操作的時(shí)候不需要改變這些頂點(diǎn)的坐標(biāo)值,而是給立方體網(wǎng)格賦予一個(gè)轉(zhuǎn)換操作。左邊紅色的立方體向右移動(dòng)了4個(gè)單位(進(jìn)行了[-4,0,0]操作),然后又相對(duì)x和y軸進(jìn)行了旋轉(zhuǎn)(這里注意一下,我們這里角度的單位是弧度,即一弧度等于360度除以2*PI)。右邊藍(lán)色的立方體向右移動(dòng)了4個(gè)單位,然后對(duì)三個(gè)方向都放大了1.5倍,中間綠色立方體就是最初始位置。

我們用一個(gè)矩陣來代表轉(zhuǎn)換操作,這個(gè)矩陣中保存著一個(gè)數(shù)組,通過這個(gè)數(shù)組進(jìn)行一些數(shù)學(xué)計(jì)算就可以得到轉(zhuǎn)換以后的頂點(diǎn)坐標(biāo)值。大部分的轉(zhuǎn)換矩陣用4*4的數(shù)組表示,這個(gè)數(shù)組包含4行4列一共16個(gè)數(shù)。下圖就是一個(gè)4*4數(shù)組的示意圖,其中m12、m13、m14用來操作移動(dòng),m0、m5、m10用來操作縮放,m1和m2、m4和m6、m8和m9分別用來操作相對(duì)x、y、z軸的旋轉(zhuǎn),轉(zhuǎn)換矩陣乘以頂點(diǎn)坐標(biāo)就是轉(zhuǎn)換之后的坐標(biāo)。

如果你同我一樣是個(gè)線性代數(shù)極客,我這么講你肯定聽得懂,如果你不熟悉線性代數(shù)也沒關(guān)系,unity3D以及其它工具中已經(jīng)將這些操作都封裝好了,我們只需要正確調(diào)用它們的API即可,但是了解一下這些操作的底層計(jì)算過程總還是好的。
聯(lián)系方式:0755-81699111
課程網(wǎng)址: http://www.vrkuo.com/course/vr.html