電腦圖形學(三)_圖元的屬性_3_OpenGL顏色函數(上)

來源:互聯網
上載者:User

標籤:

OpenGL顏色函數(上)
設定顏色顯示模型( color display mode)為RGB:
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
       變數表中的第一個參數指示正在使用單個幀緩衝,第二個參數設定RGB模式,即預設模式。我們可以用GLUT_RGB或GLUT_RGBA之一來選擇顏色模型。如果要用指向顏色表的索引來指定顏色,則用OpenGL常量GLUT_INDEX取代GLUT_RGB。
 OpenGL的RGB和RGBA顏色模型
        多數OpenGL圖元使用RGB模式( RGB mode ),它與RGBA模式( RGBA mode)基本相同。RGB和RGBA的惟一區別在於是否正在顏色調和中使用α值。在為圖元指定一組特殊的顏色時,定義了OpenGL的顏色狀態( color state )。使用中色彩用於其後定義的圖元直到再次改變顏色設定。一種新設定的顏色僅影響在其後定義的對象。
        在RGB模式中,我們指定一種顏色的紅色、綠色和藍色分量。第四個顏色分量即α係數 (alpha coefficient)是任選的,而四維的顏色描述稱為RGBA顏色。第四個顏色參數用來控製圖元重疊時的顏色調和。顏色調和的一個重要應用是類比透明效果。在這樣的計算中,α的值與透明性(或不透明性)設定相對應。在RGB(或RGBA)模式中,使用下面的函數來選擇使用中色彩分量:
glColor* (colorComponents);
        尾碼碼與glVertex函數中的相同。使用3或4及數值的資料類型碼和一個任選的向量尾碼一起指定RGB或RGBA模式。該數值資料類型是b(位元組)、i(整數)、s(短整數)、f(浮點數)和d(雙精確度浮點數)以及無符號數值。顏色分量的浮點數範圍從0.0到1.0,glColor包括α值的預設顏色分量是(1.0, 1.0, 1.0, 1.0),它將RGB顏色設成白色而α值為1.0。作為例子,下面的語句在RGB模式下使用浮點值將圖元使用中色彩設定為青色(綠色和藍色最高強度的混合)。
glColor3f (0.0, 1.0, 1.0);
使用數組指定三個顏色分量,則可按如下方式設定上例中的顏色:
glColor3fv (colorArray);
使用glBegin/glEnd函數對可為單個點位置設定選擇的OpenGL顏色。
        顏色分量的整數描述依賴於系統的效能。每像素8位(每分量256等級)的全彩色系統的整數值的範圍從0到255。對應的顏色分量浮點數為0.0, 1.0/255.0, 2.0/255.0,...255.0/255.0 = 1.0。在全彩色系統中,我們可以用整數值指定青色的分量:
glColor3i (0, 255, 255);
幀緩衝實際上儲存整數值,因此用整數指定顏色分量可避免給出浮點數必須進行的轉換工作。任何格式指定的顏色值都要按比例轉換成特定系統有效位所確定的範圍中的整數。

 OpenGL色彩索引模式
OpenGL中也可以用指向顏色表的色彩索引模式來指定顏色。在該模式下,通過指定一個指向顏色表的索引來設定使用中色彩:
glIndex* (colorIndex);
參數colorIndex被賦予一個非負整數。該索引值被儲存到隨後指定的圖元對應的幀緩衝位置中。我們可以將索引指定為如下資料類型:無符號位元組、整數和浮點數。參數colorIndex的資料類型由尾碼碼ub, s, i, d和f來指定,而顏色表的索引數總是2的指數,如256或1024。每一表項的位元依賴於系統的硬體設施。作為索引模式的顏色指定樣本,下面的語句將使用中色彩索引設定為196。
glIndexi (196);
所有在這個語句後定義的圖元都被賦予顏色表該位置中儲存的顏色,直到使用中色彩再次改變。
       在OpenGL核心庫中沒有裝載顏色尋找表的函數,因為表處理子程式是視窗系統的一部分。有的視窗系統支援多個顏色表,而另外一些則僅有一個顏色表及有限的選擇。然而,有一個GLUT子程式可用來與視窗系統進行互動,從而為給定的一個索引位置指定顏色:
