歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

OpenGL中投影矩陣的推導

  本文主要是對OpenGL紅寶書(第八版)第五章中給出的透視投影矩陣和正交投影矩陣做一個簡單推導。投影矩陣的目的是:原始點P(x,y,z)對應後投影點P'(x',y',z')滿足x',y',z'∈[-1,1]。

OpenGL編程指南(原書第八版2013年最新)英文PDF 下載見 http://www.linuxidc.com/Linux/2015-08/122230.htm

OpenGL編程指南(原書第7版)中文掃描版PDF 下載見  http://www.linuxidc.com/Linux/2012-08/67925.htm

  一、透視投影                                                                                                                   

  下圖為透視投影的視錐體:

注:上圖中忘了標注了,遠裁剪平面距離原點距離為f,近裁剪平面距離原點距離為n。

設P(x0, y0, z0),我們分別求各個坐標在投影後的值。將P點投影到近平面上,首先看x方向上的投影,沿著過P點,且平行於xoz平面切一刀,有如下圖:

假設投影後的x坐標為:x_n(在近裁剪平面的投影),由相似三角形的性質,有

,可以得到:

同理,有

這樣其實實現了透視投影,近大遠小的效果,因為z0越大,則x1,y1就越小。為了將這兩個值轉換到[-1,1]區間內,設l和r分別為近裁剪平面左、右邊框的x坐標,即l=-w/2,r=w/2(如圖所示,w為上下邊框的長度),為了使任何投影到近裁剪平面的點都在區間內,轉換後,[l',r']∈[0,1],其中l',r'分別為l和r轉換後的值。因為是線性轉換,可領x'=kx+b,則下式成立:

求得,

再根據之前的結果,可以得到歸一化後的x坐標為:

同理,設t和p分別為近裁剪平面上下邊框的y坐標,則:

投影後的坐標都有一個共同因子——[-1/z0],正好對應變換後w=-z0。

接下來,我們看z要滿足什麼要求。為簡化討論,根據以上結論,我們假設透視變換有下述形式:

於是:

最後的變換矩陣如下:

OpenGL超級寶典 第4版 中文版PDF+英文版+源代碼 見  http://www.linuxidc.com/Linux/2013-10/91413.htm

OpenGL 渲染篇 http://www.linuxidc.com/Linux/2011-10/45756.htm

Ubuntu 13.04 安裝 OpenGL http://www.linuxidc.com/Linux/2013-05/84815.htm

OpenGL三維球體數據生成與繪制【附源碼】 http://www.linuxidc.com/Linux/2013-04/83235.htm

Ubuntu下OpenGL編程基礎解析 http://www.linuxidc.com/Linux/2013-03/81675.htm

如何在Ubuntu使用eclipse for c++配置OpenGL http://www.linuxidc.com/Linux/2012-11/74191.htm 

更多《OpenGL超級寶典學習筆記》相關知識 見 http://www.linuxidc.com/search.aspx?where=nkey&keyword=34581

Copyright © Linux教程網 All Rights Reserved