青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 132  文章 - 51  trackbacks - 0
<2012年6月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用鏈接

留言簿(7)

隨筆分類

隨筆檔案

文章分類

文章檔案

cocos2d-x

OGRE

OPenGL

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

-潘宏
-2009.12.31

-本人水平有限,疏忽錯誤在所難免,還請各位數學高手、編程高手不吝賜教

-email: popyy@netease.com

原文地址:http://blog.csdn.net/popy007/article/details/5120158

 

一些網友寫信給我希望能夠了解固定流水線中世界空間到相機空間變換矩陣的具體推導過程。其實之前我在《向量幾何在游戲編程中的使用6》中已經簡單的把相機變換作為一個使用基理論的例子進行了說明,但可能仍然不夠具體。這篇文章中,我會盡力闡述相機變換的整個來龍去脈。希望能夠對正在學習固定流水線的朋友們有所幫助。這里我們仍然會在推導相機變換之前介紹幾個理論知識,目的是為了更好的理解推導過程。我們馬上開始!

什么是相機變換?

在流水線中,當物體從模型坐標通過世界矩陣變換到世界空間之后,它將通過相機變換從世界空間變換到相機空間。下圖的固定流水線中,藍色框中的部分就是這個過程。

 

 

 

 

 

 

其實,所謂的相機空間,就是以相機作為坐標原點的一個參考系,所以,從世界空間變換到相機空間,就是把物體從世界坐標系,變換到相機為原點的相機坐標系,如下圖所示。

 

 

 

 

左半部分是小人在世界空間中的位置,右半部分是小人變換到相機空間后的位置。這樣的一個變換可以有很多種方式來實現:歐拉相機系統、UVN系統、Two Points & A Twist等等。這里我們討論最為廣泛的UVN系統構建相機矩陣,如果讀者對其他方法感興趣,可以查找相關的資料。我們仍然討論OpenGL的相機矩陣的推導,其他API可以類似的推導。

坐標轉換公式

我們在《向量幾何在游戲編程中的使用6》中提到了正交矩陣,這是在基理論基礎上的一個概念(如果對基理論不是很熟悉,請參考《向量幾何在游戲編程中的使用6》)。正交矩陣所有列(行)向量構成了一個標準正交基(它的列向量都是互相正交,并且長度為1),因此,可以把正交矩陣看成是對一個坐標系的描述。同時,我們知道:同一個向量,在不同的基下面的坐標是不同的。因此,可以用正交矩陣來代表坐標系(也可以看作基)從而寫出在統一的參考系(全局坐標系)下同一個向量在不同基中的坐標。

 

 

 

上面的式子表示,參考系中向量v在基Q中的坐標是v’,在基R中的坐標是v’’(注意這里的環境下基矩陣是用列向量表示的,這樣相乘之后的結果表示的是基向量的線性組合)。如下圖,黑色基表示的是參考系,紅色是基Q,藍色是基Rv是參考系中的一個向量。

 

 

為了讓大家更清楚,我舉一個例子:

 

 

上式的意思是:參考系中的向量v,在基Q( 1 0 0 ), ( 0 1 0 ), ( 0 0 1)下的坐標是( 1 2 6 ),在基R( 0 1 0 ), ( 0 0 1 ), ( 1 0 0 )下的坐標是( 2 6 1 )。注意,我們所討論的所有基和向量的關系都只是線性表示的關系,沒有位移關系,因此我們用3D向量表示,而不是4D的齊次表示(如果對齊次坐標不是很熟悉,請參考《深入探索透視投影變換》中的齊次坐標部分)。

這樣,已知一個基Q和向量v在它之中的坐標v’,以及另外一個基R,我們可以通過v=Qv’=Rv’’公式來計算v’’

 

 

 

上面就是求v’’的公式,注意到右邊需要計算基R的逆矩陣R^-1,因為基R是正交矩陣,而正交矩陣的一個重要性質就是逆等于轉置。因此,我們可以把它寫成

 

這個公式就是坐標轉換公式。特別地,如果Q是和參考系相同的坐標系(3D編程中大多數情況下如此),比如世界坐標系,則Q是一個單位矩陣I,則我們可以把它寫成

 

 

