投影矩陣詳解

2021-05-04 08:24:13 字數 2985 閱讀 7155

視錐就是場景中的乙個三維空間,它的位置由視口的攝像機來決定。這個空間的形狀決定了攝像機空間中的模型將被如何投影到螢幕上。透視投影是最常用的一種投影型別,使用這種投影,會使近處的物件看起來比遠處的大一些。對於透視投影,視錐可以被初始化成金字塔形,將攝像機放在頂端。這個金字塔再經過前、後兩個剪下面的分割,位於這兩個面之間的部分就是視錐。只有位於視錐內的物件才可見。

視錐由凹視野(

在這些公式中,zn表示鄰近的剪下面的位置,變數vw

和vh表示視口的高和寬。這兩個引數與

d3dviewport2

結構中的

dwwidth

和dwheight

成員相關。

不管你使用那個公式,將

同世界和視變換一樣,可以呼叫

下面的d3dmatrix projectionmatrix(const float near_plane,// distance to near clipping plane

const float far_plane,// distance to far clipping plane

const float fov_horiz,// horizontal field of view angle, in radians

const float fov_vert)// vertical field of view angle, in radians

// end of projectionmatrix()

一旦建立完了矩陣,你需要呼叫

乙個頂點經過世界、觀察和投影變換之後,

下圖展示了乙個不適合的投影矩陣,和乙個經過縮放的適合的矩陣:

在前面的矩陣中,所有的變數都被假定為非零。有關霧化的內容見「目相關對基於 z

的深度」。有關基於

w的深度緩衝見「什麼是深度緩衝?」

注:direct3d在基於w的深度運算時使用當前設定的投影矩陣。因此,程式必須設定乙個適合的矩陣來的導向要的基於w的特性,即使它們沒有使用direct3d變換管道。

4.4

乙個w-friendly

投影矩陣

direct3d

立即模式可以利用這個頂點的

w成分執行霧化效果,並在深度緩衝中執行基於深度的運算。這樣的運算需要投影矩陣將

w規範化等價於世界空間的

z。簡而言之,如果你的投影矩陣的

(3,4)

係數不是

1,那麼你就必須用

(3,4)

係數的倒數對所有的係數進行縮放。如果沒有提供乙個適當的矩陣,那麼霧化效果和深度緩衝就不能得到正確運用。(「什麼是投影矩陣?」中提供的矩陣是適合於)基於

w的運算的。)

idirect3ddevice3::settransform

方法來設定它,同時將第乙個引數設定為

d3dtransformstate_projection

。詳細內容見「設定變換」。

4.3

設定投影矩陣

projectionmatrix

例程函式又四個輸入引數,它們用來設定前後剪下面,和視野的水平與垂直角度。視野角度應該比π弧度(

180度)小。

zn值盡量設的大一些是很重要的,因為當

z值很接近時,大多數情況下是難以分辨的,由乙個取巧的方法,就是在進行深度比較時使用16位

z-buffer

。direct3d

中,投影矩陣的第

(3,4)

元素不能為負數。

idirect3ddevice3::settransform

方法來設定透視變換,詳細內容見「設定變換」。

zn是臨近剪下面的

z值。變數

w

h

q

的意義如下(注意:

fovw

fovh

表示視口的水平和垂直視野,用弧度標示):x-與

y-方向的限制是-1和

1。z-方向的限制是前表面為

0,後表面為1。

field-of-view

),也沒有考慮到物件的

z-值可能會相同,從而使深度比較變得困難。下面的矩陣討論了這一問題,並且調整頂點來說明視口的高寬比例:

(0, 0, -d)

,那麼它就要將向量沿

z-軸平移

-d的距離,如上面右圖所示:

d是從攝像機到空間原點的距離,這個空間是在集合管道的最末端經過視變換得到的空間。要了解變數

d如何被用來建立投影矩陣,請看「什麼是投影變換?」部分。

4.2

什麼是投影矩陣?

d。開始定義透視投影的矩陣時,可以象下面左圖這樣來使用變數

d

fov-field of view

)和前後剪下面的位置來進行定義:視錐就是場景中的乙個三維空間,它的位置由視口的攝像機來決定。這個空間的形狀決定了攝像機空間中的模型將被如何投影到螢幕上。透視投影是最常用的一種投影型別,使用這種投影,會使近處的物件看起來比遠處的大一些。對於透視投影,

投影矩陣備忘

投影矩陣 project matrix 本意是將不規則的檢視體 view volume 變換成乙個單位立方體,但投射到螢幕時,z被丟棄了,所以造成了2d投影的假象.注意這是錯覺,實際概念應該是投射到單位立方體空間,是空間投射的概念.需要注意的是,opengl最終投射到單位立方體 1,1,1 1,1,...

投影矩陣推導

投影變換是計算機圖形學的基礎,理解並推導投影矩陣也是很有必要的。正交投影比較簡單,沒有透視失真效果 近大遠小 而透視投影比較符合人類的眼睛感知,平行線在遠處會相交於一點。投影是通過乙個4x4的矩陣來完成的,將視錐對映成標準觀察體 齊次裁剪空間 opengl採用的是右手座標系,z軸朝螢幕向外,因此觀察...

投影矩陣介紹

一般我們是將相機模型簡化成針孔相機模型,那麼相平面與相機座標系之間的關係為 通常為了方便,會把相平面放在小孔與目標點之間。下面就介紹下相平面投影的三種不同方法。通過相似三角形 下圖兩個虛線三角形 可以得到下列關係 展開就是 這裡x h等為齊次座標系座標,x等為相機座標系點,x等則為相平面上的透視投影...