每个像素的颜色信息存储方式:
- RGBA模式:有些图形硬件可以使用抖动来增加可以显示的颜色数量(抖动在默认情况下是开启的)。
- 颜色索引:可用颜色数量受限于颜色映射表的大小以及可用的位平面的数量。
在程序执行早期,设置颜色显示模式,当颜色显示模式初始化之后就无法进行更改了,在程序执行期间根据顶点颜色确定每个几何图元的颜色。如果启用了光照,它的颜色取决于变换矩阵与表面法线以及其他材料属性的交互效果。在执行光照计算后,程序所选择的着色模式(单调着色或平滑着色)随之生效。接着图元被光栅化(转换为二维图像),光栅化决定了图元将占据窗口坐标中得哪些整型栅格方块,并为每个方格分配颜色和其他值。一个具有颜色、深度和纹理坐标的栅格方块称为片断。像素是帧缓冲区的基本元素。片断来自于图元,它与对应的像素组合,形成一个新的像素。在创建了片断之后,OpenGL会对片断应用纹理、雾和抗锯齿处理。之后,OpenGL使用片断以及已经存储在帧缓冲区中的像素,执行所有指定的alpha混合、抖动和位逻辑操作。最后,片断的颜色(RGBA值或颜色索引值)写入到像素,根据窗口的颜色显示模式在窗口中显示。
无论是RGBA还是颜色索引模式,每个像素都存储了一定数量的颜色数据,这个数量是由帧缓冲区的位平面数量决定的。在每个像素中,1个位平面表示1位数据。
颜色索引模式可以实现一些特殊的技巧,例如颜色映射动画和层次绘图,一般而言,应尽可能使用RGBA模式,RGBA模式可以在纹理贴图中使用,并且在使用光照、着色、雾和抗锯齿功能时更加灵活。
把颜色值转为浮点值:
后缀 | 数据类型 | 最小值 | 最小值映射到 | 最大值 | 最大值映射到 |
b | 1字节整数 | -128 | -1.0 | 127 | 1.0 |
s | 2字节整数 | -32768 | -1.0 | 32767 | 1.0 |
i | 4字节整数 | -2147483648 | -1.0 | 2147483648 | 1.0 |
ub | 1字节无符号整数 | 0 | 0.0 | 255 | 1.0 |
us | 2字节无符号整数 | 0 | 0.0 | 65535 | 1.0 |
ui | 4字节无符号整数 | 0 | 0.0 | 4294967295 | 1.0 |
直线或填充多边形可以用一种颜色进行绘制(单调着色),也可以用多种颜色进行绘制(平滑着色)。可以用glShadeModel()函数指定所需的着色模型。
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-03 21:18:21