1. 程式人生 > >opengl投影透視矩陣的個人總結

opengl投影透視矩陣的個人總結

預備知識

1.opengl的透視投影矩陣是把一個稜錐視見體轉化為規範化視見體的投影矩陣。所謂規範化視見體,就是由x=+-1, y=+-1, z=+-1圍成的視見體。

2.透視投影基礎:透視投影的數學原理是相似三角形。 視見體中的一個點(x,y,z)沿著向量它和原點的連線,投影到透視平面z = d上,投影所得到的點座標設為(xp,yp,d)。根據相似三角形原理,有xp/d = x /z,故xp = x/z*d。同理,yp = y/z*d。


3.齊次座標在透視投影當中的作用:我們知道,一個三維座標點的齊次座標形式是(x,y,z,w)。當w為1時,(x,y,z)即為點的三維座標,否則需要用w去除x,y,z。下面的投影矩陣把點(x,y,z,w)變成(x,y,z,z/d)。用z/d去除x,y,z,得到的結果是:

x = x/z*d

y = y/z*d

z = z/z*d = d

推導

1.推導過程可參見這篇文章,寫的很清楚,也很容易理解。他是先推匯出新點和原來的點的數學關係,再根據這種關係構造矩陣。

2.我看的書《互動式計算機圖形學——基於OpenGL著色器的自頂向下方法》(第六版)則是先考慮投影平面x,y取值範圍在[-1,1]的情況,推出投影規範矩陣N,然後再拓展到一般情況(x,y取值範圍任意)。先通過一個錯切變換把投影平面變換為關於z軸對稱(即x,y的取值範圍關於0對稱),把這個變換所需要的矩陣記作H,再通過一個縮放變換S把投影平面的x,y取值範圍縮放到[-1,1]之間,最後把這三個矩陣合併起來,P = HSN即為所求。推導的過程比較囉嗦,不如第一種推導過程來的簡單。

最後得出的透視投影矩陣