這個坐標轉換公式可以解釋為:對于世界坐標系中的向量v’,它在坐標系R中的坐標是v’’。我們在后面會用到這個公式。

    除了用正交矩陣來闡述坐標轉換,我們還可以使用點積所代表的共線程度colinear amount)來描述坐標轉換(AndréLaMothe的《Tricks Of The 3D Game Programming Gurus》)。這個理論基于點積的幾何意義:一個向量在另一個向量上的共線程度。比如兩個向量vs點積

 

 

幾何意義就是vs方向上的投影長和s的長的乘積,或者是sv方向上的投影長和v的長的乘積(積的符號為:若vs的角度小于90度,積為正,如果是直角,積為零,否則為負)。

 

進一步地,如果v是一個單位向量,則這個點積可以解釋為sv方向上的投影長;如果s是一個單位向量,則可以解釋為vs方向上的投影長。現在,我們把點積推廣到基的層次上,把一個向量v’和一個基R的三個單位軸向量進行點積,點積得到的三個值則表示這個向量在這個基下的坐標v’’

 

 

數學表達為

 

 

請注意,為了讓v’能夠和基的每一個軸向量進行點積,我們必須把基寫成轉置形式,即行向量乘法,否則就變成了線性組合的形式。這個公式的意義就是世界空間中的向量v’和基R的軸向量進行點積從而得到v’R下的共線程度——坐標v’’。這個公式和上面我們得到的坐標轉換公式一模一樣。實際上我們是從兩個不同的方向解釋同一個公式,希望你能夠把兩個方向都理解。

UVN系統

UVN系統本身是一個基。如下圖所示,三個基向量UVN分別指向相機的右方、上方和后方從而構成右手坐標系,相機則處于坐標原點。

 

 

使用UVN系統可以非常方便的設置相機朝向。它的構建過程如下如所示

 

在參考系下(這里是世界坐標系),我們給定相機的位置——eye,被觀察的小人的位置——lookat,以及一個輔助向量——參考系中表示“上方”的向量up,這個向量會影響UV的生成,因為以后求出的V向量會在upN向量所決定的平面上(有興趣可以自己證明一下),所以可以通過這個向量讓相機產生不同的偏轉。

 

 

首先我們求出向量N

 

 

很簡單,用目標位置減去相機的位置,就是圖中的步驟2。第3步,我們求出向量U。這一步需要使用輔助向量up,如果不希望相機產生偏轉,一般取(0, 1, 0)

 

 

 

U使用向量的叉乘實現,就是圖中的步驟3。最后,使用NU計算出向量V

 

 

最后將計算出的UVN進行單位化,就得到了相機的UVN系統。結合上面我們談到的坐標轉換理論,我們可以把UVN系統看作是相機的基,從而可以方便的把一個向量在世界坐標和相機坐標進行轉換。

OpenGLgluLookAt(eyex, eyey, eyez, lookatx, lookaty, lookatz, upx, upy, upz)方法就是使用的上面的步驟進行相機矩陣的設置。它的前三個參數就是相機的位置向量,中間三個參數是所觀察的目標位置向量,最后三個參數就是輔助向量up

相機矩陣的推導

上面我們已經說明了UVN系統,標準流水線中就是使用了UVN系統來描述相機。U, V, N分別對應相機坐標系的三個基向量。

此外,對于一個相機來說,它在開始的時候和世界坐標系是重合的,用戶控制相機在世界空間中移動之后,相機的狀態可以用兩個屬性來描述——朝向和位置。也就是說,有了這兩個屬性,一個相機模型在世界中的狀態就確定了。而這兩個屬性,我們用變換的理論來描述,就是旋轉和平移。可以想象,對于世界中的任何一個相機狀態,我們都可以把它看成是:相機先圍繞自身基原點旋轉一定的角度,然后平移到世界空間的某個地方。下圖展示了這個過程

 

 

 

圖中,紅色是相機的基,而黑色是世界的基,也就是參考系。小人是世界中的一個物體。相機在移動之前,兩個基是重合的。當相機在屏幕中定位時,它首先會進行朝向的確定——旋轉,然后進行位置的確定——平移。圖中的RotationTranslation兩步就是相機定位時所發生的變換。可以看到相機相對于小人的運動。而當進行相機變換的時候,小人應該從世界基變換到相機的基里面。這樣,他應該進行一個相機定位的逆定位,先逆平移小人和相機,然后再逆旋轉小人和相機,最后相機歸位,小人隨相機變到了相機空間。這是由Inverse TranslationInverse Rotation兩個步驟完成的,這兩個步驟就是相機變換。現在我們推導這個變換。我們把關系寫出來,相機本身的變換C包括兩個元素

 

