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