由參數l,r,b,t,n,f定義的透視投影矩陣的推導困惑了我差點兒相同一個多禮拜。這幾天差點兒是每天都在思考這個問題。昨天晚上3點多鐘我忽然醒了,而後我又開始想這個問題,結果最終讓我給想通了,因而我趕忙起牀把這個思路記在了草稿紙上,還專門照了張照片做證。
爲了解決問題,前幾天我專門發了兩篇帖子求答案,結果知網上的竟然沉掉了。而在csdn上也沒有獲得答案(質疑有關透視投影矩陣的推導)。markdown
幸好我本身仍是攻克了這個問題。
如下推導的是OpenGL中的透視投影矩陣。
已經知道由參數fovy,aspect,n,f定義的透視投影矩陣爲:(有關這塊的推導可見《3d graphics for game programming》 2.4.3 derivation of projection matrix,講得很具體)
那麼再看還有一種投影參數l,r,b,t,n,f,上面矩陣中:
因爲參數l,r是相應視見空間中x軸的座標,b,t相應視見空間中y軸的座標,假設l=-r並且b=-t。那麼由這樣的參數定義的透視投影矩陣就是:
而官方的透視投影矩陣是:
實際上這個矩陣是由兩步轉換完畢的,第一步是進行矩陣
post
如下我來解釋爲何進行了平移操做。
來張示意圖:
這個是視見空間中的示意圖。因爲存在l≠-r或b≠-t的狀況。因此這裏我有益沒把近裁剪平面中心畫在z軸上。atom
示意圖上由紅線繪製的立方體纔是由l,r,b,t,n,f參數定義的視錐體,當中遠裁剪平面上的四個點分別相應原點eye通過近裁剪平面上四個點的延長線與z=-f平面的交點,注意這個視錐體是不規則的!spa
而後圖中的標註l’, r’是近裁剪平面點(l,b,-n)和點(r,b,-n)x軸上的份量在