OpenGL基礎圖形程式設計(三)WindowsNT下的OpenGL

heyuchang666發表於2016-04-06
三、WindowsNT下的OpenGL

3.1、Windows NT下的OpenGL函式
  如前面的章節所述,Windows NT下的OpenGL同樣包含100多個庫函式,這些函式都按一定的格式來命名,即每個函式都以gl開頭。Windows NT下的OpenGL除了具有基本的OpenGL函式外,還支援其他四類函式:
相應函式 具體說明
OpenGL實用庫 43個函式,每個函式以glu開頭。
OpenGL輔助庫 31個函式,每個函式以aux開頭。
Windows專用庫函式(WGL 6個函式,每個函式以wgl開頭。
Win32 API函式 5個函式,函式前面沒有專用字首。

  在OpenGL中有115個核心函式,這些函式是最基本的,它們可以在任何OpenGL的工作平臺上應用。這些函式用於建立各種各樣的形體,產生光照效果,進行反走樣以及進行紋理對映,進行投影變換等等。由於這些核心函式有許多種形式並能夠接受不同型別的引數,實際上這些函式可以派生出300 多個函式。
  OpenGL的實用函式是比OpenGL核心函式更高一層的函式,這些函式是通過呼叫核心函式來起作用的。這些函式提供了十分簡單的用法,從而減輕了開發者的程式設計負擔。OpenGL的實用函式包括紋理對映、座標變換、多邊形分化、繪製一些如橢球、圓柱、茶壺等簡單多邊形實體(本指南將詳細講述這些函式的具體用法)等。這部分函式象核心函式一樣在任何OpenGL平臺都可以應用。
  OpenGL的輔助庫是一些特殊的函式,這些函式本來是用於初學者做簡單的練習之用,因此這些函式不能在所有的OpenGL平臺上使用,在Windows NT環境下可以使用這些函式。這些函式使用簡單,它們可以用於視窗管理、輸入輸出處理以及繪製一些簡單的三維形體。為了使OpenGL的應用程式具有良好的移植性,在使用OpenGL輔助庫的時候應謹慎。

  6個WGL函式是用於連線OpenGL與Windows NT的,這些函式用於在Windows NT環境下的OpenGL視窗能夠進行渲染著色,在視窗內繪製點陣圖字型以及把文字放在視窗的某一位置等。這些函式把Windows與OpenGL揉合在一起。最後的5個Win32函式用於處理象素儲存格式和雙緩衝區,顯然這些函式僅僅能夠用於Win32系統而不能用於其它OpenGL平臺。


3.2、OpenGL基本功能
  OpenGL能夠對整個三維模型進行渲染著色,從而繪製出與客觀世界十分類似的三維景象。另外OpenGL還可以進行三維互動、動作模擬等。具體的功能主要有以下這些內容。
  • 模型繪製
    OpenGL能夠繪製點、線和多邊形。應用這些基本的形體,我們可以構造出幾乎所有的三維模型。OpenGL通常用模型的多邊形的頂點來描述三維模型。如何通過多邊形及其頂點來描述三維模型,在指南的在後續章節會有詳細的介紹。
  • 模型觀察
    在建立了三維景物模型後,就需要用OpenGL描述如何觀察所建立的三維模型。觀察三維模型是通過一系列的座標變換進行的。模型的座標變換在使觀察者能夠在視點位置觀察與視點相適應的三維模型景觀。在整個三維模型的觀察過程中,投影變換的型別決定觀察三維模型的觀察方式,不同的投影變換得到的三維模型的景象也是不同的。最後的視窗變換則對模型的景象進行裁剪縮放,即決定整個三維模型在螢幕上的圖象。

  • 顏色模式的指定
    OpenGL 應用了一些專門的函式來指定三維模型的顏色。程式設計師可以選擇二個顏色模式,即RGBA模式和顏色表模式。在RGBA模式中,顏色直接由RGB值來指定;在顏色表模式中,顏色值則由顏色表中的一個顏色索引值來指定。程式設計師還可以選擇平面著色和光滑著色二種著色方式對整個三維景觀進行著色。
  • 光照應用
    用OpenGL繪製的三維模型必須加上光照才能更加與客觀物體相似。OpenGL提供了管理四種光(輻射光、環境光、鏡面光和漫反射光)的方法,另外還可以指定模型表面的反射特性。
  • 圖象效果增強
    OpenGL提供了一系列的增強三維景觀的圖象效果的函式,這些函式通過反走樣、混合和霧化來增強圖象的效果。反走樣用於改善圖象中線段圖形的鋸齒而更平滑,混合用於處理模型的半透明效果,霧使得影像從視點到遠處逐漸褪色,更接近於真實。
  • 點陣圖和圖象處理
    OpenGL還提供了專門對點陣圖和圖象進行操作的函式。
  • 紋理對映
    三維景物因缺少景物的具體細節而顯得不夠真實,為了更加逼真地表現三維景物,OpenGL提供了紋理對映的功能。OpenGL提供的一系列紋理對映函式使得開發者可以十分方便地把真實圖象貼到景物的多邊形上,從而可以在視窗內繪製逼真的三維景觀。
  • 實時動畫
    為了獲得平滑的動畫效果,需要先在記憶體中生成下一幅圖象,然後把已經生成的圖象從記憶體拷貝到螢幕上,這就是OpenGL的雙快取技術(double buffer)。OpenGL提供了雙快取技術的一系列函式。
  • 互動技術
    目前有許多圖形應用需要人機互動,OpenGL提供了方便的三維圖形人機互動介面,使用者可以選擇修改三維景觀中的物體。
3.3、Windows NT下OpenGL的結構
  OpenGL的作用機制是客戶(client)/伺服器(sever)機制,即客戶(用OpenGL繪製景物的應用程式)向伺服器(即OpenGL核心)釋出OpenGL命令,伺服器則解釋這些命令。大多數情況下,客戶和伺服器在同一機器上執行。正是OpenGL的這種客戶/伺服器機制,OpenGL可以十分方便地在網路環境下使用。因此Windows NT下的OpenGL是網路透明的。正象Windows的圖形裝置介面(GDI)把圖形函式庫封裝在一個動態連結庫(Windows NT下的GDI32.DLL)內一樣,OpenGL圖形庫也被封裝在一個動態連結庫內(OPENGL32.DLL)。受客戶應用程式呼叫的OpenGL函式都先在OPENGL32.DLL中處理,然後傳給伺服器WINSRV.DLL。OpenGL的命令再次得到處理並且直接傳給Win32的裝置驅動介面(Device Drive Interface,DDI),這樣就把經過處理的圖形命令送給視訊顯示驅動程式。下圖簡要說明這個過程:
 
圖3-1 OpenGL在Windows NT下執行機制

  在三維圖形加速卡的GLINT圖形加速晶片的加速支援下,二個附加的驅動程式被加入這個過程中。一個OpenGL可安裝客戶驅動程式(Installable Client Driver,ICD)被加在客戶這一邊,一個硬體指定DDI(Hardware-specific DDI)被加在伺服器這邊,這個驅動程式與Wind32 DDI是同一級別的。

圖3-2 在三維圖形加速下OpenGL執行機制

相關文章