opengl函式庫介紹

2021-05-22 03:28:09 字數 2734 閱讀 3802

開發基於opengl的應用程式,必須先了解opengl的庫函式。它採用c語言風格,提供大量的函式來進行圖形的處理和顯示。opengl庫函式的命名方式非常有規律。所有opengl函式採用了以下格式:

《庫字首》《根命令》《可選的引數個數》《可選的引數型別》

庫字首有gl、glu、aux、glut、wgl、glx、agl等等,分別表示該函式屬於opengl那個開發庫,從函式名後面中還可以看出需要多少個引數以及引數的型別。i代表int型,f代表float型,d代表double型,u代表無符號整型。例如glvertex3fv()表示了該函式屬於gl庫,引數是三個float型引數指標。我們用glvertex*()

來表示這一類函式。

opengl函式庫相關的api有核心庫(gl)、實用庫(glu)、輔助庫(aux)、實用工具庫(glut)、視窗庫(glx、agl、wgl)和擴充套件函式庫等。從圖可以看出,gl是核心,glu是對gl的部分封裝。glx、agl、wgl 是針對不同視窗系統的函式。glut是為跨平台的opengl程式的工具包,比aux功能強大。擴充套件函式庫是硬體廠商為實現硬體更新利用opengl的擴充套件機制開發的函式。下面逐一對這些庫進行詳細介紹。

1.opengl核心庫

核心庫包含有115個函式,函式名的字首為gl。這部分函式用於常規的、核心的圖形處理。此函式由gl.dll來負責解釋執行。由於許多函式可以接收不同數以下幾類。據型別的引數,因此派生出來的函式原形多達300多個。核心庫中的函式主要可以分為以下幾類函式:

2.opengl實用庫the opengl utility library (glu)

包含有43個函式,函式名的字首為glu。opengl提供了強大的但是為數不多的繪圖命令,所有較複雜的繪圖都必須從點、線、面開始。glu 為了減輕繁重的程式設計工作,封裝了opengl函式,glu函式通過呼叫核心庫的函式,為開發者提供相對簡單的用法,實現一些較為複雜的操作。此函式由glu.dll來負責解釋執行。opengl中的核心庫和實用庫可以在所有的opengl平台上執行。主要包括了以下幾種:

3.opengl輔助庫

包含有31個函式,函式名字首為aux。這部分函式提供視窗管理、輸入輸出處理以及繪製一些簡單三維物體。此函式由glaux.dll來負責解釋執行。建立aux庫是為了學習和編寫opengl程式,它更像是乙個用於測試創意的預備基礎接管。aux庫在windows實現有很多錯誤,因此很容易導致頻繁的崩潰。在跨平台的程式設計例項和演示中,aux很大程度上已經被glut庫取代。opengl中的輔助庫不能在所有的opengl平台上執行。

輔助庫函式主要包括以下幾類:

4.opengl工具庫 opengl utility toolkit

包含大約30多個函式,函式名字首為glut。glut是不依賴於視窗平台的opengl工具包,由mark klilgrad在sgi編寫(現在在nvidia),目的是隱藏不同視窗平台api的複雜度。函式以glut開頭,它們作為aux庫功能更強的替代品,提供更為複雜的繪製功能,此函式由glut.dll來負責解釋執行。由於glut中的視窗管理函式是不依賴於執行環境的,因此opengl中的工具庫可以在x-window, windows nt, os/2等系統下執行,特別適合於開發不需要複雜介面的opengl示例程式。對於有經驗的程式設計師來說,一般先用glut理順3d圖形**,然後再集成為完整的應用程式。

這部分函式主要包括:

5.windows專用庫

針對windows平台的擴充套件,包含有16個函式,函式名字首為wgl。這部分函式主要用於連線opengl和windows ,以彌補opengl在文字方面的不足。  windows專用庫只能用於windows環境中。

這類函式主要包括以下幾類:

6.win32 api函式庫

包含有6個函式,函式名無專用字首,是win32擴充套件函式。這部分函式主要用於處理畫素儲存格式和雙幀快取;這6個函式將替換windows gdi中原有的同樣的函式。win32api函式庫只能用於windows 95/98/nt環境中。

7.x視窗專用庫

是針對unix和linux的擴充套件函式。包括渲染上下文、繪製圖元、顯示列表、紋理貼圖等;

8.其他擴充套件庫

這些函式可能是新的opengl函式,並沒有在標準opengl庫中實現,或者它們是用來擴充套件已存在的opengl函式的功能。和glu、glx和wgl一樣,這些opengl擴充套件是由硬體廠商和廠商組織開發的。opengl擴充套件(opengl extention)包含了大量的擴充套件api函式。

隨著硬體的更新,硬體廠商首先向sgi申請登記新的擴充套件,編寫規格說明書(specification)。然後按照說明書進行開發擴充套件程式。不同的opengl實現(opengl implementation)支援的擴充套件可能不一樣,只有隨著某一擴充套件的推廣與應用以及硬體技術的提高該擴充套件才會在所有的opengl實現中被給予支援,從而最終成為opengl標準庫的一部分。擴充套件由sgi維護,在sgi**上列出了目前公開的已註冊的擴充套件及其官方說明書。擴充套件源由擴充套件函式的字尾來指明(或使用擴充套件常量字尾)。例如,字尾win表明乙個符合windows規範的擴充套件,ext或arb字尾表明該擴充套件由多個賣主定義。

下面給出opengl官方規定的命名規則:

由於opengl擴充套件在針對不同平台和不同驅動,opengl不可能把所有的介面程式全部放到gl.h、glx.h、wgl.h中,而是將這些函式頭放在了glext.h、glxext.h和wglext.h中。這些擴充套件被看作時opengl核心庫規範的增加和修改。

OpenGL函式庫介紹

開發基於opengl的應用程式,必須先了解opengl的庫函式。它採用c語言風格,提供大量的函式來進行圖形的處理和顯示。opengl庫函式的命名方式非常有規律。所有opengl函式採用了以下格式 庫字首 根命令 可選的引數個數 可選的引數型別 庫字首有gl glu aux glut wgl glx ...

函式庫檔案

乙個很簡單的問題除錯了好久,不過還算有收穫。現總結一下 1.vs2008中 math.h 標頭檔案中沒有定義m pi,如果程式確實要用m pi則需自己定義。define m pi 3.14159265358979323846 2.如果程式中自己定義的函式比較多,為了除錯方便使用方便,可以將這些函式都...

標準函式庫

1 rand與srand函式產生偽隨機數 cpp view plain copy print?intrand void void srand unsigned intseed rand返回乙個範圍在0和rand max之間的偽隨機數,為了避免程式每次執行時獲得相同的隨機數序列,可以使用srand函式...