OpenGL 视图和颜色的概念
视图
计算机图形的要点就是创建三维物体的二维图像(图像必须是二维的,因为它是在平面的屏幕上显示的)。但是,当我们决定怎样在屏幕上绘图时,必须用三维坐标的方式来考虑。人们在创建三维图像时经常犯的一个错误就是太早考虑在平面的二维屏幕上所显示的最终图像。我们要避免考虑屏幕上的像素是如何绘制的,而是要尽量在三维空间中想象物体的形状。我们需要在深入计算机内部的三维空间中创建模型,让计算机去计算哪些像素需要绘制。——这段话很有启发,可以让你知道一个大概的计算机三维到屏幕上二维图像的模型
把一个物体的三维坐标变换为屏幕上的像素坐标的三个步骤:
1.变换包括模型、视图和投影操作,他们是由矩阵乘法表示的。这些操作包括旋转、移动、缩放、反射、正投影和透视投影等。
2.由于场景实在一个矩形窗口中渲染的,因此位于窗口之外的物体必须裁剪掉。在三维计算机图形中,裁剪就是丢弃位于裁剪平面之外的物体。
3.经过了变换的坐标和屏幕像素之间必须建立对应关系。这个过程称为视口变换。
颜色
几乎所有的OpenGL应用程序的目的都是在屏幕窗口中绘制具有各种颜色的图像。窗口是一个矩形的像素数组,每个像素包含并显示自己的颜色。从某种意义上说,OpenGL执行的所有计算就是确定将要在窗口绘制的每个像素的最终颜色。
计算机在RGBA模式下,每个像素分别保存一个R、G、B值,并可能保存一个A值。在索引模式下,每个像素存储一个表示颜色的数值(称为颜色索引)。每个颜色索引表示颜色表中一个特定的项。颜色表定义了一组特定的RGB值,称为颜色映射表。
不同的图形硬件在像素数组的大小以及每个像素显示的颜色数量方面存在很大的区别。在所有图形系统中,每个像素都使用相同数量的内存来存储它的颜色。用于存储所有像素颜色的内存称为颜色缓冲区。缓冲区的大小通常用位来表示的,因此8位缓冲区使用8位数据存储每个像素的颜色(256种)。颜色缓冲区的大小因机器而异。(在所有图形系统中,每个像素都使用相同数量的内存来存储它的颜色 和 颜色缓冲区的大小因机器而异 是不是矛盾啊!现在看着挺矛盾的)
程序执行的早期,颜色显示模式设置为RGBA模式或颜色索引模式。眼颜色模式初始化之后,它就不能再进行更改了。程序在执行时,根据定点确定每个几何图元的颜色。如果启动了光照,它的颜色取决于变换矩阵与表面法线以及其他材料属性的交互效果。
接着,图元被光栅化(转换为二维图像)。光栅化过程决定了图元将占据窗口坐标中的哪些整形栅格方块,并为每个方块分配颜色和其他值。一个具有相关颜色值、z值和威力坐标值的栅格方块称为片段。像素是帧缓冲区的基本元素。片段来自图元,它与对应的像素组合,形成一个新的像素。在创建了片段后,OpenGL对片段应用纹理、雾和抗锯齿处理。此后,OpenGL使用片段以及已经存储在帧缓冲区的像素,执行所有指定的alpha混合、抖动和位逻辑操作。最后,片段的颜色写到像素,根据窗口的颜色显示模式在窗口中显示。