图片由图片元素(像素 pixel)的阵列(光栅 raster)生成。一个像素对应图像中的一个位置或一块小的区域。
目前几乎所有计算机图形系统都基于光栅。
帧缓存 frame buffer:用于保存像素的一个储存区域,可以看做是图形系统的核心元素。一般使用特殊类型的存储器芯片(可以快速重新显示帧缓存中的内容)实现。在基于软件的图形系统(如:用于高分辨率绘制的系统、生成复杂不能实时生成视觉效果的系统)中,帧缓存是系统存储器的一部分。
分辨率 resolution:帧缓存中像素的数目,决定从图像中可以分辨多少细节。
帧缓存的深度depth或精度precision:表示每个像素所用的bit数,决定诸如给定系统中可以表示多少种颜色之类的性质。
exp:深度为1bit的帧缓存允许有两种颜色,深度为8bit的帧缓存可以表示28=256种颜色。
全彩色系统 Full color:每个像素有24个bit(或更多)。可以表示足够多的颜色从而逼真显示绝大多数图像,也被成为真彩色系统 true color或 RGB颜色系统 RGB-color。
每个像素对应的三组bit位分配给三原色。
高动态范围的应用需要使用超过24bits的定点数来表示RGB颜色,近来有些帧缓存将RGB值存储为标准IEEE格式浮点数。
故真彩色应该解释为:具有足够深度的帧缓存,用RGB值而不是一个有限的颜色集索引来表示颜色。
处理器要完成的主要图形处理功能:获取由应用程序生成的图元属性、为帧缓存中的像素赋值、以最佳方式表示图元。
光栅化rasterizaion或扫描转换scan conversion:从几何实体到帧缓存中像素的颜色和位置。
GPU graphics processing unit图形处理单元:专门用来完成图形处理功能,可以在系统的主板或者图形卡中。帧缓存可以被GPU访问,而且可能就在GPU中。
光栅系统中两种把帧缓存中像素显示为屏幕上的点的方式:
- 逐行扫描 progressive或非隔行扫描 noninterlaced
像素按照刷新率一条一条扫描线显示
- 隔行扫描 interlaced
奇数行和偶数行被交替刷新。
成像过程中必须有的两个基本实体:对象和观察者。
对象在空间中的存在不依赖于任何图像生成过程和任何观察者。
对象和观察者处在一个三维世界,由观察者所定义的图像是二维的,对对象的指定与对观察者的指定组合在一起获得一副二维图像。
光线和对象表面相互作用的细节决定了有多少光线进入照相机。
几何光学geometric optics把光源建模为具有固定强度的光能辐射器。光线从光源出发沿直线到达与其相互作用的对象。一个理想的点光源point source从一个点向所有方向均匀地发射光线(可以是单一频率或包含多个频率)。
一个特定光源由其发出光线的能量依频率和方向的分布来表征。
如果API要遵从虚拟照相机模型,需要有相应的函数来确定4个要素:
- 对象
- 观察者
- 光源
- 材质属性
确定照相机位置必须指定4个要素:
- 位置。照相机的位置由投影中心COP给出。
- 方向。以投影中心为原点设置一个照相机坐标系,可以分别绕坐标系的三个坐标轴旋转照相机。
- 焦距。决定了在胶片平面上成像的尺寸。
- 胶片平面。照相机的后部有一定的高度和宽度,胶片平面方向与透镜方向无关,可独立调节。
gluLookat(cop_x, cop_y, cop_z, at_x, at_y, at_z, up_x, up_y, up_z);
使照相机从投影中心指向所期望的位置(at)并且制定照相机的观察正向为up。
glPerspective(field_of_view, aspect_ratio, near, far);
为透视投影选择了透镜(视域),确定了场景中那一部分要被成像(宽高比与near和far距离)。
图形绘制流水线 顶点→像素
- 顶点处理模块:执行坐标变换和计算顶点的颜色值
- 裁剪和图元组装模块: 对成像场景进行裁剪。(裁剪必须针对逐个图元,不能针对逐个顶点)
- 光栅化模块:将裁剪模块得到的用顶点表示的图元输出一组片元fragment。
- 片元处理模块:利用光栅化模块生成的片元来更新帧缓存中的像素。