计算机图形学 学习笔记 图元的属性
目錄
OpenGL狀態變量
顏色和灰度
RGB顏色分量
顏色表
灰度
OpenGL顏色函數
OpenGL的RGB和RGBA顏色模型
OpenGL顏色索引模式
OpenGL顏色調和
OpenGL顏色數組
其他OpenGL顏色函數
點的屬性
OpenGL點屬性函數
線的屬性
OpenGL線屬性函數
曲線屬性
填充區屬性
OpenGL填充區屬性函數
字符屬性
OpenGL字符屬性函數
OpenGL反走樣函數
OpenGL詢問函數
OpenGL屬性組
總結
任何影響圖元顯示方法的參數一般稱為屬性參數,例如顏色和大小等屬性確定了圖元的基本特性。
維護屬性和其他參數當前值表的圖形系統稱為狀態系統或狀態機。輸出圖元的屬性和當前幀緩存位置等其他參數稱為狀態變量或狀態參數。在給一個或幾個參數賦值時,系統進入一個特定狀態,該狀態一直保留到狀態參數的值再次改變。
OpenGL狀態變量
OpenGL中的狀態變量有顏色和其他圖元屬性、當前矩陣模式、模型觀察矩陣的元素、緩存當前位置和場景光照效果參數等。所有OpenGL參數都有默認值,它們在被指定為新值前保持不變并發揮作用。
OpenGL中的所有圖元使用當前狀態表中的屬性顯示。
顏色和灰度
顏色時所有圖元的一個基本屬性。
RGB顏色分量
顏色信息可以用兩種方式存儲在幀緩存中:
- 直接在幀緩存中存儲紅色、綠色和藍色編碼
- 將顏色碼存入一個獨立的表中并在像素位置存儲指向顏色表項的索引
顏色表
在使用顏色表存儲顏色信息時,這時幀緩存中的值用做指向顏色表的索引。
顏色表可以應用于許多應用中,既提供了“合理”數量可同時顯示的顏色又不要求大容量幀緩存。表項內容可以在任何時候進行修改,使用戶可以很容易地實驗設計、場景和圖表中地不同顏色組合、而不改變圖形數據結構中屬性的設定。
灰度
當RGB函數中指定相同量的紅色、綠色和藍色時,結果是某種程度的灰色。
OpenGL顏色函數
使用下面的函數將顏色顯示模型設定為RGB:
第一個常量指示正在使用單個幀緩存,第二個常量設定RGB模式,即默認模型。如果要用指向顏色表的索引來指定顏色,則用OpenGL常量GLUT_INDEX取代GLUT_RGB。
OpenGL的RGB和RGBA顏色模型
多數OpenGL顏色設定使用RGB模式。除了紅色、綠色和藍色分量之外,還有稱為α系數的第四個分量,用于控制顏色調和。可以在調用glutInitDisplayMode時選擇GLUT_RGBA指定這種模式。
使用下面的函數來選擇當前的顏色分量:
例如下面的語句將圖元的當前顏色指定為青色:
OpenGL顏色索引模式
在使用顏色索引模式下指定顏色時,通過指定一個指向顏色表的索引來設定當前顏色:
下面的語句將當前顏色索引設定為196:
有一個glut子程序可用來與窗口系統進行交互,從而為指定的一個索引位置指定顏色如下:
OpenGL顏色調和
許多圖形軟件包提供生成多種顏色調和效果的方法,這些函數稱為顏色調和函數或圖像混合函數。在OpenGL中,通過先將第一個對象裝載進幀緩存,再將第二個對象的顏色與幀緩存顏色相混合來實現兩個對象顏色的調和。當前幀緩存顏色稱為OpenGL目標顏色,而第二個對象的顏色稱為OpenGL源顏色。
要在應用中進行顏色調和,必須先用下面的函數激活這個OpenGL特性:
使用下面的函數將關閉OpenGL的顏色調和子程序:
顏色可按要達到的效果進行多種調和,通過指定兩組調和因子來生成不同的顏色效果。一組調和因子針對幀緩存中的當前對象(“目標對象”),而另一組調和因子針對新來的(“源”)對象。將要裝入幀緩存的新的調和顏色計算如下:
這里,RGBA源顏色分量為(Rs,Gs,Bs,As),目標顏色分量為(Rd,Gd,Bd,Ad),源調和因子為(Sr,Sg,Sb,Sa),而目標調和因子為(Dr,Dg,Db,Da)。
使用下列函數可選擇調和因子的值:
OpenGL顏色數組
可在頂點數組中和坐標值混合來指定場景中的顏色值。
激活OpenGL的顏色數組:
對RGB模式要指定顏色分量的位置和格式:
使用顏色數組的例子:
可以將顏色和頂點坐標一起裝入一個交錯數組。每一個指針用適當的位移值指向單一的交錯數組。
OpenGL提供一個可以一次性指定所有頂點和顏色數組及其他類型信息的函數。
在顏色索引模式下,使用下面的語句定義一個顏色索引數組:
其他OpenGL顏色函數
用來為顯示窗口選擇RGB顏色分量的函數,glClearColor指定所有顏色緩存的顏色。然后用下面的命令將凈顏色用于這些顏色緩存:
在顏色索引模式下,使用下面的函數設定顯示窗口的顏色:
窗口背景色用存放顏色表中index位置的顏色來指定。執行glClear(GL_COLOR_BUFFER_BIT)函數后窗口就以該顏色顯示。
點的屬性
顏色和大小
OpenGL點屬性函數
glPointSize(size)指定點的大小
glColor或glIndex指定點的顏色
線的屬性
直線段可以使用三個基本屬性來顯示:顏色、線寬和線型。
OpenGL線屬性函數
glLineWidth(width)設定線寬
glLineStipple(repeaterFactor, pattern); 默認狀態下,直線段顯示成實線。但也可以顯示劃線、點線或短劃和點混合的線段。還可以改變短劃及短劃或點之間的長度。
pattern描述如何顯示線段的一個16位整數。repeaterFactor說明模式中每一位重復應用多少次才輪到下一位。
在使用線型顯示線段之前,必須先激活線型特性:
使用下列函數關閉線型特性:
曲線屬性
曲線屬性的參數和線段相同,可以使用各種顏色、寬度、短劃線模式和有效的畫筆和筆刷選擇來顯示曲線。
嚴格來說,OpenGL并不把曲線作為和點及線段一樣的圖元來考慮。
在OpenGL中可使用幾種方法來顯示曲線:
- 使用一組線段來逼近曲線
- 使用樣條來畫
填充區屬性
一般的圖形軟件包提供的基本填充屬性是內部的顯示模式。我們可以將一區域顯示為單一顏色、指定填充圖案或只給出邊界的“空心”模式。也可以使用各種筆刷模式、顏色調和或紋理對場景中的指定區域進行填充。其他選項包括填充區域邊界。對于多邊形來說,可以使用不同顏色、線寬和線型給出邊界。還可以為區域前向面和后向面選擇不同的顯示屬性。
填充圖案可以使用一個為不同位置指定不同顏色的矩形顏色陣列來給出。
也可以按照多種方式將填充圖案和背景顏色混合。圖案和背景色混合時使用透明因子來確定背景中有多少應該混合到對象顏色中。
OpenGL填充區屬性函數
OpenGL僅提供對凸多邊形的填充區子程序。顯示一個填充凸多邊形要經過下面四個步驟:
1.定義一個填充圖案
2.引用多邊形填充子程序
3.激活OpenGL多邊形填充特性
4.描述要填充的多邊形
除了為多邊形內部指定一個填充圖案,還有選項:顯示一個空心多邊形;另一選項是只顯示頂點。
用十六進制定義一個位圖:
建立了掩模之后,可以使用下列函數將其當作填充圖案:
在使用當前圖案填充多邊形時需要激活子程序:
關掉圖案填充:
填充多邊形的另一種方法是使用紋理。這將生成仿真木材、磚、拉絲鋼或其他材料外貌的圖案。也可以仿照線圖元中的做法得到多邊形內部的插值填充。
我們也可以僅顯示多邊形的邊,來生成線框圖或多邊形的空心顯示。還可以通過顯示一組頂點來顯示多邊形。通過下面函數選定:
參數face指定多邊形的哪一個面上僅顯示邊或頂點,displayMode為GL_LINE時僅描繪邊,GL_POINT時僅描繪頂點,GL_FILL默認的顯示模式。
可以在填充內部時同時使用不同的顏色或圖案來顯示它的邊或頂點。
這種填充方法可能在邊之間產生縫隙。
消除縫線的方法是:
第二個函數用來設定一對計算深度位移總量的浮點值factor1和factor2.深度位移的計算如下:
兩因子的典型值為0.75和1.0
OpenGL提供了從線框圖顯示中消除選定邊的機制:
如下面程序段僅顯示三角形的兩條邊:
多邊形標志也可以在一個數組中指定,創建一個邊標志數組的語句為:
使用下列函數可以單獨指定一個場景中的前向面和后向面:
vertextOrder:GL_CW,則隨后定義的順時針多邊形可看作前向面。GL_CCW逆時針次數為前向面朝向,默認次序。
該特性用來交換以順時針為次序指定頂點的多邊形的面。
字符屬性
顯示的字符外觀由字體、大小、顏色和方向這些屬性控制。
字符大小由磅指定。
字符串的方向按字符向上向量設定。字符串顯示成其字符底線到帽線的方向與向上向量一致。
對齊是另一個可能使用的字符串屬性,這個屬性指定如何依賴參考坐標來定位文本。下圖中給出了字符水平和垂直對齊的一般位置。
OpenGL字符屬性函數
使用OpenGL軟件包顯示字符有兩種方法。使用核心庫中的位圖函數來設計字體集,或引用OpenGL字符生成函數。
OpenGL反走樣函數
由于低頻采樣(不充分采樣)而造成的信息失真稱為走樣。可以使用校正不充分取樣過程的反走樣方法來改善所顯示的光柵線的外觀。
使用下列函數激活OpenGL的反走樣子程序:
primitiveType:GL_POINT_SMOOTH、GL_LINE_SMOOTH、GL_POLYGON_SMOOTH
假定用RGBA模式指定顏色,則同樣需要激活OpenGL顏色調和操作:
顏色調和方法:
OpenGL詢問函數
使用OpenGL查詢函數可以獲得包括屬性設定在內的任意狀態參數的當前值。
需要指定兩個變量。第一個是標識一個屬性或狀態參數的OpenGL符號常量。第二個變量是一個指針,指向由函數名指出的數據類型的一個數組。例如,使用下列語句可以獲取當前RGBA浮點顏色設定:
OpenGL屬性組
屬性和其他狀態參數按屬性組進行組織。每一組包括相關的狀態參數集合。
點屬性組包括了大小和點的平滑(反走樣)參數。
線屬性組包括了線寬、模板狀態、模板圖案、模板重復計數及線段光滑狀態等。
多邊形屬性組包括了11種多邊形參數,如填充模式、前向面標識及多邊形平滑狀態。
保存一個指定屬性組所有參數的工作由下列命令實現,它將指定組的所有參數放進屬性棧:
attrGroup用標識一個屬性組的OpenGL符號常量來賦值。
用下列函數將屬性棧的所有值進行重建:
glPopAttrib();
總結
屬性控制圖元的顯示特征。
顏色是所有圖元的公共屬性。
基本的點屬性是顏色和大小。線屬性由顏色、寬度和線型。
填充屬性包括實心顏色填充、填充圖案填充或僅僅顯示區域邊界的空心填充。
字符可以按照不同顏色、大小、間隔和方向進行顯示。
我們可以通過應用調整像素強度的反走樣過程來改善光柵圖元的外貌。
OpenGL中,圖元的屬性由狀態變量來維護。
總結
以上是生活随笔為你收集整理的计算机图形学 学习笔记 图元的属性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言修炼内功,助你升级打怪!!
- 下一篇: P2415 集合求和(一道洛谷好题鸭)(