透視投影矩陣推導


  計算機圖形學中,建模自小孔成像原理的透視攝像機是常用的攝像機模型。然而,由於光柵化渲染中的幾何變換多基於四階方陣與齊次坐標表示的向量的乘法,而四階方陣只能表示仿射變換,無法實現透視攝像機“近大遠小”的特性(仿射變換維持平行線相互平行,而“近大遠小”不具有該性質),因此透視攝像機模型的實現要多費一番功夫。

1. 基本原理

  小孔成像是大多數人所熟知的最簡單的成像原理之一,而常用的透視攝像機就是把小孔和屏幕(成像平面)的順序交換,維持相似關系不變,因而這一模型達到了擬真的效果而被廣泛應用。

clip_image002clip_image004

小孔成像與簡單的透視攝像機模型

  透視攝像機模型用在光柵化渲染管線的結果,就是透視投影過程。考慮簡圖——

clip_image006

  圖中從e點(原點)發出的一條射線上所有在view plane之后的點都被投影到view plane與該射線的交點。由相似關系顯然有

clip_image008

這就得到了所需的映射關系:

clip_image010

  顯然clip_image012並非仿射變換,也就不能直接借助四階方陣乘法來實現。這時齊次坐標表示的另一個作用就表現出來了,設齊次坐標clip_image014表示點clip_image016,定義全體clip_image018的齊次坐標上的等價關系:clip_image020當且僅當clip_image022,則有clip_image024,該式的右邊正是常用的齊次坐標中點的表示方法(clip_image026)。這樣一來,這一等價關系為我們提供了“除法”的能力,也擴充了仿射變換的能力。注意到,仿射變換可以將clip_image028clip_image030clip_image032中的任意一個分量設置為clip_image034,而該方法允許這樣的變換形式——

clip_image036

注意到透視投影需要的變換是(假設viewing transform后攝像機面向+z方向)

clip_image038

而要將clip_image040映射為clip_image042是很容易的,只需要矩陣乘法——

clip_image044

然后使clip_image042[1]化為clip_image046即可,這一過程稱為齊次化。

  這就是齊次坐標投影的基本原理。

2. 完整的投影矩陣推導

  現實中使用的投影矩陣因為考慮了攝像機視截體,形式更加復雜。考慮下圖中的透視投影變換——

clip_image050

  顯然該變換把近平面(near plane)區域投影到xOy平面上的單位正方形。在這里可以把該變換過程拆分成三個子過程:完成“透視”投影、把near plane上的視窗變換為單位正方形、把near planez坐標變換為0。第一個過程可以利用矩陣乘法:

clip_image052

其中n與f分別是視截體近平面與遠平面與原點的距離。clip_image054的第三行有些特殊。它的作用是保持被投影到near plane上同一點的各點間的深度關系不變(這樣才能在稍后做depth test)。此外,由於clip_image056(齊次化過程),位於near plane上的點的clip_image028[1]clip_image030[1]坐標都不會變化。

   然后把near plane上的有效區域變換為單位正方形。假設near plane上有效區域的寬度為clip_image058,高度為clip_image060,則一個簡單的scaling即可解決問題——

clip_image062

  再把near plane挪到xOy平面上,一個平移就能解決問題;另外深度的變化范圍應該被固定在0~1之間。注意到

clip_image064

故只需要令

clip_image066

即可得

clip_image068

  最后是一直沒有進行的齊次化過程,即

clip_image070

 

 

 

 

 

 

這就求得了所需的透視投影變換矩陣——

clip_image072

驗證一下:

clip_image074

滿足透視投影的要求。使用時,只需要將clip_image076乘上待投影的坐標,再齊次化即可。

3. 其他

  在一些別的條件/要求下,透視投影矩陣可能具有與此稍微不同的形式。譬如,OpenGL采用右手系,通常其viewing transform把坐標變換到camera space,其中camera是指向-z的(本例使用的是+z);此外,OpenGL中的z值被映射到-1~+1(本例使用的是0~1),但是,總體的推導思路是相同的。可以證明

clip_image078

是一個滿足這些要求的投影矩陣(這里,l、r、t、b是視截體近平面的左、右、上、下坐標,本例中沒有考慮這種不對稱的情況)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM