OpenGL是一個狀態機

           OpenGL是一個狀態機,尤其是如果你使用固定功能的管線。可以設置它的各種狀態(或模式),然後讓這些狀態一直生效,直到再次修改它們。正如所看到的那樣,當前顏色就是一個狀態變量。可以把當前顏色設置爲白色、紅色或其他任何顏色,在此之後繪製的所有物體都將使用這種顏色,直到再次把當前顏色設置爲其他顏色。當前顏色只是OpenGL所維護的許多狀態變量之一。其他的狀態變量還有很多,並且有着各自的用途,例如控制當前視圖和投影變換、直線和多邊形點畫模式、多邊形繪圖模式、像素包裝約定、光照的位置和特徵以及被繪製物體的材料屬性等。許多表示模式的狀態變量可以用glEnable()和glDisable()函數進行啓用和禁用。

        如果使用可編程的着色器,根據所用的OpenGL版本的不同,着色器所能識別的狀態的數量也有所不同。

        每個狀態變量(或模式)都有一個默認值。在任何時候都可以向系統查詢每個狀態變量的當前值。一般情況下,可以使用下面這6個函數之一來完成這個任務:glGetBooleanv()、glGetDoublev()、glGetIntegerv()、glGetfloatv()、glGetPointerv()、或glIsEnabled()。具體選擇的函數取決於希望返回的結果的數據類型。有些狀態變量還有更爲特定的查詢函數(例如glGetLight*()、glGetError()或glGetPolygonStipple()等)。另外,還可以使用glPushAttrib()、glPushClientAttrib()函數把狀態變量的集合保存到一個屬性棧中,對它們進行臨時的修改,以後再用glPopAttrirb()或glPopClientAttrib()恢復這些值。如果需要對狀態變量進行臨時修改,就應該使用這些函數,而不是使用任何查詢函數,因爲前者的效率更高。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章