現(xiàn)代計(jì)算機(jī)圖形學(xué)入門-L4-變換.2

Viewing Transformation(觀測(cè)變換)

一.View/Camera Transformation(視圖變換)

視圖變換主要包含模型變換和視圖(攝像機(jī))變換,統(tǒng)稱為視圖變換。

什么是視圖變換?

模型-視圖-投影變換,簡(jiǎn)稱“MVP變換”

  • M:model transformation
    • 設(shè)置好場(chǎng)景
    • ex: 選好地方人擺好姿勢(shì)
  • V:view tranforamtion
    • 設(shè)置好Camera的look at方向和up方向
    • ex:找到一個(gè)角度放置照相機(jī)
  • P:projection tranformation
    • 將camera看向的3d內(nèi)容轉(zhuǎn)換為2d畫(huà)面
    • ex:拍照

model/view變換常常同時(shí)進(jìn)行,由下方視圖變換章節(jié)可知,做視圖變換時(shí)根據(jù)相對(duì)靜止,模型也同時(shí)應(yīng)用變換。

如何做視圖變換?

1.定義照相機(jī)

  1. postion 定義相機(jī)的位置
  2. look-at/gaze direction 定義相機(jī)看向的方向
  3. up direction 設(shè)定相機(jī)的up-direction

一個(gè)位置,兩個(gè)向量,則可以確定一個(gè)相機(jī),以上則是觀測(cè)矩陣所需要的初始的定義。

2.觀察

前提:當(dāng)物體與相機(jī)保持相對(duì)靜止時(shí),相機(jī)與物體無(wú)論如何移動(dòng),觀察的結(jié)果不變。

因此,進(jìn)行以下的處理:

  • (1) 處理:變換相機(jī)到標(biāo)準(zhǔn)中心:

    放在原點(diǎn)、up方向?yàn)橄蛏系膟軸,看向-z方向

  • (2) 模型隨相機(jī)一起運(yùn)動(dòng)

好處:簡(jiǎn)化很多操作

  • 設(shè)相機(jī)在e點(diǎn)上,look at/gaze direction的方向?yàn)間,up方向?yàn)閠
  • 現(xiàn)在需要把相機(jī)移動(dòng)到原點(diǎn),向量g旋轉(zhuǎn)到-z上,t旋轉(zhuǎn)到y(tǒng)正半軸上。

基本步驟:

  1. 平移,將e點(diǎn)移動(dòng)到原點(diǎn)
  2. 旋轉(zhuǎn)g到-z方向
  3. 旋轉(zhuǎn)向上方向t到+y上
  4. 前面步驟完成后,自然而然地gxt的方向就在+x方向了。

上述步驟使用矩陣表示

  1. Tview 平移矩陣


  2. Rview 旋轉(zhuǎn)矩陣

由g,t,gxt旋轉(zhuǎn)到-z,y,x上矩陣難寫,可以利用旋轉(zhuǎn)矩陣是正交矩陣(正交矩陣的逆等于轉(zhuǎn)置)的特性:

  • 先求Rview的逆->Rview-1(即x,y,-z旋轉(zhuǎn)到gxt,t,g),
  • 再對(duì)Rview-1求轉(zhuǎn)置得到Rview。

二、Projection Transformatio(投影變換)

  1. 正交投影:假設(shè)相機(jī)拿到無(wú)限遠(yuǎn),近平面與遠(yuǎn)平面完全一樣大小。

  2. 透視投影,frustum中內(nèi)容成像到近平面上

1、正交投影<br />Orthographic projection

無(wú)近大遠(yuǎn)小.


基本思想

  1. 設(shè)置camera在原點(diǎn),gaze /look at方向?yàn)?z,up方向?yàn)?y
  2. 舍棄物體z值,使物體的z都等于0,至此所有物體都只在x軸跟y軸上,攝像機(jī)看到的就是x、y平面上的一張圖。
  3. 將物體都擠壓到規(guī)范正方形[-1,1][-1,1],這一步是約定俗稱的操作,為了方便后面的計(jì)算。
圖形學(xué)中的實(shí)際操作:
    1. 定義空間中的立方體,[lxr]x[b,t]x[f,n]。f<n,因?yàn)橛沂窒?,camera延著-z方向看
    1. 中心位于((r+l)/2,(t+b)/2,(n+f)/2)的立方體延著(-(r+l)/2,-(t+b)/2,-(n+f)/2)平移到原點(diǎn)。
    1. 將其給拉成一個(gè)[-1,1]的正則(canonical)立方體

數(shù)學(xué)上的表現(xiàn)

2、透視投影:<br />Perspective projection

符合人眼成像,近大遠(yuǎn)小,平行線遠(yuǎn)處會(huì)相交

基本思想:

  1. 將frustom擠壓成一個(gè)長(zhǎng)方體
  2. 再做一次正交投影

如何擠?

定義:

  1. 在擠壓的過(guò)程中,近平面任何一個(gè)點(diǎn)的x,y,z值永遠(yuǎn)不會(huì)發(fā)生變化。

  2. 在擠壓過(guò)程中,遠(yuǎn)平面上的Z值不會(huì)發(fā)生變化。

  3. 擠壓過(guò)程中,遠(yuǎn)平面的中心點(diǎn)也不會(huì)發(fā)生變化。

