數(shù)學(xué)上的規(guī)定:
由于習(xí)慣的不同,每個(gè)人對(duì)同一個(gè)事物的標(biāo)準(zhǔn)也不同。
應(yīng)事先規(guī)定好整個(gè)項(xiàng)目的一些“習(xí)慣”,并堅(jiān)決貫徹它們,上下統(tǒng)一。
世界坐標(biāo)系:
場(chǎng)景中所有物體處于世界坐標(biāo)系下,且所有的坐標(biāo)系均為左手坐標(biāo)系,左手坐標(biāo)系三個(gè)軸的指向如圖:
以屏幕為基準(zhǔn),該坐標(biāo)系X軸指向右,Y軸指向上,Z軸指向屏幕里面。
以此坐標(biāo)系我們可以創(chuàng)建一個(gè)世界空間。當(dāng)然并沒有真正創(chuàng)建出來,只是一個(gè)約定,便于日后的使用。就像地球的經(jīng)緯度一樣,有了這個(gè)我們就能描述什么東西在什么地方了。
物體坐標(biāo)系:
而世界中有很多物體,比如游戲中的模型,玩家等等。
該世界里的每個(gè)物體都含有三個(gè)數(shù)據(jù):
1)該物體中心處于世界的位置(x,y,z)
2)該物體旋轉(zhuǎn)的角度(Pitch,Yaw,Roll)。分別對(duì)應(yīng)繞x y z軸旋轉(zhuǎn)的角度,并規(guī)定從各個(gè)軸的負(fù)方向看過去的順時(shí)針方向?yàn)檎1热?0,0,90)代表該物體不沿x y軸旋轉(zhuǎn),只沿z軸旋轉(zhuǎn)90度,且旋轉(zhuǎn)方向?yàn)轫槙r(shí)針。
3)構(gòu)成該物體的所有點(diǎn)的相對(duì)于物體中心的位置(xi, yi, zi) (i 為構(gòu)成物體的各個(gè)點(diǎn),比如正方體的 8 個(gè)頂點(diǎn))
光柵化的基礎(chǔ)思想
(假設(shè)世界坐標(biāo)系下只有一個(gè)物體,簡(jiǎn)化描述):
1)將該物體的所有點(diǎn)根據(jù)該物體在世界的位置及朝向進(jìn)行縮放、旋轉(zhuǎn)和平移,這一步將把物體的所有點(diǎn)的坐標(biāo)從物體坐標(biāo)系轉(zhuǎn)換到世界坐標(biāo)系。
比如某物體只有一個(gè)點(diǎn),該點(diǎn)處于相對(duì)物體中心的 (1,0,0) 處,而該物體中心處于世界的 (0,1,0) 處,且沒有經(jīng)過旋轉(zhuǎn)。那么該點(diǎn)經(jīng)過縮放、旋轉(zhuǎn)和平移的坐標(biāo)轉(zhuǎn)換后,可以得到該點(diǎn)在世界坐標(biāo)系下的位置 (1,1,0) 。
2)將世界中的觀察者(人、玩家、攝像機(jī)等等)簡(jiǎn)化成一個(gè)點(diǎn),就像一個(gè)攝像機(jī),該攝像機(jī)便是觀察的視線發(fā)出的地方。同時(shí)攝像機(jī)也有如物體一樣的位置信息 (x,y,z) 及旋轉(zhuǎn)角度信息 (pitch, yaw, roll)。通過這兩組數(shù)據(jù)我們可以求出攝像機(jī)在世界坐標(biāo)系下的位置以及視線的朝向。
但將要進(jìn)行的動(dòng)作恰恰相反,我們將世界的所有點(diǎn)(經(jīng)過第一步后這些點(diǎn)的坐標(biāo)系已經(jīng)從他們的物體坐標(biāo)系轉(zhuǎn)換到了世界坐標(biāo)系)進(jìn)行上述變換的逆變換,可以得到以攝像機(jī)為中心的所有點(diǎn)的坐標(biāo)。這一步之后的世界空間改叫觀察空間。
3)將觀察空間轉(zhuǎn)至齊次剪裁空間。在實(shí)際生活中攝像機(jī)(或者人類)看東西的范圍是有限的。但是目前為止所有的點(diǎn)不論攝像機(jī)看不看得到,都經(jīng)過了變換。所以還要將觀察空間中的所有點(diǎn)轉(zhuǎn)換到一個(gè)叫做齊次剪裁空間的空間。這個(gè)空間有一個(gè)長寬高均為2的人為劃定的范圍,且該立方體形的范圍的中心處于原點(diǎn)(0,0,0)。
也就是說,這個(gè)范圍上下前后左右的范圍是 -1 到 1 。經(jīng)過一個(gè)特殊的矩陣乘法變換后,所有處于該 2x2x2 立方體形范圍內(nèi)的所有點(diǎn),都將是看得到的,最終會(huì)被渲染出來的。所有不在該 2x2x2 大小的范圍內(nèi)的點(diǎn),都處于視線之外,最后都將不會(huì)渲染出來。盜張圖:
左邊是觀察空間,原點(diǎn)處是我們的攝像機(jī)(這個(gè)坐標(biāo)系不是我們使用的左手坐標(biāo)系,這是右手坐標(biāo)系,他的 z 軸朝向屏幕外)。右邊是第三步轉(zhuǎn)換后形成的齊次剪裁空間。
目前已經(jīng)把所有點(diǎn)都轉(zhuǎn)換到了這個(gè)齊次剪裁空間,并且剪裁掉了一切不在該立方體包圍內(nèi)的點(diǎn)。
這時(shí)候我們已經(jīng)可以把各個(gè)點(diǎn)的x、y坐標(biāo)拿來,經(jīng)過插值匹配到顯示器的分辨率后(即將每個(gè)點(diǎn)的x y坐標(biāo)的數(shù)值從[-1,1]“拉伸”至譬如[0,1920]和[0,1080]),直接顯示出來了。但是顯示的結(jié)果會(huì)比較奇怪,遠(yuǎn)近不同的物體大小居然一樣。該投影過程叫做正交投影,而日常生活中我們所看到的近大遠(yuǎn)小的世界是透視投影的結(jié)果。
怎么進(jìn)行透視投影?大致思路是將每個(gè)點(diǎn)的在觀察空間下的z坐標(biāo)拿來,除以該點(diǎn)在齊次剪裁空間下的x和y的值(x = x/z, y = y/z)。顯示出來便是透視投影后的圖像。
簡(jiǎn)短總結(jié):
要想將構(gòu)成三維世界的點(diǎn)轉(zhuǎn)換到顯示器這個(gè)二維平面上來,需要對(duì)每個(gè)點(diǎn)進(jìn)行如下操作
1)物體空間轉(zhuǎn)換至世界空間 (通過數(shù)個(gè)矩陣乘法)
2)世界空間轉(zhuǎn)換至觀察空間 (需求出攝像機(jī)變換的逆矩陣)
3)觀察空間轉(zhuǎn)換至齊次剪裁空間 (通過乘上特殊的變換矩陣)
4)進(jìn)行透視除法 (除以特定 z 值)
但是以上變換只是得到了點(diǎn)最終的位置信息。要想顯示在屏幕上,還需要填充點(diǎn)和線組成的面,甚至是賦上自定義的貼圖。
-
光柵
+關(guān)注
關(guān)注
0文章
287瀏覽量
27529 -
三維
+關(guān)注
關(guān)注
1文章
510瀏覽量
28995
原文標(biāo)題:光柵化三維場(chǎng)景的基本流程
文章出處:【微信號(hào):Imgtec,微信公眾號(hào):Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論