其中T是平移變換,R是旋轉變換。而相機變換是相機本身變換的逆變換

 

 

這個C^-1就是我們要求出的相機變換。其中T^-1很容易求出,即

 

 

R^-1就沒有這么容易求出來了。所以,我們不求它,我們用UVN系統。什么意思?請看上面的那張相機變換的圖,當相機變換進行完Inverse Translation這一步之后,相機的原點和世界原點就重合了,也就是處理完了關于平移的變換。接下來我們要做的是逆旋轉,而其實逆旋轉的目的,就是要得到目前世界坐標中經過逆平移的小人在相機坐標系中的坐標。是不是似曾相識?我們的坐標變換理論就派上用場了。我們回憶上面坐標變換的公式

 

 

這個坐標轉換公式可以解釋為:對于世界坐標系中的向量v’,它在坐標系R中的坐標是v’’。那么,我們可以套用在這里:對于世界坐標中的已經經過逆平移的坐標v’,它在相機坐標系R中的坐標是v’’。什么是相機坐標系R?就是我們的相機UVN系統!就是

 

 

則相機變換的完整公式就是

 

 

這里,v是小人在世界空間中的坐標,v’’是小人在相機空間中的坐標。則相機變換矩陣就是

 

至此,我們就完成了相機矩陣的推導。物體經過這個矩陣就從世界空間變換到了相機空間,等待流水線對它進行投影變換。OpenGL就使用了上面推導出的最后的那個矩陣。希望你能夠理解這個推導過程,如果你有什么問題或者不同的看法,請一定給我發信J下次見!

posted on 2011-07-31 10:02 風輕云淡 閱讀(1129) 評論(1)  編輯 收藏 引用 所屬分類: DX