擠壓過(guò)程:

  1. 從側(cè)面觀察,根據(jù)相似三角形可得y'=(n/z)*y


  2. 同理可得x’


  3. 結(jié)果的點(diǎn)可以寫成一個(gè)齊次坐標(biāo)矩陣,然后同乘z后,仍然表示同一個(gè)點(diǎn)


  4. 寫出變換矩陣表達(dá)式,原來(lái)的點(diǎn)經(jīng)過(guò)變換矩陣后,得到第3步表示的點(diǎn)


  5. 由第4步,可以反推變換矩陣的形式如下:


    • M的第3行一定與z'有關(guān)系。


  6. 根據(jù)前述的定義:

  • 近平面上的點(diǎn)x、y、z值不變。取點(diǎn)(x,y,n),得到結(jié)果后同乘n


    觀察結(jié)果第3行=n*n,與x、y無(wú)關(guān),因此M前兩項(xiàng)必為0:M的第3行=(0,0,A,B)

  • 遠(yuǎn)平面上的點(diǎn)的z值不變。取點(diǎn)(0,0,f),代入上述求到的(0,0,A,B)——變換矩陣第三行

綜上兩個(gè)等式,變換矩陣求解完畢


課后思考:

在將frustum擠壓為Cuboid的過(guò)程中,已知遠(yuǎn)平面和近平面的Z'不變,那么近平面與遠(yuǎn)平面之間的z,z’相對(duì)z如何變化,更近了還是更遠(yuǎn)了?

  • 解答
    設(shè)任意點(diǎn)(x,y,z)經(jīng)M變換



    注意點(diǎn):camera在原點(diǎn)看向-z方向,所以n+f<0

綜上,z’相對(duì)z減小,更接近遠(yuǎn)平面了

小結(jié):

本節(jié)課主要講述觀測(cè)變換(Viewing Transformation)——三維的場(chǎng)景轉(zhuǎn)換為二維的畫(huà)面。觀測(cè)變換包括:

  1. 視圖變換(M、V)
  • 視圖變換包含模型變換(Model Transformation)與視圖變換Viewing Transformation,兩者通常同時(shí)進(jìn)行,統(tǒng)稱為視圖變換。
  • 這一步的目的是將攝像機(jī)擺放到look at/gaze方向?yàn)?z方向,up為+y,位置為原點(diǎn)的方向,包含平移與旋轉(zhuǎn)過(guò)程,物體跟隨相機(jī)同步變換。
  • 變換矩陣最終實(shí)際上是作用到物體上,因?yàn)閼?yīng)用到物體后,我們就知道這時(shí)攝像機(jī)就已經(jīng)擺放到指定位置。
  • 求旋轉(zhuǎn)變換矩陣的過(guò)程中根據(jù)正交矩陣的性質(zhì),可以通過(guò)求逆矩陣的方式計(jì)算,計(jì)算非常方便。
  1. 投影
    投影分為:
  • 正交投影


    • 求將立方體映射到[-1,1]x[-1,1]x[-1,1]的標(biāo)準(zhǔn)立方體(canonical cube)的變換矩陣。
    • 無(wú)近大遠(yuǎn)小,工程制圖應(yīng)用多。
  • 透視投影


    • 先將四棱錐frustum“壓縮成”立方體
    • 再進(jìn)行正交投影。
    • 近大遠(yuǎn)小,更符合人眼

更多

現(xiàn)代計(jì)算機(jī)圖形學(xué)入門-L3-變換.1

現(xiàn)代計(jì)算機(jī)圖形學(xué)入門-L2 ——線性代數(shù)

現(xiàn)代計(jì)算機(jī)圖形學(xué)入門-L1

另辟蹊徑的"一鍵打包"

Web/Native資源加密方案

Spine換裝方案多平臺(tái)解析

基于creator3.0的3D換裝

CocosCreator3.4.2原生二次開(kāi)發(fā)的正確姿勢(shì)——手把手教你接SDK

在編輯器上聲明自定義數(shù)據(jù)數(shù)組

包體優(yōu)化指南

不規(guī)則3D地形行走

快速實(shí)現(xiàn)3d拋物線繪制

奇形怪狀-不規(guī)則按鈕實(shí)現(xiàn)

關(guān)于作者

我是羽毛,一名游戲研發(fā)工程師,一名野生攝影同學(xué)。我的公眾號(hào)主要分享自己的一些游戲項(xiàng)目開(kāi)發(fā)過(guò)程中的功能總結(jié)及日常開(kāi)發(fā)筆記。也希望能通過(guò)平臺(tái)的交流,與更多有想法的同學(xué)交流認(rèn)識(shí),共同成長(zhǎng)。

歡迎大家在日常開(kāi)發(fā)過(guò)程中,如果覺(jué)得有需要討論解決、分享或者探討的內(nèi)容,在公眾號(hào)后臺(tái)或者文章留言處給我反饋,提供寫作的方向,從另一個(gè)角度也盡量讓寫作內(nèi)容更貼近大家的需求以及痛點(diǎn),在此謝謝各位同學(xué).

另外羽毛也提供付費(fèi)技術(shù)咨詢的服務(wù),有需求的同學(xué)可以公眾號(hào)后臺(tái)私信添加微信。

今日技能你學(xué)廢了嗎?

<div align ="center">
<h2>更多精彩歡迎關(guān)注微信公眾號(hào)“羽毛不會(huì)飛”</h2>
<img src="https://upload-images.jianshu.io/upload_images/21178773-2e5d33fde1edc63e.png" width="80%"/>
<img src="https://upload-images.jianshu.io/upload_images/21178773-ebca0bcc56f0bd3e.png" />

</div>

本文由mdnice多平臺(tái)發(fā)布

最后編輯于
?著作權(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),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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