Upload
nero
View
112
Download
5
Embed Size (px)
DESCRIPTION
第七章 真实感图形显示. 7.1 线 消 隐. 7.2 面 消 隐. 7.3 光 照 模 型. 7.4 光 线 跟 踪. 7.5 表面图案与纹理. 7.6 颜 色 空 间. 基本概念. 一 . 为什么要消隐 因为计算机图形处理的过程中,不会自动消去隐藏部分,相反会将所有的线和面都显示出来。 所以 :如果想有真实感地显示三维物体,必须在视点确定之后,将对象表面上不可见的点、线、面消去。执行这种功能的算法,称为消隐算法。 例如:. 7.1 线 消 隐. 7.1.1 消隐的分类 线消隐 (Hidden-line) - PowerPoint PPT Presentation
Citation preview
一 . 为什么要消隐 因为计算机图形处理的过程中,不会自动消去隐藏部分,相反会将所有的线和面都显示出来。 所以:如果想有真实感地显示三维物体,必须在视点确定之后,将对象表面上不可见的点、线、面消去。执行这种功能的算法,称为消隐算法。
例如:
•线消隐 是以场景中的物体为处理单元,将一个物体与其余的 k - 1 个物体逐一比较,仅显示它可见的表面以达到消隐的目的。此类算法通常用于消除隐藏线。 •假定场景中有 k 个物体,平均每个物体的表面由 h 个多边形构成,其计算复杂度为 O((kh)2) 。
•面消隐是以窗口内的每个像素为处理单元, 确定在每一个像素处,场景中的物体哪一个距离观察点最近(可见的 ) ,从而用它的颜色来显示该像素。此类算法通常用于消除隐藏面。 •若显示区域中有 m×n 个像素,则其计算复杂度为O(mnkh) 。
7.1.2 凸多面体的隐藏线消隐 凸多面体是由若干个平面围成的物体。假设这些平面方程为 aix+biy+ciz+di=0 , i=1, 2, …, n (8.1)
变换方程的系数,使 (ai, bi, ci) 指向物体外部的。那么: 假设式 (8.1) 所定义的凸多面体在以视点为顶点的视图四棱锥内,视点与第 i 个面上一点连线的方向为 (li, mi, ni) 。那么自隐藏面的判断方法是: (ai, bi, ci)(li, mi, ni)>0
任意两个自隐藏面的交线,为自隐藏线。(自隐藏线应该用虚线输出)。
8.1.3 凹多面体的隐藏线消隐• 凹多面体的隐藏线消除比较复杂。• 假设凹多面体用它的表面多边形的集合表示 ,消除隐藏线的问题可归结为:
对于一条空间线段 P1P2 和一个多边形,判断线段是否被多边形遮挡 。如果被遮挡,求出隐藏部分
线段和多边形的关系有:1) 线段与多边形的任何边均不相交。处理方法比较简单。2) 线段与多边形相交。那么多边形的边把线段投影的参数区间 [0, 1] 分割成若干子区间,每个子区间对应一条子线段 ( 如下图所示 ) ,进一步判断各子线段的隐藏性 。
线段投影被分为若干子线段
基本思想: •在图象空间中,将待显示的所有多边形按深度值从小到大排序,用前面可见多边形去切割后面的多边形,最终使得每个多边形要么是完全可见,要么是完全不可见。用区域排序算法消隐,需要用到一个多边形裁剪算法。
7.2.1 7.2.1 区域排序算法(区域排序算法( 11 ))
• 当对两个形体相应表面的多边形进行裁剪时,我们称用来裁剪的多边形为裁剪多边形,另一个多边形为被裁剪多边形。算法要求多边形的边都是有向的,不妨设多边形的外环总是顺时针方向的,并且沿着边的走向,左侧始终是多边形的外部,右侧是多边形的内部。若两多边形相交,新的多边形可以用“遇到交点后向右拐”的规则来生成。于是被裁剪多边形被分为两个乃至多个多边形;我们把其中落在裁剪多边形外的多边形叫作外部多边形;把落在裁剪多边形之内的多边形叫作内部多边形。
区域排序算法(区域排序算法( 22 ))
算法的步骤:⑴ 进行初步深度排序,如可按各多边形 z 向坐标最小值 (或最大值、平均值 ) 排序。⑵ 选择当前深度最小 ( 离视点最近 ) 的多边形为裁剪多边形。⑶ 用裁剪多边形对那些深度值更大的多边形进行裁剪。⑷ 比较裁剪多边形与各个内部多边形的深度,检查裁剪多边形是否是离视点最近的多边形。如果裁剪多边形深度大于某个内部多边形的深度,则恢复被裁剪的各个多边形的原形,选择新的裁剪多边形,回到步骤⑶再做,否则做步骤⑸。
⑸ 选择下一个深度最小的多边形作为裁剪多边形,从步骤⑶开始做,直到所有多边形都处理过为止。在得到的多边形中,所有内部多边形是不可见的,其余多边形均为可见多边形。
8.2.2 深度缓存 (Z-buffer) 算法•由来: 帧缓冲器 – 保存各像素颜色值 (CB)
z缓冲器 --保存各像素处物体深度值 (ZB)
z缓冲器中的单元与帧缓冲器中的单元一一对应•思路:• 先将 z缓冲器中个单元的初始值置为 +Zmax ( 大于场景中的所有 Z值 ) 。当要改变某个像素的颜色值时,首先检查当前多边形的深度值是否小于该像素原来的深度值(保存在该像素所对应的 Z缓冲器的单元中),如果小于,说明当前多边形更靠近观察点,用它的颜色替换像素原来的颜色;否则说明在当前像素处,当前多边形被前面所绘制的多边形遮挡了,是不可见的,像素的颜色值不改变。
x
y z视线方向
视点位置
屏幕像素 F — Buffer Z—Buffer
投影面
深度缓存算法 ( Z—Buffer 算法 )Z—Buffer ---- 用于存放与屏幕上像素点对应的物体上点的深度值。
Z-buffer 算法的步骤如下:⑴ 初始化 ZB 和 CB ,使得 ZB(i, j)=Zmax , CB(i, j)=背景色。其中, i=1, 2, …, m , j=1, 2, …, n 。⑵ 对多边形,计算它在点 (i, j) 处的深度值 zi, j 。⑶ 若 zijZB(i, j) ,则 ZB(i, j)=zij , CB(i, j)= 多边形的颜色。⑷ 对每个多边形重复⑵、⑶两步。最后,在 CB 中存放的就是消隐后的图形。
• 这个算法的关键在第⑵步,要尽快判断出哪些点落在一个多边形内 ,并尽快求出一个点的深度值 。• 缺点:
(1) : ZB 和 CB 两个缓存数组占用的存储单元太多 ,需要有一个较大容量的 Z—Buffer 。(2):在每个多边形占据的每个像素处都要计算深度值,计算量大
8.2.4 扫描线算法• 在多边形填充算法中,活性边表的使用取得了节省运行空间的效果。用同样的思想改造Z-buffer 算法:将整个绘图区域分割成若干个小区域,然后一个区域一个区域地显示,这样Z缓冲器的单元数只要等于一个区域内像素的个数就可以了。如果将小区域取成屏幕上的扫描线,就得到扫描线 Z缓冲器算法。
for ( 各条扫描线 )
{ 将帧缓冲器 I(x) 置为背景色;将 Z 缓冲器的 Z(x) 置为最大值; for ( 每个多边形) { 求出多边形在投影平面上的投影与当前扫描线的相交区间
for (该区间内的每个像素) if ( 多边形在此处的 Z 值小于 Z(x) ) { 置帧缓冲器 I(x) 值为当前多边形颜色;
置 Z 缓冲器 Z(x) 值为多边形在此处的 Z 值 ; }
}
}
扫描线算法描述
7.3.1 光源特性和物体表面特性 Shading :显示一个物体的色彩以及色彩在光照环境下的明暗变化 的描绘方法。 ( 相关因素:光源特性和物体表面特性。 )
一:光源特性 包括 1 :光的色彩 ( R 、 G 、 B ) 2 :光的强度 由 R, G, B三种色光的强弱决定,总的光强为:
Total_Value=0.30*Value_R+0.59*Value_G+0.11*Value_B
点光源 3 :光的方向 分布式光源 漫射光源
物体表面特性包括如下内容: ⑴ 反射系数
由物体表面的材料和形状决定,分为漫反射 (Diffuse Reflection) 系数和镜面反射 (Specular Reflection) 系数。⑵ 透射系数 记为 Tp ,描述物体透射光线的能力,且有 0≤Tp≤1 。⑶ 表面方向
7.3.2 光照模型及其实现 • 光照模型 (Illumination Model)描述物体表面的色彩明暗同光源特性、物体表面特性之间的关系。
•光照模型分 3 个部分描述这种关系,即漫射光线的情况、直线光线的情况和透射光线的情况。
1. 直射光线的情况 •在这种情况下,物体表面的明暗随表面法矢量和入射光线 Is 的夹角 I 的改变而变化。此时,物体表面会发生两类反射,即漫反射和镜面反射。• 在直射照明下,物体表面 P 点的漫反射和镜面反射的模型根据 Lambert 定律和 Bui-Tuong Phong的实验提出 ( 图 8.5) 。 EPs=RPcos iIPs+WP(i)cosn sIPs
光照模型中各参数的图示
Eps : P 点反射的直射光线 IPs 的光强RP : P 点的漫反射系数I : P 点的法矢量 N 与入射光方向 L 的夹角Ips :入射的直射光线的强度WP(i) : P 点的镜面反射系数 (入射角 i 的函数 )
EPs=
RPcos iIPs+WP(i)cosn sIPs
3. 漫射光线的情况 漫射光源是从四面八方均匀照来的,物体表面的色彩明暗与表面的形状无关,仅与表面的反射系数有关 。
漫射光源照明的模型为 EPd = RPId
上式可以写为EPd-r=RP-rId-r , EPd-g=RP-gId-g , EPd-b=RP-bId-b
• 将上述 3 种情况综合起来,便获得物体表面 P 点处所发光强 EP 的计算公式: EP=EPd+EPs+EPt
= RPId+(RPcos i+WPcosn s)IPs+TPIpb
• 上式中只有 cos i 和 cos s 的值是未知的,需要推算。(详见 7.3.2)
7.3.3 明暗的光滑处理 在计算机图形学中,曲面体 ( 例如球 ) 通常是用多面体逼近表达的。这时,分别计算各个面的亮度,就会在多边形与多边形的交界处产生明暗的连续变化,影响曲面的显示效果。
解决方法: 采用插补的方法,使得表面明暗光滑化。最常使用的表面明暗光滑化的方法有两种,称为Gourand 方法和 Phong 方法。
Gourand 光滑方法如下:基本思想:在每个多边形顶点处计算颜色,然后在各个多边形内部进行线性插值,得到多边形内部各点颜色。即它是一种颜色插值着色方法。基本步骤:⑴ 先计算出多面体顶点的法线方向 ⑵ 用光照模型求得 V点的亮度。 ⑶ 由两顶点的亮度,插值得出棱上各点的亮度。由棱上各点的亮度,插值得出面上各点的亮度。(下面详细介绍每步)
Step1: 计算多面体顶点的法线方向• 设与多面体顶点 V 相邻的多边形为 P1 , P2 ,…,Pn ,它们的法线分别为 N1(a1, b1, c1) , N2(a2, b2, c2) ,…, Nn(an, bn, cn) 。则 V的法线 nV取做:
nV = (a1+a2+…+an)i+(b1+b2+…+bn)j+(c1+c2+…+cn)k
Step2: 用光照模型求得 V点的亮度。 Step3:由两顶点的亮度,插值得出棱上各点的亮度。由棱上各点的亮度,插值得出面上各点的亮度 。
21
412
21
2414 yy
yyIyyyyII
23
632
23
2636 yy
yyIyyyyII
46
456
46
5645 xx
xxIxxxxII
Gourand 光滑化方法 • 优点:能有效的显示漫反射曲面,计算量小• 缺点:1 、高光有时会异常2 、当对曲面采用不同的多边形进行分割时会产生不同的效果。3、 Gouraud明暗处理会造成表面上出现过亮或过暗的条纹,称为马赫带(Mach_band)效应• 改进- Phong 提出双线性法向插值,以时间为代价,解决高光问题
• 基本思想:通过对多边形顶点的法矢量进行插值,获得其内部各点的法矢量,又称为法向插值着色方法。•步骤
1 、计算多边形单位法矢量2 、计算多边形顶点单位法矢量
3 、对多边形顶点法矢量进行双线性插值, 获得内部各点的法矢量 4 、利用光照明方程计算多边形内部各点颜色
Phong 光滑方法
Phong 着色方法NA由 N1 、 N2 线性插值得到:
BAB
AA
AB
BP
BBB
AAA
NxxxxN
xxxxN
NyyyyN
yyyyN
NyyyyN
yyyyN
331
11
31
3
221
11
21
2
两种方法的比较 1• Phong 着色方法绘制的图形比 Gouraud方法更真实,体现在两个方面:高光区域的扩散,产生正确的高光区域• 1 : Phong 着色方法计算量远大于 Gouraud 着色方法 2 :在处理某些多边形分割的曲面时, Phong算法还不如 Gouraud算法好。
阴影可分为两种:本影:本影即景物表面上那些没有被光源(景物中所有特定光源的集合)直接照射的部分半影:而半影指的是景物表面上那些被某些特 定光源(或特定光源的一部分)直接照射但并非被所有特定光源直接照射的部分。一般来说,半影的计算比本影要复杂得多
方法 2 :曲面细节多边形方法 • 首先取光源方向为视线方向对景物进行第一次消隐,产生相对光源可见的景物多边形(称为曲面细节多边形),并通过标识数将这些多边形与它们覆盖的原始景物多边形联系在一起。位于编号 i 的原始景物多边形上的曲面细节多边形也注以编号 i 。接着算法取视线方向对景物进行第二次消隐。
方法 3 : z 缓冲器方法 • 为了方便地在光滑曲面片上生成阴影 , Williams提出一种 z缓冲器方法 首先,利用 z缓冲器消隐算法取光源为视点对景物进行消隐。所有景物均变换到光源坐标系 第二步,仍采用 z缓冲器消隐算法按视线方向计算画面
方法 3 :光线跟踪方法 • 1980年Whitted提出了整体光照明模型,并用光线跟踪( raytracing )技术来解这个模型
•在光线跟踪算法中,要确定某点是否位于某个光源的阴影内,只要从该点出发向光源发出一根测试光线即可
线光源的软阴影 • 线光源产生的阴影是渐变的,将这种渐变的阴影称之为软阴影,而点光源产生的阴影是没有渐变的,称为硬阴影。•线光源同样有采样数目的问题,只有表示线光源的点光源数目非常多,才可能产生平滑的软阴影。•在 Wolfgang Heidrich 的文章中,提出了使用阴影贴图,为线光源生成软阴影的方法
Wolfgang Heidrich 提出的方法如下:1. 将线光源抽象为两个点光源 A 和 B ,分别是线光源的两端。2. 从点 B 处沿观察方向绘制物体,利用生成的深度缓存生成边界多边形,如 PQ 。3. 将边界多边形位于遮挡物上的点颜色设为 (0,0,0) ,位于阴影所在表面上的点颜色设为 (1,1,1) 。背景颜色设为 (0.5,0.5,0.5) ,两个通道组合后,颜色将为 (1,1,1) ,使得这些位置的物体将完全被光源照射。从点 A 处沿观察方向绘制边界多边形,可得到 a 图中下面部分的可见度值,称为 A 点的可见度通道。4. 同样的方法生成 B 点的可见度通道,如图 b 。5. 将两个通道组合,得到线光源可见度通道,表示了线光源产生的阴影变化,如图 c 。
7.3.5 整体光照模型 • 简单光照模型(亦称局部光照模型)不考虑周围环境对当前景物表面的光照明影响,忽略了光在环境景物之间的传递,很难表现自然界复杂场景的高质量真实感图形。为了增加图形的真实感,必须考虑环境的漫射、镜面反射和规则投射对景物表面产生的整体照明效果。
• 表现场景整体照明效果的一个重要方面是透明现象的模拟 。•整体光照明模型还要模拟光在景物之间的多重反射 。•Whitted 光照明模型是一种整体光照明模型 ,这一模型能很好地模拟光能在光滑物体表面之间的镜面反射和通过理想透明体产生的规则透射
Witted 光照模型•Whitted 光照模型基于如下假设:•物体表面向视点方向 V辐射的光亮度 Il 由三部分组成:( 1 )光源直接照射引起的反射光亮度 Ill 。( 2 )来自 V的镜面反射方向 R的其它物体反射或折射来的光的亮度 Isl 。( 3)来自 V的透射方向 T的其它物体反射或折射来的光的亮度 Itl
Witted 光照模型•Witted 光照模型: •或
o Is为镜面反射方向的入射光强度; Ks 为镜面反射系数,为 0~ 1 之间的一个常数o It为折射方向光强, Kt 为透射系数,是 0 ~ 1之间的常数o Ic的计算可采用 Phong模型因此,关键是 Is 和 It 的计算。如何计算呢? 由于 Is 和 It 是来自 V 的镜面反射方向 r 和规则透射方向 t 的环境光亮度,因而首先必须确定r 和 t
tttsssl ICKICKII ttssc IkIk
Witted 光照模型 -反射、折射方向计算•已知视线方向 V,求其反射方向 R与折射方向 T( N是表面的法向方向)•视线 V的反射方向 r•折射方向 t
其中:NVNt )(fk
VNr 2
1
2
t It
N
V
i1=
sin(i2)=1/2sin() |V)(N|
VNV
2
8.4.1 光线跟踪的基本原理 • 光线跟踪方法沿着到达视点的光线的反方向跟踪,经过屏幕上每一像素,找出与视线所交的物体表面点P0 ,并继续跟踪,找出影响P0 点光强的所有光源,从而算出 P0 点上光照强度。
光线跟踪示意图
• 右图显示了一个例子。连接观察点和屏幕上的一个像素,即形成一条视线。
视线在 P0 处的反射和透射
• 视线 V 在 P0 处产生反射和透射,所产生的反射线和透射线作为新的视线与各平面求出新的交点 P1 、 P2( 图 8.13) ,并分别产生新的反射线和透射线……这样不断深入,直至所产生的射线射出场景。由此得到视线跟踪轨迹上的一系列交点 P0 , P1 , P2 ,…, Pn 。这个过程可以表示为一棵光线跟踪树
• 对于树上任意一结点 Pi , Pi 处沿视线方向 V射去的光强 I 为 I=IG+WPIr
+TPIt
Pi 点所受到的光照
光线跟踪方法优点: 1) 各物体之间反射的影响,因此显示效果十分逼真。2) 有消隐功能3) 有影子效果 4) 该算法具有并行性质
⒊ 包含性检查算法 包含性检查是检查 P(x, y, z) 是否在多边形 V(V1, V2, …, Vn) 之内。 Vi 是多边形的顶点,坐标为 (xi, yi, zi) , 1≤i≤n 。包含性检查的算法思想如下:
⑴ P 与 V 在 xOy 内的投影为 P 与 V ,设 Vi 所含的一个顶点。则 P 、 Vi 的坐标为P=(x, y) , Vi=(xi, yi)
8.4.3 光线跟踪算法
光线跟踪算法中的数据结构
•光线跟踪算法中的每一条光线要与场景中的各个物体所含的各个面求交。有必要对数据进行管理 •对于多面体,常采取链表构成的树形结构对数据进行分层表达与管理。
7.5.1 表面图案的描绘 将一幅平面图案描绘到物体表面上的过程如下:⑴ 将平面图案上的各点 (x, y)映射到物体表面的各点 (x, y, z) 。⑵ 求出点 (x, y, z) 处新的反射系数。⑶ 用光照模型计算物体表面点 (x, y, z) 的色彩明暗。
凸四边形 S 和 S 之间的位置映射算法如下:⑴ 求 S 中的边的交点 F 、 E ,以及 S 中的边的交点F 、 E 的位置。⑵ 对于目的多边形 S 中的每一个元素 P ,寻找 S 中对应位置 P 。① 求 PF 与 AB 的交点 P1 ,由 P1 得 f1/f2 ;求 PE 与 BC 的交点 P2 ,由 P2 得 e1/e2 。② 由 f1/f2=f1/f2 得 P1 的位置,由 e1/e2=e1/e2 得 P2的位置。③ 求 P1 F 与 P2E 的交点,即为点 P 的位置。 ④ 取 P 的色彩,求得 P 点新的反射系数。
7.5.2 表面纹理的描绘 Blinn 在 1978年提出,用扰动物体表面法线方向的方法来模拟表面凹凸纹理的真实感显示效果。
物体的新表面 S(u, v) 定义为 S(u, v)=Q(u, v)+P(u, v)
uPuPuQuS )||
(|| N
NNN
vPvPvQvS )||
(|| N
NNN
式 (8.16) 对 u 、 v 分别求偏导函数,得
上式中第三项皆可忽略,即得||N
N uPuQuS
||NN
vPvQvS
记 NS 为 S(u, v) 的法向量。法向量可以表示为两个偏导向量 Su 和 Sv 的叉积,即NS = SuSv
||
)(
||
)(
NN
NN
N
uQvPvQuPvQuQ
S
||
)(
||
)(
NN
NN
N
uQvPvQuP=
8.6.1 颜色的基本概念 • 大红、血红、铁锈红、浅黄、柠檬黄 • 格拉斯曼 (Grassmann H.) 定律,从视觉的角度看,颜色包含 3个要素,即色调 (hue) 、饱和度 (saturation) 和亮度 (brightness) 。分别对应光学中的术语:主波长 (dominant wavelength) 、纯度 (purity) 和辉度 (luminance) 。•可以用光谱能量分布图来表征光源特性
图 7.28 某种颜色光的光谱能量分布
7.6.2 CIE 色度图 • 原色 。红、绿、蓝是 3种原色。• 国际照明委员会 ( 简称 CIE)规定了 3种标准原色X、 Y、 Z c=xX+yY+zZ
• 权值规格化 : x y z
x+y+z x+y+z x+y+z x= y= z=
• CMY 颜色系统 红、绿、蓝的补色青 (Cyan) 、品红 (Magenta) 、黄 (Yellow) 为原色构成 。常用于从白光中滤去某种颜色,故称为减性原色系统 。
图 CMY 三原色的减色效果示意图