计算机图形学第七章图形绘制管线
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
alpha缓冲器可以为每个象素存储一个的不透明度值;
模板缓冲器的内容可以用来控制颜色缓冲器和Z缓冲 器的绘制,而绘图函数可以用不同模式将图元绘制到模板 缓冲器中。在产生特殊效果方面,模板缓冲器是一个强大 的工具;
累加缓冲器可以用一组不同的方式对绘制的多幅图像 进行累积,能够产生反走样、运动模糊、深度场和软阴影 等效果。
颜色位面就是屏幕的显示内容。为了 避免观察者看到光栅化过程,图形系统一 般都使用了双缓冲机制:即提供两组颜色 位面,分别称为前缓冲和后缓冲。前缓冲 处于显示状态,即屏幕看到的内容;后缓 冲用于在非显示状态下进行光栅化。一旦 后缓冲绘制完毕,则切换前后缓冲。
7.3.4 深度位面
深度位面又称为Z缓冲器,它为每个象素存贮着一个z值,这个z 值是从相机到最近图元之间的距离。
7.3.1 图形的光栅化
以四边形的光栅化
Y
为例:在XY平面上,通
过从多边形最低点到最
高点之间的水平扫描,
完成对多边形的扫描转
换。对每条扫描线,多
边形的扫描转换分为四
个步骤: 求交、排序、
配对、着色。
X
光栅化结果保存在颜色和深度位面中(通过检测时): 颜色用于显示图形,深度值用于消隐。
7.3.2 位面
世界坐标系:为了确定物体在场景中的比例、位置和朝向,需要 为场景中的物体建立一个公共的坐标系,这个坐标 系称为世界坐标系。
视点坐标系:固定在观察者的双眼正中,X轴的方向向右、Y轴的 方向向上、Z轴的负方向与视线同向。又称为相机坐 标系。
规范化坐标系:(左手系)x∈[-1,1],y∈[-1,1],z∈[-1,1]。 窗口坐标系:(左手系)x∈[0,winx-1],y∈[0,winy-1],z∈[0,1]
(4)常用变换
①旋转:
1 0
0 0
0 cos sin 0
0 0
s in 0
c os 0
0 1
绕x轴旋转θ角
②平移:
1 0 0 x 0 1 0 y
0 0
0 0
1 0
z 1
平移量为Δx,Δy,Δz
cos 0 sin 0
0 1 0 0
sin 0
0 0
c os 0
10
绕y轴旋转θ角
引入齐次坐标后带来了诸多便利,主要有: ➢ 可以区分坐标和方向: (x,y,z,1) :坐标 (x,y,z,0) :方向 ➢ 规范化的坐标变换:OpenGL中的所有变换都可以 用4×4矩阵乘法表示,例如:平移和透视投影。这 是普通坐标所做不到的。
7.2.2 模型与视点变换
在图形显示过程中,模型通常需要变换到若干不同的空间 (坐标系统)中。
7.2.6 屏幕映射
只有通过裁减阶段的图元,才能进入屏幕映射阶段。在 这个阶段,通过简单的平移和缩放,图元顶点的坐标由规 范化坐标系( x∈[-1,1],y∈[-1,1],z∈[-1,1] )变换到 窗口坐标系( x∈[0,winx-1],y∈[0,winy-1],z∈[0,1] ), 至此完成整个流水线的几何阶段。准备进入下一个大阶段: 光栅阶段。
通常,光照计算是在世界坐标系中进行的,光源也在 世界坐标系中表示。但是,如果对光源及参与光照计算的 所有实体都进行了视点变换,在相机坐标系中会得到同样 的关照效果,因为这时光源与模型之间的相对位置仍然保 持不变。注意相机位置与光照计算无关。
OpenGL的光照计算在视点坐标系中进行。
7.2.4 投影
对于其它阶段,由于其全部或部分是建立在硬件基础之上,因此 要改变实现过程是比较困难的。但应用程序阶段可以改变几何和光栅 阶段所消耗的时间,例如可以设法减少传递给几何阶段的三角片数量。
由于应用程序阶段是基于软件方式实现的,因此不能像几何和光 栅阶段那样分成若干个子阶段。但是为了提高性能,可以使用并行处 理器进行加速。
7.2.5 裁减
当一个图元完全位于一个视体内部的时候,那么它可以直接进入 下一个阶段;当一个图元完全位于视体之外时,不需要绘制,不用进 入下一个阶段。但需要对哪些部分位于视体之内的图元进行裁减处理, 被裁减图元将包含新的顶点。
投影变换之后的图元只需要针对规范立方体进行裁减,这使裁减 算法大大简化。有些系统还允许用户在此基础之上,自定义数个裁减 平面。
(1)模型变换
每个模型可以和一个模型变换相联系,这样就可以对它进行 定位和定向。
同一个模型还可以和几种不同的模型变换联系在一起。就是 同一个模型有多个副本,在场景中具有不同的位置、方向和大小, 而不需要对基本几何体进行复制。
起初,模型处于自身所在的模型空间中,可以认为它根本没 有进行任何变换。
模型变换的对象是模型的顶点和法线。所有模型经过模型 变换从自己的模型坐标系变换到公共的世界坐标系中。
7.2 几何阶段
几何阶段主要负责大部分多边形和顶点 操作,执行的是计算量非常高的任务,可以 将这个阶段进一步划分为几个功能阶段。
模型和 视点变换
光照和 着色
投影
裁减
屏幕映射
7.2.1几个坐标系和齐次坐标
模型坐标系:每个物体(模型)可以有自己的坐标系,这个坐标 系称为模型坐标。它是在建模时确定的。
位面:屏幕空间对应着同 样大小一组位面,位 面的数目决定了每个 象素的变化能力。其 中最基本的是颜色位 面和深度位面。
缓冲区:常称一组位面为 缓冲区(buffer) 。 帧缓冲区(frame buffer)通常指系统 包含的所有位面,它 又细分为各种不同功 能的缓冲区。
颜色缓冲区示意 图
7.3.3 颜色位面
对平行投影来说,由于是将长方体变换为规范立 方体,所以平行投影的特点是:几何体投影的大小不 受与视点距离的影响,同样大小的物体其投影大小也 相同,因此可以用来制作建筑蓝图。
对透视投影来说,由于是将前小后大的四棱台变 换为规范立方体,所以透视投影的特点是:近处的物 体被放大、远处的物体被变小,得到逼真的视觉效果。
其中:winx、winy分别为窗口的宽和高。
7.2.1几个坐标系和齐次坐标
齐次坐标: 齐次坐标(Homogeneous Coordinate)是比普通坐标 高一维的坐标,与普通坐标可以相互转换: ➢ 从普通坐标转换为齐次坐标: (x,y,z)→(x,y,z,1) ➢ 从齐次坐标转换为普通坐标: (x,y,z,w) → (x/w,y/w,z/w)
7.4 管线的绘制结果
图元经过光栅阶段的处理,从相机处看到的场景就 可以在屏幕上显示出来。这些图元可以用合适的着色模型 进行绘制,如果应用纹理技术,就会显示出纹理效果。
rl
r l tb
t b
tb
0
0
0 0
2
f n 0
f n
f 1
n
7.2.4 投影
④ 透视投影:透视投影的视景体是一个四棱台,即一个 以矩形为底面的被截金字塔。棱台的小顶面靠近视点, 棱台的大底面远离视点。其变换矩阵为:
7.2.4 投影
⑤ OpenGL中的投影:OpenGL并没有直接将物体从三维 投影到二维。不管是平行投影还是透视投影,OpenGL 利用投影变换矩阵将其对应的视景体变换为一个规范 的立方体(x∈[-1,1],y∈[-1,1],z∈[-1,1]),这个 立方体是左手系,极大地简化了后期的裁剪和消隐。
7.1 应用程序阶段
应用程序阶段是通过软件实现的,开发者能够对该阶段进行完全 的控制,可以通过改变实现方式来改进实际性能。
这一阶段要完成诸如建模、碰撞检测、加速算法、动画、力反馈、 人机交互,以及一些不在其它阶段执行的计算。
在应用程序阶段末端,将需要绘制的几何体输入到绘制管线的下 一阶段。这些几何体都是绘制图元(如点、线、三角形等),最终需 要在输出设备上显示出来。这就是应用程序阶段最重要的任务。
A
B
θ
D
C
7.2.3 光照和着色
几何模型可以有与其每个顶点相关联的颜色(或材 质)和覆盖其上的纹理。单独使用光照或纹理(特别是 纹理)可以在物体表面产生不错三维效果;但如果单纯 使用顶点颜色,效果会很差。
左图只有纹理
右图使用纹理加光源
续前页
对于受光照影响的模型来说,可以用光照方程来计算 模型上每个顶点的颜色,这个颜色近似模拟了光线与表面 之间的实际作用。物体表面每个顶点的颜色由光源位置及 性质、顶点位置和法线、顶点所在的材料性质来计算。模 型在图形上通常用三角形表示,有了顶点的颜色就可以通 过插值绘制出颜色渐变的三角形。
当将一个图元绘制为相应的象素时,需要计算象素位置处图元 的z值并与同一象素Z缓冲器内容进行比较。如果新得到的z值远远小 于Z缓冲器中的z值,那么说明即将绘制的图元与相机的距离比原来 距离相机较近的图元还要近。这样,象素的z值和颜色就由当前图元 对应的z值和颜色进行更新。如果计算出来的z值远远大于Z缓冲器中 的z值,那么颜色缓冲器和Z缓冲器就不变。
7.3 光栅阶段
几何阶段传给光栅阶段的数据仍然是几何图 形(只不过有了颜色或纹理坐标等属性),光栅 阶段的任务就是要利用这些图元数据为每个象素 (pixel-屏幕上的点)决定正确的配色,以便正 确地绘制整个图像。这个过程称为光栅化或者扫 描转换。对高性能图形系统来说,光栅化阶段必 须在硬件中完成。 光栅化的结果是将视景体内 的几何场景转化为图像。
Z缓冲器算法非常简单,图元的绘制顺序可以是任意的,所以被 大量使用。
但这种算法不支持对半透明物体的绘制。对半透明物体的绘制 顺序是:首先使用Z缓冲器对所有非透明物体进行绘制,然后在使用 z值比较但禁止写入Z缓冲器的情况下,使用画家算法按从后向前顺 序对半透明物体进行合成绘制。
7.3.5 其它位面
除去颜色缓冲和深度缓冲外,还可以使用一些其它的 缓冲器来产生一些图像的不同组合,例如:
(2)视点变换
实际的绘制只对相机(或视点)可以看到的模型进行。 为了便于投影和裁减,需要将原来在世界坐标系中表示 的物体变换到相机坐标系中,这是通过视点变换来实现的。
(3)变换的实现方式
所有的模型变换和视点变换都用4×4的 矩阵来实现。处于效率方面的考虑,可以在 进行模型变换之前,将所有的变换矩阵(包 括视点和模型变换)级联起来,彼此相乘, 形成单一矩阵。在这种情况下,模型直接变 换到了相机坐标系(或视点坐标系)。
① 目的:是将三维空间中的物体显示到二维平面。有两 种投影方式:平行投影(正投影)和透视投影。
左边为正(或平行)投影,右边为透视投影
7.2.4 投影
② 视景体:即可见空间范围。只有在视景体中的物 体才可能出现在屏幕上。
③ 平行投影:平行投影的视景体是一个长方体盒。 其变换矩阵为:
2
r
l
0
0 2
0 0
cos sin 0 0
sin cos 0 0
0 0
0 0
1 0
0 1
绕z轴旋转θ角
(4)常用变换
③放大:
Sx 0 0 0
0 Sy 0 0
0 0
0 0
Sz 0
0 1
x、y、z三个方向分别放大Sx、Sy、Sz倍
④剪切:
1 s 0 0
0 1 0 0
0 0
0 0
Βιβλιοθήκη Baidu
1 0
0 1
沿x轴方向的剪切变换,剪切程度为s=tgθ
模板缓冲器的内容可以用来控制颜色缓冲器和Z缓冲 器的绘制,而绘图函数可以用不同模式将图元绘制到模板 缓冲器中。在产生特殊效果方面,模板缓冲器是一个强大 的工具;
累加缓冲器可以用一组不同的方式对绘制的多幅图像 进行累积,能够产生反走样、运动模糊、深度场和软阴影 等效果。
颜色位面就是屏幕的显示内容。为了 避免观察者看到光栅化过程,图形系统一 般都使用了双缓冲机制:即提供两组颜色 位面,分别称为前缓冲和后缓冲。前缓冲 处于显示状态,即屏幕看到的内容;后缓 冲用于在非显示状态下进行光栅化。一旦 后缓冲绘制完毕,则切换前后缓冲。
7.3.4 深度位面
深度位面又称为Z缓冲器,它为每个象素存贮着一个z值,这个z 值是从相机到最近图元之间的距离。
7.3.1 图形的光栅化
以四边形的光栅化
Y
为例:在XY平面上,通
过从多边形最低点到最
高点之间的水平扫描,
完成对多边形的扫描转
换。对每条扫描线,多
边形的扫描转换分为四
个步骤: 求交、排序、
配对、着色。
X
光栅化结果保存在颜色和深度位面中(通过检测时): 颜色用于显示图形,深度值用于消隐。
7.3.2 位面
世界坐标系:为了确定物体在场景中的比例、位置和朝向,需要 为场景中的物体建立一个公共的坐标系,这个坐标 系称为世界坐标系。
视点坐标系:固定在观察者的双眼正中,X轴的方向向右、Y轴的 方向向上、Z轴的负方向与视线同向。又称为相机坐 标系。
规范化坐标系:(左手系)x∈[-1,1],y∈[-1,1],z∈[-1,1]。 窗口坐标系:(左手系)x∈[0,winx-1],y∈[0,winy-1],z∈[0,1]
(4)常用变换
①旋转:
1 0
0 0
0 cos sin 0
0 0
s in 0
c os 0
0 1
绕x轴旋转θ角
②平移:
1 0 0 x 0 1 0 y
0 0
0 0
1 0
z 1
平移量为Δx,Δy,Δz
cos 0 sin 0
0 1 0 0
sin 0
0 0
c os 0
10
绕y轴旋转θ角
引入齐次坐标后带来了诸多便利,主要有: ➢ 可以区分坐标和方向: (x,y,z,1) :坐标 (x,y,z,0) :方向 ➢ 规范化的坐标变换:OpenGL中的所有变换都可以 用4×4矩阵乘法表示,例如:平移和透视投影。这 是普通坐标所做不到的。
7.2.2 模型与视点变换
在图形显示过程中,模型通常需要变换到若干不同的空间 (坐标系统)中。
7.2.6 屏幕映射
只有通过裁减阶段的图元,才能进入屏幕映射阶段。在 这个阶段,通过简单的平移和缩放,图元顶点的坐标由规 范化坐标系( x∈[-1,1],y∈[-1,1],z∈[-1,1] )变换到 窗口坐标系( x∈[0,winx-1],y∈[0,winy-1],z∈[0,1] ), 至此完成整个流水线的几何阶段。准备进入下一个大阶段: 光栅阶段。
通常,光照计算是在世界坐标系中进行的,光源也在 世界坐标系中表示。但是,如果对光源及参与光照计算的 所有实体都进行了视点变换,在相机坐标系中会得到同样 的关照效果,因为这时光源与模型之间的相对位置仍然保 持不变。注意相机位置与光照计算无关。
OpenGL的光照计算在视点坐标系中进行。
7.2.4 投影
对于其它阶段,由于其全部或部分是建立在硬件基础之上,因此 要改变实现过程是比较困难的。但应用程序阶段可以改变几何和光栅 阶段所消耗的时间,例如可以设法减少传递给几何阶段的三角片数量。
由于应用程序阶段是基于软件方式实现的,因此不能像几何和光 栅阶段那样分成若干个子阶段。但是为了提高性能,可以使用并行处 理器进行加速。
7.2.5 裁减
当一个图元完全位于一个视体内部的时候,那么它可以直接进入 下一个阶段;当一个图元完全位于视体之外时,不需要绘制,不用进 入下一个阶段。但需要对哪些部分位于视体之内的图元进行裁减处理, 被裁减图元将包含新的顶点。
投影变换之后的图元只需要针对规范立方体进行裁减,这使裁减 算法大大简化。有些系统还允许用户在此基础之上,自定义数个裁减 平面。
(1)模型变换
每个模型可以和一个模型变换相联系,这样就可以对它进行 定位和定向。
同一个模型还可以和几种不同的模型变换联系在一起。就是 同一个模型有多个副本,在场景中具有不同的位置、方向和大小, 而不需要对基本几何体进行复制。
起初,模型处于自身所在的模型空间中,可以认为它根本没 有进行任何变换。
模型变换的对象是模型的顶点和法线。所有模型经过模型 变换从自己的模型坐标系变换到公共的世界坐标系中。
7.2 几何阶段
几何阶段主要负责大部分多边形和顶点 操作,执行的是计算量非常高的任务,可以 将这个阶段进一步划分为几个功能阶段。
模型和 视点变换
光照和 着色
投影
裁减
屏幕映射
7.2.1几个坐标系和齐次坐标
模型坐标系:每个物体(模型)可以有自己的坐标系,这个坐标 系称为模型坐标。它是在建模时确定的。
位面:屏幕空间对应着同 样大小一组位面,位 面的数目决定了每个 象素的变化能力。其 中最基本的是颜色位 面和深度位面。
缓冲区:常称一组位面为 缓冲区(buffer) 。 帧缓冲区(frame buffer)通常指系统 包含的所有位面,它 又细分为各种不同功 能的缓冲区。
颜色缓冲区示意 图
7.3.3 颜色位面
对平行投影来说,由于是将长方体变换为规范立 方体,所以平行投影的特点是:几何体投影的大小不 受与视点距离的影响,同样大小的物体其投影大小也 相同,因此可以用来制作建筑蓝图。
对透视投影来说,由于是将前小后大的四棱台变 换为规范立方体,所以透视投影的特点是:近处的物 体被放大、远处的物体被变小,得到逼真的视觉效果。
其中:winx、winy分别为窗口的宽和高。
7.2.1几个坐标系和齐次坐标
齐次坐标: 齐次坐标(Homogeneous Coordinate)是比普通坐标 高一维的坐标,与普通坐标可以相互转换: ➢ 从普通坐标转换为齐次坐标: (x,y,z)→(x,y,z,1) ➢ 从齐次坐标转换为普通坐标: (x,y,z,w) → (x/w,y/w,z/w)
7.4 管线的绘制结果
图元经过光栅阶段的处理,从相机处看到的场景就 可以在屏幕上显示出来。这些图元可以用合适的着色模型 进行绘制,如果应用纹理技术,就会显示出纹理效果。
rl
r l tb
t b
tb
0
0
0 0
2
f n 0
f n
f 1
n
7.2.4 投影
④ 透视投影:透视投影的视景体是一个四棱台,即一个 以矩形为底面的被截金字塔。棱台的小顶面靠近视点, 棱台的大底面远离视点。其变换矩阵为:
7.2.4 投影
⑤ OpenGL中的投影:OpenGL并没有直接将物体从三维 投影到二维。不管是平行投影还是透视投影,OpenGL 利用投影变换矩阵将其对应的视景体变换为一个规范 的立方体(x∈[-1,1],y∈[-1,1],z∈[-1,1]),这个 立方体是左手系,极大地简化了后期的裁剪和消隐。
7.1 应用程序阶段
应用程序阶段是通过软件实现的,开发者能够对该阶段进行完全 的控制,可以通过改变实现方式来改进实际性能。
这一阶段要完成诸如建模、碰撞检测、加速算法、动画、力反馈、 人机交互,以及一些不在其它阶段执行的计算。
在应用程序阶段末端,将需要绘制的几何体输入到绘制管线的下 一阶段。这些几何体都是绘制图元(如点、线、三角形等),最终需 要在输出设备上显示出来。这就是应用程序阶段最重要的任务。
A
B
θ
D
C
7.2.3 光照和着色
几何模型可以有与其每个顶点相关联的颜色(或材 质)和覆盖其上的纹理。单独使用光照或纹理(特别是 纹理)可以在物体表面产生不错三维效果;但如果单纯 使用顶点颜色,效果会很差。
左图只有纹理
右图使用纹理加光源
续前页
对于受光照影响的模型来说,可以用光照方程来计算 模型上每个顶点的颜色,这个颜色近似模拟了光线与表面 之间的实际作用。物体表面每个顶点的颜色由光源位置及 性质、顶点位置和法线、顶点所在的材料性质来计算。模 型在图形上通常用三角形表示,有了顶点的颜色就可以通 过插值绘制出颜色渐变的三角形。
当将一个图元绘制为相应的象素时,需要计算象素位置处图元 的z值并与同一象素Z缓冲器内容进行比较。如果新得到的z值远远小 于Z缓冲器中的z值,那么说明即将绘制的图元与相机的距离比原来 距离相机较近的图元还要近。这样,象素的z值和颜色就由当前图元 对应的z值和颜色进行更新。如果计算出来的z值远远大于Z缓冲器中 的z值,那么颜色缓冲器和Z缓冲器就不变。
7.3 光栅阶段
几何阶段传给光栅阶段的数据仍然是几何图 形(只不过有了颜色或纹理坐标等属性),光栅 阶段的任务就是要利用这些图元数据为每个象素 (pixel-屏幕上的点)决定正确的配色,以便正 确地绘制整个图像。这个过程称为光栅化或者扫 描转换。对高性能图形系统来说,光栅化阶段必 须在硬件中完成。 光栅化的结果是将视景体内 的几何场景转化为图像。
Z缓冲器算法非常简单,图元的绘制顺序可以是任意的,所以被 大量使用。
但这种算法不支持对半透明物体的绘制。对半透明物体的绘制 顺序是:首先使用Z缓冲器对所有非透明物体进行绘制,然后在使用 z值比较但禁止写入Z缓冲器的情况下,使用画家算法按从后向前顺 序对半透明物体进行合成绘制。
7.3.5 其它位面
除去颜色缓冲和深度缓冲外,还可以使用一些其它的 缓冲器来产生一些图像的不同组合,例如:
(2)视点变换
实际的绘制只对相机(或视点)可以看到的模型进行。 为了便于投影和裁减,需要将原来在世界坐标系中表示 的物体变换到相机坐标系中,这是通过视点变换来实现的。
(3)变换的实现方式
所有的模型变换和视点变换都用4×4的 矩阵来实现。处于效率方面的考虑,可以在 进行模型变换之前,将所有的变换矩阵(包 括视点和模型变换)级联起来,彼此相乘, 形成单一矩阵。在这种情况下,模型直接变 换到了相机坐标系(或视点坐标系)。
① 目的:是将三维空间中的物体显示到二维平面。有两 种投影方式:平行投影(正投影)和透视投影。
左边为正(或平行)投影,右边为透视投影
7.2.4 投影
② 视景体:即可见空间范围。只有在视景体中的物 体才可能出现在屏幕上。
③ 平行投影:平行投影的视景体是一个长方体盒。 其变换矩阵为:
2
r
l
0
0 2
0 0
cos sin 0 0
sin cos 0 0
0 0
0 0
1 0
0 1
绕z轴旋转θ角
(4)常用变换
③放大:
Sx 0 0 0
0 Sy 0 0
0 0
0 0
Sz 0
0 1
x、y、z三个方向分别放大Sx、Sy、Sz倍
④剪切:
1 s 0 0
0 1 0 0
0 0
0 0
Βιβλιοθήκη Baidu
1 0
0 1
沿x轴方向的剪切变换,剪切程度为s=tgθ