程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> SharpGL學習筆記(七) OpenGL的變換總結,sharpgl學習筆記

SharpGL學習筆記(七) OpenGL的變換總結,sharpgl學習筆記

編輯:C#入門知識

SharpGL學習筆記(七) OpenGL的變換總結,sharpgl學習筆記


筆者接觸OpenGL最大的困難是: 經常調試一份代碼時, 屏幕漆黑一片, 也不知道結果對不對,不知道如何是好!

這其實就是關於OpenGL"變換"的基礎概念沒有掌握好, 以至於對"將三維體正確的顯示在屏幕上指定位置"這樣的操作都無法完成.

 

OpenGL變換包括計算機圖形學中最基本的三維變換,即幾何變換、投影變換、裁剪變換、視口變換,以及針對OpenGL的特殊變換概念理解和用法,如相機模擬、矩陣堆棧等,這些基礎是開始真正走進三維世界無法繞過的基礎.

所以筆者在前面花了5篇的篇幅詳細講解了這些基礎概念.

 

SharpGL學習筆記(二) 模型變換(幾何變換)

SharpGL學習筆記(三) 投影變換和視點變換

SharpGL學習筆記(四) 正射投影

SharpGL學習筆記(五) 視口變換

SharpGL學習筆記(六) 裁剪變換

 

但是這些概念是零散的, 你可能感覺在實際應用中無法把它們有機的串聯起來吧? 本節就是想把這些基礎知識點按照應用時的邏輯關系理清楚, 並且要徹底搞清楚這些功能之間的關系.

 

我們拿日常使用相機的例子打個比方:

實際上,從三維空間到二維平面,就如同用相機拍照一樣,通常都要經歷以下幾個步驟 (括號內表示的是相應的圖形學概念):
第一步,將相機置於三角架上,讓它對准三維景物(視點變換,Viewing Transformation)。
第二步,將三維物體放在適當的位置(模型變換(幾何變換),Modeling Transformation)。
第三步,選擇相機鏡頭並調焦,使三維物體投影在二維膠片上(投影變換,Projection Transformation)。
第四步,決定二維像片的大小(視口變換,Viewport Transformation)。
這樣,一個三維空間裡的物體就可以用相應的二維平面物體表示了,也就能在二維的電腦屏幕上正確顯示了。

下面的示意圖,表達了上面的意思。

 

三維圖形世界中的還有幾個特殊坐標系的概念。
顯示三維圖形的這個坐標系稱為世界坐標系
要在圖形顯示器上顯示,這就要在圖形顯示器屏幕上定義一個二維直角坐標系,這個坐標系稱為屏幕坐標系。這個坐標系坐標軸的方向通常取成平行於屏幕的邊緣,坐標原點取在左上角,長度單位常取成一個象素的長度,大小可以是整型數。
為了使三維休能在二維顯示器上顯示出來,必須要通過投影進行降維處理。投影的方法有兩種,即正射投影和透視投影
正射投影和透視投影定義一個三維視景體(Viewing Volume)。正射投影時一般是一個長方體的視景體,透視投影時一般是一個稜台似的視景體。只有視景體內的物體能被投影在顯示平面上,其他部分則不能。

在繪畫3D圖形的屏幕窗口內可以定義一個矩形,稱為視口Viewport),視景體投影後的圖形就在視口內顯示,三維圖形根據視口變換後, 即可以顯示滿屏,也可以只顯示一部分。
為了適應物理設備坐標和視口所在坐標的差別,還要作一適應物理坐標的變換。這個坐標系稱為物理設備坐標系

根據上面所述,三維圖形的顯示流程應如下圖所示。

 

上面所有這些步驟,在OpenGL中,需要好幾條語句才能完成。但在3dsmax中,只是使用變換工具,攝像機工具, 這兩個工具就可以全部完成了。

其中“移動,旋轉,縮放”工具如果對三維模型做操作就是模型變換

調節攝像機位置與目標點,還有旋轉攝像機就是在做 視點變換

頂視圖,前視圖,左視圖, 是三個 正射投影視圖, 而Camera01視圖是一個透視投影視圖, 並且這三個視圖加上Camera01視圖一起是四個視口

攝像機工具中的一個功能選項“手工剪切”, 就是裁剪變換

頂,前,左,Camera01四個視圖中的橫豎黑線就是世界坐標系的XY軸, 而屏幕坐標系的原點是在每個視圖左上角,水平方向是X,垂直方向是Y。

 

 

如果仍然有疑惑,可以回復本貼,筆者再加以補充。

 原創文章 : http://www.cnblogs.com/hackpig/

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved