本文摘自《实时计算机图形学(第二版)》
给定相机,三维物体,光源,照明模式,以及纹理等条件,绘制生成一幅二维图像。在图像 ,物体的位置与形状由相机位置,几何形状以及环境特性等因素决定。视觉外观则受材质属性,光源,纹理,以及光照模型影响。 一条管线包含多个阶段,管线的整体快慢程度是由管线中最慢的那个阶段决定,例如是石油管道中,只有等到石油已经从第1阶段流到第2阶段以后,才能从第3阶段流到第4阶段时实计算机图像学中,也存在这种管线,概念上分为3个阶段 应用阶段----> 几何阶段---->光栅阶段。在绘制管线中,每一个阶段也可能就是一条管线,这就意味着它可以包含几个子阶段。 绘制速度(吞吐量):由最慢的管线阶段决定,即更新速度,FPS(每秒绘制的图像数量)或者用HZ,由于涉及到管线结构特点,不能将绘制的所有数据通过整个管线的时间进行简单相加,因为他们可以并行处理,如果能确定瓶颈(就是最慢的管线),同时知道所有数据通过该阶段需要花费的时间,就可以计算出绘制速度。例如:瓶颈阶段20ms来执行,那么绘制速度是1/0.020 = 50 HZ。实例: 输出设备最高更新频率 60Hz 绘制管线的瓶颈位置需要62.5ms。忽视输出设备,最高绘制速度1/0.0625 = 16Hz. 将这个值调整为输出设备的频率。60Hz绘制速度可以是60Hz/2 = 30Hz ,60Hz/4 = 15.这就说明期望的绘制速度可以是15Hz,因为这是小于16Hz时输出设备可以达到的最快速度。1)主要负责大部分多边形和顶点操作,改阶段还进一步细分为几个功能阶段 2)几何阶段的计算量非常高的任务,在只有一个光源的情况下,每个顶点大约需要100此左右精确的浮点运算操作。 I)模型与视点变换
屏幕的显示过程中,模型通常需要变换到若干个不同空间或坐标系统中。模型最初处于自身模型空间中里,没有任何变换,每个模型 和一个模型变换相联系,这样就可以定位和定向。同一个模型还可以和几种不同的变换联系一起允许同一个模型有多个副本(实例) 在场景中的不同位置,方向和大小。模型变换对象:模型顶点/法线物体的坐标称为 模型坐标:模型变换应用这些坐标中。那么这个模型就位于世界坐标或世界空间,世界空间是唯一的,所有模型经过变换以后都位于统一空间中了。相机空间 / 观察空间:只对相机(视点)可以看到模型进行绘制。
相机在世界空间中有一个位置和方向:作用放置校准相机,为了方便投影和裁剪,就必须对相机和所有的模型进行视点变换,目的相机放在原点,然后进行视点校准,使其z轴负方向,y轴指向上方,x轴指向右边。在视点变换后,实际的位置和方向就依赖于当前的应用程序接口(API)所有的模型变换和视点变换都是用一个4x4的矩阵实现,处于效能考虑,现将所有的矩阵级联起来,相乘,直接从模型空间到视觉空间II)光照和着色
为了让模型看起来更加的真实,可以给场景配上光源受光源影响的模型:可以用光照方程来计算模型上每个顶点的颜色,这个方程就是模拟了光子和物体表面之间的实际作用现实世界:光源发出光子,被物体表面反射/吸收,在实时计算机图形学中,没有太多的时间来模拟这种现象,例如,这个方程并没有包含真实的反射和阴影。此外模型在图形上通常以三角形来表示,目前,大部分图形硬件都采样三角形这种几何图元。物体表面的顶点颜色: 由光源以及其特性,顶点的位置和法线,顶点所在的材质属性来计算,当在屏幕上绘制三角形时,可以 通过对三角形顶点的颜色进行插值,这种插值技术成为Gouraud着色。为了模拟更高级的光照效果,在光栅阶段可以用像素着色技术通常光照计算在世界空间中进行,但是也可以对光源进行视点变换,在观察空间中会得到同样的光照效果,这是因为:即使参与光照计算的所有实体都变换到同一个空间(观察空间)中,光源,相机,以及模型之间都是相对位置依然保持不变的。III)投影
光照处理后,绘制系统就开始了进行投影。将视体变换为一个单位立方体,这个立方体对应的顶点分别是(-1,-1,-1)和(1,1,1)通常称为单位立方体为规范视体(Cannonical View Volume)正投影(可视体通常是一个矩形盒子): 正投影可以把这个视体变换为单位立方体,特性:平行线在变换后彼此仍然平行,这种变换是平移和缩放的组合透视投影(进大远小):物体距离离相机越远,投影之后就会变小,平行线可以在地平线相交,同样也可以将这个椎平截投体同样变换到立方体单位中。以上2中投影都可以通过4X4矩阵来实现。最终任何一种变换之后,都可以认为模型位于归一化处理后的设备坐标系中,这种变换把一个体变换为另外一个体,它是一种投影形式,因为在投影之后产生图像中的z坐标系将不复存在,这种投影形式将模型从三维投影到二维。IIII)裁剪
只有在图元完全或部分地存在于视体内的时候,才需要将其发送到光栅阶段,在这个阶段可以把这些图元在屏幕上绘制出来,当图元完全在一个视体内部,直接进入下一个阶段,完全在视体外部的图元,将不会进入下一个阶段,因为没有被绘制,一条直线一部分在视体内一部分在视体外,视体外的那个端点由一个新的端点替代,这个新的端点就是线段和视体(View Volume)的交点。投影变换的图元只针对立方体裁剪IV)屏幕映射
只有在视体内部经过裁剪的图元,才可以进入屏幕映射阶段,进入这个阶段的时候,坐标仍然是三维的,每个图元的x和y坐标变换到了屏幕坐标系中,屏幕坐标系连同z坐标一起称为窗口坐标系,假设在窗口里对场景进行绘制,窗口的最小拐角(x1 ,y1)和最大拐角(x2,y2)。x1<x2, y1<y2屏幕映射首先进行平移,随后缩放,映射过程z坐标不受影响,新的x和y坐标称为屏幕坐标系,与z坐标一起(-1 < z < 1)进入光栅阶段