glutSetColor (index, red, green, blue);
顏色參數red , green和blue被賦予從0.0到1.0範圍中的浮點數。該顏色裝入用參數index的值指定的表項中。
       OpenGL核心庫擴充了處理另外三個顏色表的子程式。它們是OpenGL成像子集(Imaging Subset )的一個部分。存在這些表中的顏色值可通過各個緩衝處理以便用來修改像素值。使用這些表的例子有設定照相機的聚焦效果、從映像中過濾掉某些顏色、增強某種強度或調整亮度、將灰階照片轉換成彩色以及顯示的反走樣等。可利用這些表來改變顏色模型,即將RGB顏色改變為使用另外三個“基色”(如青色、品紅和黃色)的顏色描述。
    OpenGL成像子集中使用 GL_COLOR_TABLE, GL_POST_CONVOLUTION_COLOR_TABLE或GL_POST_COLOR_MATRIX_COLOR_TABLE名字的特定顏色表用glEnable函數來啟用。我們可以用成像子集中的子程式來選擇特定的顏色表、設定顏色表的值、複製表的值或指定需要改變像素顏色的哪一個分量及如何改變它。

 OpenGL顏色調和
         在許多應用中,很容易混合重疊對象的顏色或將一個對象與背景調和。這樣的例子有類比畫筆效果、將兩張或多張照片混合成一張、透明效果建模和情境中對象的反走樣。許多圖形軟體包提供產生多種顏色調和效果的方法,這些函數稱為顏色調和函數( color-blending function)或映像混合函數( image-compositing function)。在OpenGL中,通過先將第一個對象裝載進幀緩衝,再將第二個對象的顏色與幀緩衝顏色相混合來實現兩個對象顏色的調和。當前幀緩衝顏色稱為OpenGL目標顏色( destination color),而第二個對象的顏色稱為OpenGL源顏色(source color)。調和方法僅在RGB或RGBA模式下完成。要在應用中進行顏色調和,必須先用下面的函數啟用這個OpenGL特性。  
glEnable(GL_BLEND);
    使用下面的函數將關閉OpenGL的顏色調和子程式:  
  glDiaable(GL_ BLEND);
如果顏色調和沒有被啟用,則一個對象的顏色將簡單地取代幀緩衝中相應位置的內容。
        顏色可按要達到的效果進行多種調和,通過指定兩組調和因子來產生不同的顏色效果。一組調和因子針對幀緩衝中的當前對象(“目標對象”),而另一組調和因子針對新來的(“源”)對象。將要裝人幀緩衝的新的調和顏色計算如下:

這裡,RGBA源顏色分量為(Rs,Gs,Bs,As),目標顏色分量為(Rd,Gd,Bd,Ad),源調和因子為(Sr,Sg,Sb,Sa),而目標調和因子為(Dr,Dg,Db,Da)。計算出的組合顏色分量歸一到0.0到1.0之間。即任何大於1.0的總和均設為1.0,而任何小於0.0的和設為0.0。
      使用下列函數可選擇調和因子的值:    
g1BlendFunc(sFactor,dFactor);
         參數sFactor和dFactor,即源和目標因子,都用OpenGL符號常量賦值以指定為預定義的一組四元素調和係數。例如,常量GL_ZERO表示調和因子(0.0, 0.0, 0.0, 0.0)而GL_ONE表示(1.0, 1.0, 1.0, 1.0)。我們可以使用GL_DST_ALPHA或GL_SRC_ALPHA將四個調和因子設為目標α值或源α值。其他可用來設定調和因子的OpenGL常量有GL_ONE_MINUS_DST_ALPHA,
GL_ONE_MINUS_SRC_ALPHA,GL_DST_COLOR和GL_SRC_COLOR。這些調和因子常用於類比透明性,這將在10.19節詳細討論。sFactor的預設值是GL_ONE,而dFactor的預設值是GL_ZERO。因此,這兩組調和因子的預設值將導致新來的顏色值取代幀緩衝中的使用中色彩值。
       包含在OpenGL擴充庫中的增益集函數稱為成像子集。這些子程式中包含了設定調和顏色的子程式和指定調和等式的子程式。

電腦圖形學(三)_圖元的屬性_3_OpenGL顏色函數(上)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.