筆者接觸OpenGL最大的困難是: 常常調試一份代碼時, 屏幕漆黑一片, 也不知道結果對不對,不知道如何是好!html
這其實就是關於OpenGL"變換"的基礎概念沒有掌握好, 以致於對"將三維體正確的顯示在屏幕上指定位置"這樣的操做都沒法完成.工具
OpenGL變換包括計算機圖形學中最基本的三維變換,即幾何變換、投影變換、裁剪變換、視口變換,以及針對OpenGL的特殊變換概念理解和用法,如相機模擬、矩陣堆棧等,這些基礎是開始真正走進三維世界沒法繞過的基礎.學習
因此筆者在前面花了5篇的篇幅詳細講解了這些基礎概念.spa
可是這些概念是零散的, 你可能感受在實際應用中沒法把它們有機的串聯起來吧? 本節就是想把這些基礎知識點按照應用時的邏輯關係理清楚, 而且要完全搞清楚這些功能之間的關係.get
咱們拿平常使用相機的例子打個比方:
實際上,從三維空間到二維平面,就如同用相機拍照同樣,一般都要經歷如下幾個步驟 (括號內表示的是相應的圖形學概念):
第一步,將相機置於三角架上,讓它對準三維景物(視點變換,Viewing Transformation)。
第二步,將三維物體放在適當的位置(模型變換(幾何變換),Modeling Transformation)。
第三步,選擇相機鏡頭並調焦,使三維物體投影在二維膠片上(投影變換,Projection Transformation)。
第四步,決定二維像片的大小(視口變換,Viewport Transformation)。
這樣,一個三維空間裏的物體就能夠用相應的二維平面物體表示了,也就能在二維的電腦屏幕上正確顯示了。
下面的示意圖,表達了上面的意思。
三維圖形世界中的還有幾個特殊座標系的概念。
顯示三維圖形的這個座標系稱爲世界座標系。
要在圖形顯示器上顯示,這就要在圖形顯示器屏幕上定義一個二維直角座標系,這個座標系稱爲屏幕座標系。這個座標系座標軸的方向一般取成平行於屏幕的邊緣,座標原點取在左上角,長度單位常取成一個象素的長度,大小能夠是整型數。
爲了使三維休能在二維顯示器上顯示出來,必需要經過投影進行降維處理。投影的方法有兩種,即正射投影和透視投影。
正射投影和透視投影定義一個三維視景體(Viewing Volume)。正射投影時通常是一個長方體的視景體,透視投影時通常是一個棱臺似的視景體。只有視景體內的物體能被投影在顯示平面上,其餘部分則不能。
在繪畫3D圖形的屏幕窗口內能夠定義一個矩形,稱爲視口(Viewport),視景體投影后的圖形就在視口內顯示,三維圖形根據視口變換後, 便可以顯示滿屏,也能夠只顯示一部分。
爲了適應物理設備座標和視口所在座標的差異,還要做一適應物理座標的變換。這個座標系稱爲物理設備座標系。
根據上面所述,三維圖形的顯示流程應以下圖所示。
上面全部這些步驟,在OpenGL中,須要好幾條語句才能完成。但在3dsmax中,只是使用變換工具,攝像機工具, 這兩個工具就能夠所有完成了。
其中「移動,旋轉,縮放」工具若是對三維模型作操做就是模型變換
調節攝像機位置與目標點,還有旋轉攝像機就是在作 視點變換
頂視圖,前視圖,左視圖, 是三個 正射投影視圖, 而Camera01視圖是一個透視投影視圖, 而且這三個視圖加上Camera01視圖一塊兒是四個視口
攝像機工具中的一個功能選項「手工剪切」, 就是裁剪變換
頂,前,左,Camera01四個視圖中的橫豎黑線就是世界座標系的XY軸, 而屏幕座標系的原點是在每一個視圖左上角,水平方向是X,垂直方向是Y。
若是仍然有疑惑,能夠回覆本貼,筆者再加以補充。
原創文章,出自"博客園, 豬悟能'S博客" : http://www.cnblogs.com/hackpig/