版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、在上一篇文章中我們討論了透視投影變換的原理,分析了OpenGL所使用的透視投影矩陣的生成方法。正如我們所說,不同的圖形API因為左右手坐標系、行向量列向量矩陣以及變換范圍等等的不同導(dǎo)致了矩陣的差異,可以有幾十個不同的透視投影矩陣,但它們的原理大同小異。這次我們準備討論一下Direct3D(以下簡稱D3D)以及J2ME平臺上的JSR184(M3G)(以下簡稱M3G)的透視投影矩陣,主要出于以下幾個目的:(1) 我們在寫圖形引擎的時候需要采用不同的圖形API實現(xiàn),當前主要是OpenGL和D3D。雖然二者的推導(dǎo)極為相似,但D3D
2、的自身特點導(dǎo)致了一些地方仍然需要澄清。(2) DirectX SDK的手冊中有關(guān)于透視投影矩陣的一些說明,但并不詳細,甚至有一些錯誤,從而使初學(xué)者理解起來變得困難,而這正是本文寫作的目的。(3) M3G是J2ME平臺上的3D開發(fā)包,采用了OpenGL作為底層標準進行封裝。它的透視投影矩陣使用OpenGL的環(huán)境但又進行了簡化,值得一提。本文努力讓讀者清楚地了解D3D與M3G透視投影矩陣的原理,從而能夠知道它與OpenGL的一些差別,為構(gòu)建跨API的圖形引
3、擎打好基礎(chǔ)。需要指出的一點是為了完全理解本文的內(nèi)容,請讀者先理解上一篇文章深入探索透視投影變換的內(nèi)容,因為OpenGL和它們的透視投影矩陣的原理非常相似,因此這里不會像上一篇文章從基礎(chǔ)知識講起,而是對比它們的差異來推導(dǎo)變換矩陣。我們開始!OpenGL與D3D的基本差異前面提到,不同API的基本差異導(dǎo)致了最終變換矩陣的不同,而導(dǎo)致OpenGL和D3D的透視投影矩陣不同的原因有以下幾個:(1) OpenGL默認使用右手坐標系,而D3D 默認使用左手坐標系。(2)
4、60; OpenGL使用列向量矩陣乘法而D3D使用行向量矩陣乘法。(3) OpenGL的CVV的Z范圍是-1, 1,D3D的CVV的Z范圍是0, 1。 以上這些差異導(dǎo)致了最終OpenGL和D3D的透視投影矩陣的不同。D3D的透視投影矩陣推導(dǎo)我們先來看最最基本的透視關(guān)系圖(上一篇文章開始的時候使用的圖):這里我們考察的是xz平面上的關(guān)系,yz平面上的關(guān)系同理。這里o是相機位置。np是近裁剪平面,也是投影平面,N是它到相機的距離。fp是遠裁剪平面,F(xiàn)是它到相機的位置。p是需要投影的點,p是投
5、影之后的點。根據(jù)相似三角形定理,我們有則有注意到OpenGL使用右手坐標系,因此應(yīng)該使用-N(請參考上一篇文章的這一步),而D3D使用左手坐標系,因此使用N,這是二者的不同點之一。這樣,我們得到投影之后的點第三個信息點是變換之后的z在投影平面上的位置,也就是N,它已經(jīng)沒用了,我們把p寫成從而用第三個沒用信息點它來存儲z(如果讀者對這一點不太了解,請參考上一篇文章)。接下來我們求出a和b,從而在z方向上構(gòu)建CVV。請注意這里是OpenGL和D3D的另一個不同點,OpenGL的CVV的z范圍是-1, 1,而D3D的CVV的z范圍是0, 1。也就是說,D3D 中在近裁剪平面上的點投影之后的點會處于C
6、VV的z=0平面上,而在遠裁剪平面上的點投影之后的點會在CVV的z=1平面上。這樣我們的計算方程就是從而我們得到了透視投影矩陣的第一個版本即這個時候第三個分量變換到CVV情形了,CVV的z范圍是0,1。接下來根據(jù)上一篇文章所講到的,我們要把前兩個分量變成CVV情形,CVV的x和y范圍是-1, 1,如下圖所示:使用線性插值,我們有:這里left和right是投影平面的左右范圍,top和bottom是投影平面的上下范圍。xcvv和ycvv是我們需要算出的在CVV情形中的x和y,也就是我們要計算出的結(jié)果。但在算出它們之前,我們先把上面的式子寫成:這里有一個需要注意的地方,如果投影平面在x方向上居中,
7、則那么第一個式子就可以銷掉等號兩邊的1/2,寫成同理,如果投影平面在y方向上居中,則第二個式子可以寫成則我們現(xiàn)在分兩種情況討論:(1) 投影平面的中心和x-y平面的中心重合(在x和y方向上都居中)(2) 一般情況我們分別討論:(1)特殊情況方程這組是特殊情況,方程比較簡單,但也是使用頻率最高的方式(這是D3DXMatrixPerspectiveLH、D3DXMatrixPerspectiveRH、D3DXMatrixPerspectiveFovLH、D
8、3DXMatrixPerspectiveFovRH四個方法所使用的情況)。我們導(dǎo)出它:則我們反推出透視投影矩陣:其中而r-l和t-b可以分別看作是投影平面的寬w和高h。最后那個矩陣就是D3D的透視投影矩陣之一。另外呢,如果我們不知道right、left、top以及bottom這幾個參量,也可以根據(jù)視野(FOV Field Of View)參量來求得。下面是兩個平面的視野關(guān)系圖: 其中,兩個fov分別是在x-z以及y-z平面上的視野。如果只給了一個視野,也可以通過投影平面的寬高比計算出來:用一個視野算出w或者h,然后用寬高比算出h或者w。(2)一般情況的方程這組方程比較繁瑣
9、,但更具一般性(和OpenGL一般矩陣的推導(dǎo)一致,這也是D3DXMatrixPerspectiveOffCenterLH和D3DXMatrixPerspectiveOffCenterRH兩個方法所使用的情況)。我們導(dǎo)出它:我們繼續(xù)反推出透視投影矩陣:其中最后那個矩陣就是D3D的一般透視投影矩陣。好了,目前為止,我們已經(jīng)導(dǎo)出了D3D的兩個透視投影矩陣。下面我把上一篇導(dǎo)出的OpenGL的透視投影矩陣寫出來,大家可以拿它和剛剛導(dǎo)出的D3D的一般性透視投影矩陣做一個對比。如果仔細觀察,可以發(fā)現(xiàn)二者在元素的布局上是一個轉(zhuǎn)置的關(guān)系,這個就是由它們使用的左右手坐標系以及使用的行列矩陣的差異造成的。而另外在一
10、些元素的細節(jié)上也存在著差異,這是由于D3D的CVV的z范圍不同造成的。可見在原理相同的情況下,細微的環(huán)境差異可以造成非常大的變化,而這就是透視投影矩陣存在諸多不同版本的原因。一般情況的透視投影矩陣也可以使用視野方式來定義,方法和特殊情況相同。M3G的透視投影矩陣M3G是對OpenGL進行的一個封裝,它的透視投影變換矩陣被放到了類Camera里面。因為它封裝了OpenGL,因此環(huán)境和OpenGL相同:右手坐標系、列向量乘法、CVV范圍-1, 1。它唯一和OpenGL有些差異的地方就在于它只使用投影平面的中心和x-y平面的中心重合(在x和y方向上都居中)的情況(就是我們上面D3D的第一種特殊情況)。我們用OpenGL透視投影矩陣最終版本來說明(再次提醒,如果讀者對此感到迷惑,請參考第一篇文章):上面是OpenGL透視投影矩陣的最終版本,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度山西省高校教師資格證之高等教育法規(guī)考試題庫
- 國家自然基金簡介(1)-資助研究項目屬性(2)-資助研培訓(xùn)課件
- 2024年泥水工項目協(xié)議模板下載
- 2024年除雪作業(yè)協(xié)議細則
- 2024汽車購貸擔保協(xié)議樣本全文參閱
- 2024年辦公室裝修施工協(xié)議樣本
- 2024年斗毆雙方和解賠償協(xié)議樣式
- 中小學(xué)教師數(shù)據(jù)素養(yǎng)-江蘇師范大學(xué)中國大學(xué)mooc課后章節(jié)答案期末考試題庫2023年
- 崗位保密條款:2024勞動協(xié)議增補篇
- 2024年全職收銀員勞動協(xié)議范本
- 2022年北京海淀區(qū)初三(上)期中考化學(xué)試題及答案
- 消化內(nèi)鏡護士進修匯報
- 湘教版(2024新版)七年級上冊地理2.2《地球的運動》教案
- 人教版數(shù)學(xué)九年級上冊24.3.1《正多邊形和圓》說課稿
- 2024年全國鄉(xiāng)村醫(yī)生考試復(fù)習題庫及答案(共420題)
- 2024年家政服務(wù)員職業(yè)技能競賽理論考試題庫(含答案)
- NBT 47013.4-2015 承壓設(shè)備無損檢測 第4部分:磁粉檢測
- 專題03正比例函數(shù)和反比例函數(shù)(原卷版+解析)
- CTF信息安全競賽理論知識考試題庫大全-下(多選、判斷題)
- 女方放棄房產(chǎn)離婚協(xié)議書(2024版)
- 隋唐時期:繁榮與開放的時代 單元作業(yè)設(shè)計
評論
0/150
提交評論