FeedBack:
# re: 推導相機變換矩陣(轉) 2012-01-12 16:57 liuxiao
C-1怎么變成了4階的矩陣,這跟v是不能相乘的呀  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              老司机午夜精品视频| 欧美激情女人20p| 国产老肥熟一区二区三区| 亚洲欧美激情一区二区| 亚洲网在线观看| 国产日韩成人精品| 久久躁狠狠躁夜夜爽| 免费欧美电影| 99亚洲一区二区| 亚洲欧美日韩精品一区二区 | 欧美一区二区三区视频免费播放| 国产伦一区二区三区色一情| 久久免费视频在线| 噜噜噜在线观看免费视频日韩| 91久久香蕉国产日韩欧美9色 | 欧美一区二区三区播放老司机| 亚洲综合色自拍一区| 一区二区在线观看视频| 亚洲黄色在线视频| 国产精品看片资源| 欧美国产日韩精品免费观看| 欧美日韩一区二区在线| 久久久国产视频91| 欧美激情视频网站| 久久国内精品自在自线400部| 美女国内精品自产拍在线播放| 亚洲午夜视频在线| 久久久久久久久久久成人| 一区二区高清| 久久久99精品免费观看不卡| 在线亚洲激情| 久久久精品网| 亚洲午夜在线| 欧美成人免费全部| 久久久久久夜精品精品免费| 欧美日韩精品中文字幕| 蜜臀va亚洲va欧美va天堂| 国产精品日本欧美一区二区三区| 欧美成人免费视频| 国产日韩欧美二区| 亚洲最新视频在线| 亚洲欧洲日产国产综合网| 午夜精品剧场| 亚洲欧美久久久久一区二区三区| 免费国产一区二区| 久久香蕉国产线看观看网| 国产精品成人一区二区| 亚洲麻豆视频| 一区二区精品在线| 欧美激情中文不卡| 欧美成人免费在线观看| 国外成人免费视频| 午夜精品久久久久久久白皮肤| 亚洲一区三区视频在线观看| 欧美精品一区视频| 亚洲电影免费在线观看| 在线成人亚洲| 久久精品在线播放| 久久影院亚洲| 亚洲国产欧美一区| 久久久久国产一区二区三区| 久久av一区二区三区亚洲| 国产精品一区二区男女羞羞无遮挡| 99精品国产一区二区青青牛奶 | 欧美日韩一二区| 亚洲美女在线观看| 99伊人成综合| 国产精品av免费在线观看| 日韩一级大片| 亚洲尤物在线| 国产日韩精品久久| 久久精品盗摄| 欧美成人日本| 99热这里只有成人精品国产| 欧美日本高清| 亚洲视频第一页| 香蕉成人伊视频在线观看| 国产精品一级二级三级| 久久av一区| 欧美激情一区二区三区成人| 一区二区三区精品视频| 国产精品扒开腿做爽爽爽视频| 亚洲天堂成人在线观看| 久久久噜噜噜久噜久久| 影院欧美亚洲| 欧美麻豆久久久久久中文| 一区二区三区高清视频在线观看 | 激情久久五月| 免费国产自线拍一欧美视频| 亚洲精品资源美女情侣酒店| 亚洲免费视频一区二区| 国产亚洲人成网站在线观看| 欧美 亚欧 日韩视频在线| 在线视频中文亚洲| 久久综合网hezyo| aa级大片欧美三级| 国产日韩欧美在线一区| 久久性色av| 亚洲一区精品视频| 欧美国产视频在线观看| 亚洲主播在线观看| 亚洲激情二区| 国产精品一区二区久久久久| 欧美1区免费| 性做久久久久久久久| 91久久久亚洲精品| 久久精品夜色噜噜亚洲aⅴ| 亚洲精品欧美专区| 国产亚洲欧美在线| 欧美日韩中文在线观看| 久久婷婷国产综合精品青草 | 免费成人在线观看视频| 亚洲一级在线观看| 亚洲国产另类久久精品| 国产乱人伦精品一区二区| 免费欧美网站| 久久国产精品网站| 亚洲午夜在线视频| 亚洲黑丝在线| 久久综合久久88| 欧美在线播放一区| 正在播放亚洲一区| 亚洲美女视频网| 在线日韩中文| 黑人一区二区| 国产欧美视频一区二区| 欧美午夜久久久| 亚洲精品欧美激情| 国产精品一区二区男女羞羞无遮挡| 欧美成人国产一区二区| 久久av在线看| 午夜一区二区三区不卡视频| 亚洲桃花岛网站| 夜夜嗨av一区二区三区四区| 亚洲国产综合在线看不卡| 另类春色校园亚洲| 美女露胸一区二区三区| 玖玖玖国产精品| 久久久久久亚洲综合影院红桃| 欧美在线视频在线播放完整版免费观看 | 99在线精品视频| 日韩一二三区视频| av不卡在线| 亚洲视频免费看| 亚洲天堂第二页| 午夜免费电影一区在线观看| 亚洲一区二区在线免费观看| 亚洲桃色在线一区| 午夜视频久久久久久| 欧美在线视频不卡| 久久综合伊人77777麻豆| 老牛嫩草一区二区三区日本| 欧美a级大片| 欧美日本国产一区| 国产精品高潮呻吟| 国产一区二区三区日韩| 在线电影国产精品| 日韩一二三区视频| 亚洲午夜免费视频| 久久se精品一区二区| 久久久人成影片一区二区三区| 久久一区二区三区四区五区| 欧美成人午夜激情在线| 亚洲激情亚洲| 在线一区亚洲| 久久精品系列| 欧美—级a级欧美特级ar全黄| 欧美色精品在线视频| 国产欧美一区二区三区在线看蜜臀| 国内欧美视频一区二区| 亚洲日韩成人| 午夜精品福利一区二区三区av | 在线亚洲欧美视频| 午夜视黄欧洲亚洲| 欧美v亚洲v综合ⅴ国产v| 亚洲精品一级| 久久精品人人爽| 欧美日韩高清不卡| 激情久久综艺| 亚洲一区尤物| 免费看成人av| 亚洲一区二区动漫| 欧美国产在线观看| 国产香蕉久久精品综合网| 亚洲精品久久嫩草网站秘色| 欧美一区精品| 亚洲理论在线| 久久一日本道色综合久久| 国产精品成人av性教育| 亚洲电影欧美电影有声小说| 午夜精品久久久久久久久| 亚洲成色777777在线观看影院| 亚洲综合色在线| 欧美日韩精品二区| 91久久精品国产91性色| 欧美一区二区视频在线观看2020| 亚洲激情网站免费观看| 久久综合狠狠综合久久综合88| 国产精品你懂的| 亚洲一区成人|