天天看點

《OpenGL ES應用開發實踐指南:Android卷》—— 2.6 OpenGL顔色模型

本節書摘來自華章出版社《opengl es應用開發實踐指南:android卷》一 書中的第2章,第2.6節,作者:(美)kevin brothaler ,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

opengl使用累加rgb顔色模型,它隻用了三種基本顔色:紅色、綠色和藍色。許多顔色都是通過把這三種基本顔色按不同比例混合在一起而創造的。例如,紅色和綠色放在一起會生成黃色,紅色和藍色放在一起可以産生品紅色,而藍色和綠色放在一起就會創造出青色,把紅色、綠色和藍色放在一起,就能看見白色,如圖2-8所示。

《OpenGL ES應用開發實踐指南:Android卷》—— 2.6 OpenGL顔色模型

這個模型的工作原理與你可能在學校裡學過的減色繪畫模型(subtractive paint model)不同:在減色繪畫模型裡,加入藍色和黃色制作出綠色,而加入很多顔色會産生黑棕色或者黑色。這是因為顔料不發光,而是吸收光;畫上使用的顔色越多,光被吸收得越多,這幅畫就會表現得越暗。

累加rgb模型遵循光本身的屬性,當兩柱不同顔色的光線混合在一起時,不會看見更暗的顔色,而是更亮的顔色。一場大雨過後,當我們觀察天空中的彩虹時,我們實際上看到了可見光光譜中所有不同的顔色,它們可以合并成白色。

如果感興趣,wikipedia有更多的細節。

把顔色映射到顯示屏上

opengl假定這些顔色互相之間是線性關系:一個值為0.5的紅色,其亮度是值為0.25的紅色的兩倍;而一個值為1的紅色的亮度是值為0.5的紅色的兩倍。這些基本的顔色值被限定在範圍[0, 1]内,0代表缺少這個特定的基本顔色,而1代表那個顔色的最大強度。

這個顔色模型很好地映射到移動裝置使用的顯示屏和計算機螢幕上(然而,在13.3.3節中,我們會知道這個映射并不是真的一對一)。這些顯示裝置幾乎總是使用這三種基本顔色:紅色、綠色和藍色(為了有“更純的黃色”,有些裝置可能用黃色作為另外一個基本顔色),0映射到一個未點亮的像素分量,而1映射到那個顔色的全亮度。使用這個顔色模型,人眼能看到的所有顔色幾乎都可以被opengl渲染出來,并顯示在螢幕上。

在第4章裡,我們會學習更多關于顔色使用的内容。

繼續閱讀