電腦螢幕一個像素的顏色值由RGB(或RGBA,A並不直接用於顏色顯示)三個分量組成;不同裝置單個像素能顯示的顏色數不用,儲存顏色值的記憶體大小也不用,一般用bit來衡量,8-bit buffer能顯示256種顏色。RGB各分量的值可以無歧義地用浮點數表示,範圍是[0.0,1.0],1.0表示這個分量的顏色達到最強。
圖元顏色
opengl設定顏色的api是glColor*,顏色設定以頂點為單位,圖元的顏色進過流水線的處理才能到達螢幕:
1)頂點的顏色還要經過光照處理;
2)此時以圖元頂點的顏色為基礎,按選定的著色模式(shading model)對圖元進行著色,得出圖元內部的顏色;
3)接下來就是光柵化(rasterize,也即將圖元轉化成二維映像),這一步決定映像視窗座標內的每個格子顏色、深度(z)、紋理座標,這樣的格子就是片段(fragment),紋理、霧、antialiasing這些效果也會被加諸片段之上;
5)最終片段的顏色和frame buffer中原有的像素顏色進行混合操作(alpha blending,dithering,bitwise logical operation),形成新的像素顏色。
RGB顏色儲存格式
顯示裝置一般為每個分量分配一定的bit數(不一定相等),分量值儲存為無符號整形;比如R有8 bit,那麼儲存的值為0,1...255,那麼分別對應於浮點值0.0,1/255...1.0。
Dithering
一些現實裝置使用Dithering技術來增加可以顯示的顏色數目,打個比方,RGB分別只有一個bit寬度,那麼只可以顯示:black,white,red,blue,green,yellow,cyan,magenta這幾種顏色,為了顯示一塊pink地區,可以在該地區內間隔顯示red和white像素,這樣看起來就感覺是pink了。
Color-Index模式
該模式使用一張顏色尋找表和色彩索引來表示顏色,像素中儲存的是索引值。
Shading Mode
有兩種著色模式,flat和smooth,前者會使用某個頂點的顏色來個整個圖元著色,後者會考慮所有頂點的顏色對圖元內部的點進行著色(插值)。在flat模式下,選取那個頂點的顏色取決於圖元類型,請參考原書。