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