文档介绍:OpenGL编程指南(第7版)
1
第四章颜色
颜色
计算机颜色
RGBA和颜色索引模式
指定颜色和着色模型
2/38
颜色
人类视网膜细胞(3种锥细胞)分别对红光、绿光、蓝光敏感。
3/38
OpenGL颜色模式
RGB(RGBA)模式
在RGB模式下,所有的颜色定义全用R、G、B三个值来表示,有时也加上Alpha值(与透明度有关),即RGBA模式。
颜色表模式
在颜色表模式下,每一个象素的颜色是用颜色表中的某个颜色索引值表示,而这个索引值指向了相应的R、G、B值。
用于存储存储所有像素颜色的内存称为颜色缓冲区
R、G、(无)(完全强度)
5/38
每个像素都存储颜色数据的数量由帧缓冲区的位平面(bitplane)以及硬件的解释决定的。
硬件为R、G、B和A成分保留一定的位平面,并一般采用整数,而不是浮点数存储
位平面常常被均匀地划分
8位存储可存储0~255,对应的RGBA值=位平面值/255.
glGetIntegerv() 函数
GL-RED-BITS、GL-GREEN_BITS、GL_BLUE_BITS、GL_ALPHA_BITS 和 GL_INDEX_BITS
人眼对颜色强度的感知并不是线性的。
6/38
RGBA
在RGBA模式中,硬件分配一定数量的位面给R、G、B和A成分(每个成分的数量不一定一样)
R、G、B的值通常以整型存储,而不是浮点数,并且它们被扩展成可以方便存储和获取的位数。
7/38
RGBA——抖动
抖动是一种使用混合多种颜色来创造出另一种颜色效果的技术
8/38
颜色索引模式
在颜色索引模式下,OpenGL使用一个颜色表(或查找表),就像用一个调色板来调出场景需要的各种颜色。
在RGBA模式中,每个像素的颜色是独立于其它像素的。
颜色索引模式中,相同索引值的像素共享相同的颜色表位置。如果颜色表中的内容改变了,那么相同索引值的像素将改变颜色。
9/38
颜色索引模式
用颜色索引模式的情况:
假如你正导入一个已经存在的程序,它主要使用颜色索引模式,也许不转为RGBA模式会更容易一些。
假如你只有很少的位面可用,RGBA模式对于阴影的过渡将显得非常粗糙。
颜色索引模式可以实现一些特殊的技巧,例如颜色映射动画和层次绘图
10/38