本节书摘来自华章出版社《OpenGL ES应用开发实践指南:Android卷》一 书中的第2章,第2.6节,作者:(美)Kevin Brothaler ,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
2.6 OpenGL颜色模型
OpenGL使用累加RGB颜色模型,它只用了三种基本颜色:红色、绿色和蓝色。许多颜色都是通过把这三种基本颜色按不同比例混合在一起而创造的。例如,红色和绿色放在一起会生成黄色,红色和蓝色放在一起可以产生品红色,而蓝色和绿色放在一起就会创造出青色,把红色、绿色和蓝色放在一起,就能看见白色,如图2-8所示。
这个模型的工作原理与你可能在学校里学过的减色绘画模型(subtractive paint model)不同:在减色绘画模型里,加入蓝色和黄色制作出绿色,而加入很多颜色会产生黑棕色或者黑色。这是因为颜料不发光,而是吸收光;画上使用的颜色越多,光被吸收得越多,这幅画就会表现得越暗。
累加RGB模型遵循光本身的属性,当两柱不同颜色的光线混合在一起时,不会看见更暗的颜色,而是更亮的颜色。一场大雨过后,当我们观察天空中的彩虹时,我们实际上看到了可见光光谱中所有不同的颜色,它们可以合并成白色。
如果感兴趣,Wikipedia有更多的细节。
把颜色映射到显示屏上
OpenGL假定这些颜色相互之间是线性关系:一个值为0.5的红色,其亮度是值为0.25的红色的两倍;而一个值为1的红色的亮度是值为0.5的红色的两倍。这些基本的颜色值被限定在范围[0, 1]内,0代表缺少这个特定的基本颜色,而1代表那个颜色的最大强度。
这个颜色模型很好地映射到移动设备使用的显示屏和计算机屏幕上(然而,在13.3.3节中,我们会知道这个映射并不是真的一对一)。这些显示设备几乎总是使用这三种基本颜色:红色、绿色和蓝色(为了有“更纯的黄色”,有些设备可能用黄色作为另外一个基本颜色),0映射到一个未点亮的像素分量,而1映射到那个颜色的全亮度。使用这个颜色模型,人眼能看到的所有颜色几乎都可以被OpenGL渲染出来,并显示在屏幕上。
在第4章里,我们会学习更多关于颜色使用的内容。