OpenGL是圖形硬件的一種軟件接口。它被設計爲硬件獨立的接口,可用於多種不一樣硬件平臺。OpenGL程序也能夠在網絡(客戶端-服務器端模式)上工做,即便客戶端與服務器端爲不一樣類別的計算機。OpenGL的客戶端爲OpenGL程序實際運行的計算機,服務器爲執行繪圖操做的計算機。html
OpenGL使用gl做爲OpenGL核心命令的的前綴,glu做爲OpenGL通用庫的前綴。相似地,OpenGL常量以GL_開頭,且所有使用大小字母。OpenGL也使用後綴指定傳遞給OpenGL的參數數量與數據類型。緩存
glColor3f(1, 0, 0); // 使用3個浮點數據設置顯示顏色爲紅色 glColor4d(0, 1, 0, 0.2); // 設置顏色爲帶有20%不透明度的綠色(double) glVertex3fv(vertex); // 使用指針設置x-y-z座標值
OpenGL是一個狀態機。OpenGL的模式與屬性都在下次更改以前一直有效。絕大部分狀態變量能夠經過glEnable()與glDisable()開啓與關閉。你也可使用glIsEnabled()檢測一個狀態當前是否被開啓或關閉。經過glPushAttrib()或glPopAttrib(),你能夠保存一組狀態到屬性棧,或從屬性棧中恢復。GL_ALL_ATTRIB_BITS參數用於保存/恢復全部狀態。標準OpenGL中必須至少有16個棧。(使用glinfo檢測棧的最大數量。)服務器
glPushAttrib(GL_LIGHTING_BIT); // 更改狀態的簡單方式 glDisable(GL_LIGHTING); // 由於在調用glPopAttrib()以後可以正好恢復上一次狀態 glEnable(GL_COLOR_MATERIAL); glPushAttrib(GL_COLOR_BUFFER_BIT); glDisable(GL_DITHER); glEnable(GL_BLEND); ... // 其餘 glPopAttrib(); // 恢復GL_COLOR_BUFFER_BIT glPopAttrib(); // 恢復GL_LIGHTING_BIT
爲了在OpenGL中繪製幾何圖元(點、線、三角形等),你能夠在glBegin()與glEnd()中指定定點數據列表。該方式爲當即模式。(你可使用其餘方式繪製幾何圖元,如頂點列表。)網絡
glBegin(GL_TRIANGLES); glColor3f(1, 0, 0); // 設置顏色爲紅色 glVertex3fv(v1); // 使用v一、v二、v3繪製三角形 glVertex3fv(v2); glVertex3fv(v3); glEnd();
OpenGL中有10中圖元:GL_POINTS、GL_LINES、GL_LINE_STRIP、GL_LINE_LOOP、GL_TRIANGLE_STRIP、GL_TRIANGLE_FAN、GL_QUADS、GL_QUAD_STRIP與GL_POLYGON。spa
注意,並非全部OpenGL命令都可以放在glBegin()與glEnd()中。僅僅可以使用這些命令的一小部分:glVertex*()、glColor*()、glNormal*()、glTexCoord*()、glMaterial*()、glCallList()等。設計
相似IO緩衝操做,OpenGL命令並非當即執行的。全部命令首先存放在緩存中,包括網絡緩存與顯卡加速器自己,而且在緩存未滿以前一直等待執行。例如,若是應用程序在網絡上運行,以單個數據包形式發送命令集合比每次在網絡中發送一條命令更高效。指針
glFlush()清空緩存中全部命令,而且強制全部掛起命令當即執行而沒必要等待緩存滿。所以,glFlush()確保在調用glFlush()後的有限時間內執行全部調用點以前的OpenGL命令。glFlush()並不等待先前命令執行完成,且當即返回到主程序。所以,即便先前發送的命令並未執行完成,你也能夠自由發送更多命令。orm
glFinish()與glFlush()相似,清空緩存區且強制開始執行命令。不一樣的是,glFinish()阻塞其餘OpenGL命令,且等待全部執行結束。所以,glFinish()在先前調用的命令完成以前並不會返回到主程序中。它可用於同步任務,或用於測量特定OpenGL命令的執行時間。htm