你可以認為投影變換就是控制錄影機内部的一種方式。他可以類推為為錄影機選擇一個漏字闆。它是三種變換中最難懂的。本文隻讨論以下的一些内容。
典型的投影變換就是縮放和透視投影。投影就變換把視椎轉化為一個立方體。近大遠小。這就是把透視應用于場景。
在視椎體中,錄影機與變換空間原點的距離被定義為D,是以投景矩陣看起來像這樣:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicGcq5SMxQjN2cTOwMTMtQjMykTNwQDMwEDMyAjNxAjMtUDM4QzNx8CXyAjNxAjMvwVNwgDN3EzLcd2bsJ2Lc12bj5ycn9Gbi52YuUTMwIzcldWYtl2Lc9CX6MHc0RHaiojIsJye.jpg)
觀察矩陣把錄影機通過把z軸-D 平移到原點。平移矩陣如下
他們兩個矩陣相乘得到以下矩陣
透視轉換把視椎體轉化為新的一個坐标空間。注意視堆平截變為一個立方體,原點炎右上角移動到場景的中間,如圖所示
在透視變換中,x和y方向的範圍是-1到1。z方向的範圍是0(在平面前面),1(在平面後面)
這人矩陣平移和縮放模型是根據錄影機與截面的距離,但是目前 沒有考慮到視角大小 ,并且它為遠端物體産生的z值可能幾乎相同,這使嘗試比較變的困難。以下矩陣解決了問題,并根據 視區的縱橫比調整頂點,這使它成為透視投影的一個很好的選擇。
在這個矩陣中,Zn是近裁剪平面的z值。變量w,h和Q有以下含義。注意fovw和fovh表示視區在水準和垂直方向上的視角,以弧度為機關
對應用程式而言,使用視角的角度定義x和y的比例系數可能不如使用視區在水準和垂直方向上的大小(在錄影機空間中)友善。可以用數學推導,得出下面兩個使用視區大小計算w和h的公式,它們與前面的公式是等價的。
在這兩個公式中,Zn表示近裁剪平面的位置,Vw和Vh變量表示視區在錄影機空間的寬和高。
對于C++應用程式而言,這兩個大小直接對應于D3DVIEWPORT9結構的Width和Height成員。(譯注:雖然直接對應,但是不等價的,因為Vw和Vh位于錄影機空間,而Width和Height位于螢幕空間)
無論決定使用什麼公式,非常重要的一點是要盡可能将Zn設得大,因為接近錄影機的z值變化不大。這使得用16位z緩存的深度比較變得有點複雜。
同世界變換和觀察變換一樣,應用程式調用IDirect3DDevice9::SetTransform方法設定投影矩陣。