第七章  真实感图形显示
Download
1 / 85

??? ??????? - PowerPoint PPT Presentation


  • 101 Views
  • Uploaded on

第七章 真实感图形显示. 7.1 线 消 隐. 7.2 面 消 隐. 7.3 光 照 模 型. 7.4 光 线 跟 踪. 7.5 表面图案与纹理. 7.6 颜 色 空 间. 基本概念. 一 . 为什么要消隐 因为计算机图形处理的过程中,不会自动消去隐藏部分,相反会将所有的线和面都显示出来。 所以 :如果想有真实感地显示三维物体,必须在视点确定之后,将对象表面上不可见的点、线、面消去。执行这种功能的算法,称为消隐算法。 例如:. 7.1 线 消 隐. 7.1.1 消隐的分类 线消隐 (Hidden-line)

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '??? ???????' - nero


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

第七章 真实感图形显示

7.1 线 消 隐

7.2 面 消 隐

7.3 光 照 模 型

7.4 光 线 跟 踪

7.5 表面图案与纹理

7.6 颜 色 空 间


基本概念

一.为什么要消隐

因为计算机图形处理的过程中,不会自动消去隐藏部分,相反会将所有的线和面都显示出来。

所以:如果想有真实感地显示三维物体,必须在视点确定之后,将对象表面上不可见的点、线、面消去。执行这种功能的算法,称为消隐算法。

例如:


7.1 线 消 隐

  • 7.1.1 消隐的分类

  • 线消隐 (Hidden-line)

  • 对象:线框模型

  • 面消隐 (Hidden-surface)

  • 对象:填色图

线框模型

填色图


7.1 线 消 隐

  • 线消隐是以场景中的物体为处理单元,将一个物体与其余的 k-1 个物体逐一比较,仅显示它可见的表面以达到消隐的目的。

  • 此类算法通常用于消除隐藏线。

  • 假定场景中有 k 个物体,平均每个物体的表面由 h 个多边形构成,其计算复杂度为 O((kh)2)。


7.1 线 消 隐

算法描述如下:

for (场景中的每一个物体)

{ 将该物体与场景中的其它物体进行比较,确定其表面的可见部分;

显示该物体表面的可见部分;

}

(示例如右图)

线消隐示例


7.1 线 消 隐

  • 面消隐是以窗口内的每个像素为处理单元, 确定在每一个像素处,场景中的物体哪一个距离观察点最近(可见的),

  • 从而用它的颜色来显示该像素。此类算法通常用于消除隐藏面。

  • 若显示区域中有 m×n 个像素,则其计算复杂度为O(mnkh)。


7.1 线 消 隐

算法描述如下:

for (窗口内的每一个像素)

{确定距观察点最近的物体,以该物体表面的颜色来显示像素;

}

面消隐示例


7.1 线 消 隐

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

任意两个自隐藏面的交线,为自隐藏线。(自隐藏线应该用虚线输出)。


7.1 线 消 隐

  • 8.1.3 凹多面体的隐藏线消隐

  • 凹多面体的隐藏线消除比较复杂。

  • 假设凹多面体用它的表面多边形的集合表示 ,消除隐藏线的问题可归结为:

  • 对于一条空间线段P1P2和一个多边形,判断线段是否被多边形遮挡 。如果被遮挡,求出隐藏部分


7.1 线 消 隐

  • 线段和多边形的关系有:

    • 线段与多边形的任何边均不相交。处理方法比较简单。

    • 线段与多边形相交。那么多边形的边把线段投影的参数区间[0, 1]分割成若干子区间,每个子区间对应一条子线段(如下图所示),进一步判断各子线段的隐藏性 。

线段投影被分为若干子线段


7.1 线 消 隐

  • 把各个子线段与所有需要比较的多边形依次进行隐藏性判别,记下各条隐藏子线段的位置。最后,对这些区间进行求并集运算,即可确定总的隐藏子线段的位置,余下的则是可见子线段 (右图)

可见子线段的确定


7.2 面 消 隐

7.2.1 区域排序算法(1)

基本思想:

  • 在图象空间中,将待显示的所有多边形按深度值从小到大排序,用前面可见多边形去切割后面的多边形,最终使得每个多边形要么是完全可见,要么是完全不可见。用区域排序算法消隐,需要用到一个多边形裁剪算法。


7.2 面 消 隐

区域排序算法(2)

  • 当对两个形体相应表面的多边形进行裁剪时,我们称用来裁剪的多边形为裁剪多边形,另一个多边形为被裁剪多边形。算法要求多边形的边都是有向的,不妨设多边形的外环总是顺时针方向的,并且沿着边的走向,左侧始终是多边形的外部,右侧是多边形的内部。若两多边形相交,新的多边形可以用“遇到交点后向右拐”的规则来生成。于是被裁剪多边形被分为两个乃至多个多边形;我们把其中落在裁剪多边形外的多边形叫作外部多边形;把落在裁剪多边形之内的多边形叫作内部多边形。


7.2 面 消 隐

算法的步骤:

⑴ 进行初步深度排序,如可按各多边形z向坐标最小值(或最大值、平均值)排序。

⑵ 选择当前深度最小(离视点最近)的多边形为裁剪多边形。

⑶ 用裁剪多边形对那些深度值更大的多边形进行裁剪。

⑷ 比较裁剪多边形与各个内部多边形的深度,检查裁剪多边形是否是离视点最近的多边形。如果裁剪多边形深度大于某个内部多边形的深度,则恢复被裁剪的各个多边形的原形,选择新的裁剪多边形,回到步骤⑶再做,否则做步骤⑸。

⑸ 选择下一个深度最小的多边形作为裁剪多边形,从步骤⑶开始做,直到所有多边形都处理过为止。在得到的多边形中,所有内部多边形是不可见的,其余多边形均为可见多边形。


7.2 面 消 隐

  • 8.2.2 深度缓存(Z-buffer)算法

  • 由来:

  • 帧缓冲器 – 保存各像素颜色值(CB)

  • z缓冲器 --保存各像素处物体深度值(ZB)

  • z缓冲器中的单元与帧缓冲器中的单元一一对应

  • 思路:

  • 先将z缓冲器中个单元的初始值置为+Zmax (大于场景中的所有Z值)。当要改变某个像素的颜色值时,首先检查当前多边形的深度值是否小于该像素原来的深度值(保存在该像素所对应的Z缓冲器的单元中),如果小于,说明当前多边形更靠近观察点,用它的颜色替换像素原来的颜色;否则说明在当前像素处,当前多边形被前面所绘制的多边形遮挡了,是不可见的,像素的颜色值不改变。


7.2 面 消 隐

深度缓存算法 ( Z—Buffer算法)

Z—Buffer ---- 用于存放与屏幕上像素点对应的物体上点的深度值。

y

投影面

视线方向

z

x

视点位置

屏幕像素

F — Buffer

Z—Buffer


7.2 面 消 隐

Z-buffer算法的步骤如下:

⑴ 初始化ZB和CB,使得ZB(i, j)=Zmax,CB(i, j)=背景色。其中,i=1, 2, …, m,j=1, 2, …, n。

⑵ 对多边形,计算它在点(i, j)处的深度值zi, j。

⑶ 若zijZB(i, j),则ZB(i, j)=zij,CB(i, j)=多边形的颜色。

⑷ 对每个多边形重复⑵、⑶两步。最后,在CB中存放的就是消隐后的图形。


7.2 面 消 隐

  • 这个算法的关键在第⑵步,要尽快判断出哪些点落在一个多边形内 ,并尽快求出一个点的深度值 。

  • 缺点:

  • (1):ZB和CB两个缓存数组占用的存储单元太多 ,需要有一个较大容量的 Z—Buffer 。

    (2):在每个多边形占据的每个像素处都要计算深度值,计算量大


7.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 光 照 模 型

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:光的方向 分布式光源

漫射光源


7.3 光 照 模 型

  • 右边是三种光源的示意图。其中点光源和分布式光源合称直射光源;

三种光源


7.3 光 照 模 型

物体表面特性包括如下内容:

⑴反射系数

由物体表面的材料和形状决定,分为漫反射(Diffuse Reflection)系数和镜面反射(Specular Reflection)系数。

⑵透射系数

记为Tp,描述物体透射光线的能力,且有0≤Tp≤1。

⑶表面方向


7.3 光 照 模 型

7.3.2 光照模型及其实现

  • 光照模型(Illumination Model)描述物体表面的色彩明暗同光源特性、物体表面特性之间的关系。

  • 光照模型分3个部分描述这种关系,即漫射光线的情况、直线光线的情况和透射光线的情况。


7.3 光 照 模 型

  • 1.直射光线的情况

  • 在这种情况下,物体表面的明暗随表面法矢量和入射光线Is的夹角I的改变而变化。此时,物体表面会发生两类反射,即漫反射和镜面反射。

  • 在直射照明下,物体表面P点的漫反射和镜面反射的模型根据Lambert定律和Bui-Tuong Phong的实验提出(图8.5)。

  • EPs=RPcos iIPs+WP(i)cosnsIPs


7.3 光 照 模 型

EPs=

RPcos iIPs+WP(i)cosnsIPs

Eps: P点反射的直射光线IPs的光强

RP: P点的漫反射系数

光照模型中各参数的图示

I: P点的法矢量N与入射光方向L的夹角

Ips:入射的直射光线的强度

WP(i):P点的镜面反射系数(入射角i的函数)


7.3 光 照 模 型

  • WP(i)是P点的镜面反射系数(入射角i的函数)。由于W(i)的计算比较复杂,实际中常用一个常数W代替。

W(i)与i的关系


  • n控制高光的聚散,它和P点的材料有关。对于光滑发亮的金属表面,n值取得大,从而产生会聚的高光点

n与高光区域大小的关系


7.3 光 照 模 型

  • 2.透射光线的情况

  • 透射模型如下:

  • EPt = TPIPb

  • 其中:

  • Ept:物体表面P点处透射出的光强

  • TP:P点的透射系数(取值范围为0~1)

  • Ipb:到达P点背后的光强。


7.3 光 照 模 型

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+(RPcos i+WPcosns)IPs+TPIpb

  • 上式中只有cos i和cos s的值是未知的,需要推算。(详见7.3.2)


7.3 光 照 模 型

7.3.3 明暗的光滑处理

在计算机图形学中,曲面体(例如球)通常是用多面体逼近表达的。这时,分别计算各个面的亮度,就会在多边形与多边形的交界处产生明暗的连续变化,影响曲面的显示效果。

解决方法:

采用插补的方法,使得表面明暗光滑化。最常使用的表面明暗光滑化的方法有两种,称为Gourand方法和Phong方法。


7.3 光 照 模 型

Gourand光滑方法如下:

基本思想:在每个多边形顶点处计算颜色,然后在各个多边形内部进行线性插值,得到多边形内部各点颜色。即它是一种颜色插值着色方法。

基本步骤:

⑴ 先计算出多面体顶点的法线方向

⑵ 用光照模型求得V点的亮度。

⑶ 由两顶点的亮度,插值得出棱上各点的亮度。由棱上各点的亮度,插值得出面上各点的亮度。

(下面详细介绍每步)


7.3 光 照 模 型

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


7.3 光 照 模 型

Step2: 用光照模型求得V点的亮度。

Step3:由两顶点的亮度,插值得出棱上各点的亮度。由棱上各点的亮度,插值得出面上各点的亮度 。


保留abc折痕的情况


Gourand如果希望在某处不处理成光滑而要保留折痕效果光滑化方法

  • 优点:能有效的显示漫反射曲面,计算量小

  • 缺点:

  • 1、高光有时会异常

  • 2、当对曲面采用不同的多边形进行分割时会产生不同的效果。

  • 3、Gouraud明暗处理会造成表面上出现过亮或过暗的条纹,称为马赫带(Mach_band)效应

  • 改进-Phong提出双线性法向插值,以时间为代价,解决高光问题


Gourand如果希望在某处不处理成光滑而要保留折痕效果光滑化方法

  • 明暗变化失常

  • 马赫带效应


Phong如果希望在某处不处理成光滑而要保留折痕效果光滑方法

  • 基本思想:通过对多边形顶点的法矢量进行插值,获得其内部各点的法矢量,又称为法向插值着色方法。

  • 步骤

    • 1、计算多边形单位法矢量

    • 2、计算多边形顶点单位法矢量

    • 3、对多边形顶点法矢量进行双线性插值, 获得内部各点的法矢量

    • 4、利用光照明方程计算多边形内部各点颜色


7.3 如果希望在某处不处理成光滑而要保留折痕效果光 照 模 型

Phong着色方法

  • NA由N1、N2线性插值得到:


两种方法的比较如果希望在某处不处理成光滑而要保留折痕效果1

  • Phong着色方法绘制的图形比Gouraud方法更真实,体现在两个方面:高光区域的扩散,产生正确的高光区域

  • 1:Phong着色方法计算量远大于Gouraud着色方法

  • 2:在处理某些多边形分割的曲面时,Phong算法还不如Gouraud算法好。


两种方法的比较如果希望在某处不处理成光滑而要保留折痕效果2

  • Phone方法可以产生正确的高光区域

Gouraud Phone


两种方法的比较如果希望在某处不处理成光滑而要保留折痕效果3


7.3.4 如果希望在某处不处理成光滑而要保留折痕效果阴影生成

  • 目的:增加图形的立体感和场景的层次感 ,真实感


阴影可分为两种:如果希望在某处不处理成光滑而要保留折痕效果

本影:本影即景物表面上那些没有被光源(景物中所有特定光源的集合)直接照射的部分

半影:而半影指的是景物表面上那些被某些特 定光源(或特定光源的一部分)直接照射但并非被所有特定光源直接照射的部分。

一般来说,半影的计算比本影要复杂得多


方法一如果希望在某处不处理成光滑而要保留折痕效果:影域多边形方法

  • 所谓影域,就是物体投射出的台体 。判断点是否在台体中即可确定是否在阴影中。


S5

S1

S4

S2

S3

I

II

III

利用影域多边形进行阴影判断


  • 方法为了判别一可见多边形的某部分是否位于影域内,可将影域多边形置入景物多边形表中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光照模型:

    • Is为镜面反射方向的入射光强度;Ks为镜面反射系数,为0~1之间的一个常数

    • It为折射方向光强,Kt为透射系数,是0 ~ 1之间的常数

    • Ic的计算可采用Phong模型

    • 因此,关键是Is和It的计算。如何计算呢?

    • 由于Is和It是来自V的镜面反射方向r和规则透射方向t的环境光亮度,因而首先必须确定r和t


Witted表现场景整体照明效果的一个重要方面是透明现象的模拟光照模型-反射、折射方向计算

  • 已知视线方向V,求其反射方向R与折射方向T(N是表面的法向方向)

  • 视线V的反射方向r

  • 折射方向t

  • 其中:

N

V

1

2

i1=

sin(i2)=1/2sin()

t It


7.4 表现场景整体照明效果的一个重要方面是透明现象的模拟光 线 跟 踪

  • 8.4.1 光线跟踪的基本原理

  • 光线跟踪方法沿着到达视点的光线的反方向跟踪,经过屏幕上每一像素,找出与视线所交的物体表面点P0,并继续跟踪,找出影响P0点光强的所有光源,从而算出P0点上光照强度。

  • 右图显示了一个例子。连接观察点和屏幕上的一个像素,即形成一条视线。

光线跟踪示意图


7.4 表现场景整体照明效果的一个重要方面是透明现象的模拟光 线 跟 踪

  • 视线V在P0处产生反射和透射,所产生的反射线和透射线作为新的视线与各平面求出新的交点P1、P2(图8.13),并分别产生新的反射线和透射线……这样不断深入,直至所产生的射线射出场景。由此得到视线跟踪轨迹上的一系列交点P0,P1,P2,…,Pn。这个过程可以表示为一棵光线跟踪树

视线在P0处的反射和透射


7.4 表现场景整体照明效果的一个重要方面是透明现象的模拟光 线 跟 踪

  • 右图示出与上图对应的一棵光线跟踪树,光强计算方法是以后序周游的算法遍历这棵光线跟踪树。

光线跟踪树


7.4 表现场景整体照明效果的一个重要方面是透明现象的模拟光 线 跟 踪

  • 对于树上任意一结点Pi , Pi处沿视线方向V射去的光强I为 I=IG+WPIr+TPIt

光线跟踪方法优点:

  • 各物体之间反射的影响,因此显示效果十分逼真。

  • 有消隐功能

  • 有影子效果

  • 该算法具有并行性质

Pi点所受到的光照


7.4 表现场景整体照明效果的一个重要方面是透明现象的模拟光 线 跟 踪

  • 7.4.2 光线与实体的求交

  • 光线跟踪算法中75%以上的工作量用于求交计算

  • 进行求交运算之前,常用包围球或包围盒的方法对物体进行是否与光线相交的预测。

算法1:包围球检查算法

包围球


7.4 表现场景整体照明效果的一个重要方面是透明现象的模拟光 线 跟 踪

算法⒉包围盒检查算法(图7.23)

包围盒

包围盒检查算法不仅判断光线是否与包围盒相交,而且能判断光线与物体各面的交点坐标。此外,包围盒比包围球更可靠。


7.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)


表现场景整体照明效果的一个重要方面是透明现象的模拟由P向水平方向做一条射线与V各边相交,如果交点为奇数个,说明P在多边形之内;如果交点为偶数个,说明P在多边形之外。如图7.24

水平线交点的奇偶记数


7.4 表现场景整体照明效果的一个重要方面是透明现象的模拟光 线 跟 踪

8.4.3 光线跟踪算法

  • 光线跟踪算法中的每一条光线要与场景中的各个物体所含的各个面求交。有必要对数据进行管理

  • 对于多面体,常采取链表构成的树形结构对数据进行分层表达与管理。

光线跟踪算法中的数据结构


7.5 表现场景整体照明效果的一个重要方面是透明现象的模拟表面图案与纹理

7.5.1 表面图案的描绘

将一幅平面图案描绘到物体表面上的过程如下:

⑴ 将平面图案上的各点(x, y)映射到物体表面的各点(x, y, z)。

⑵ 求出点(x, y, z)处新的反射系数。

⑶ 用光照模型计算物体表面点(x, y, z)的色彩明暗。


对于目的四边形表现场景整体照明效果的一个重要方面是透明现象的模拟S内的任一点P,与在S内的对应点P的映射关系为:

两个凸多边形中的点的映射


凸四边形表现场景整体照明效果的一个重要方面是透明现象的模拟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与P2E的交点,即为点P的位置。 ④取P的色彩,求得P点新的反射系数。


  • 对于边数大于表现场景整体照明效果的一个重要方面是透明现象的模拟4的多边形,可以用网格的办法将目的多边形S和源多边形S相互对应地划分为凸四边形网格。对于网格中的每个四边形施行上述变换。

凹多边形划分为多个凸四边形分别进行映射


7.5 表现场景整体照明效果的一个重要方面是透明现象的模拟表面图案与纹理

7.5.2 表面纹理的描绘

Blinn在1978年提出,用扰动物体表面法线方向的方法来模拟表面凹凸纹理的真实感显示效果。

物体的新表面S(u, v)定义为

S(u, v)=Q(u, v)+P(u, v)

式(8.16)对u、v分别求偏导函数,得


7.5 表现场景整体照明效果的一个重要方面是透明现象的模拟表面图案与纹理

上式中第三项皆可忽略,即得

记NS为S(u, v)的法向量。法向量可以表示为两个偏导向量Su和Sv的叉积,即

NS = SuSv

=


7.6 表现场景整体照明效果的一个重要方面是透明现象的模拟颜 色 空 间

8.6.1 颜色的基本概念

  • 大红、血红、铁锈红、浅黄、柠檬黄

  • 格拉斯曼(Grassmann H.)定律,从视觉的角度看,颜色包含3个要素,即色调(hue)、饱和度(saturation)和亮度(brightness)。分别对应光学中的术语:主波长(dominant wavelength)、纯度(purity)和辉度(luminance) 。

  • 可以用光谱能量分布图来表征光源特性

图7.28 某种颜色光的光谱能量分布


7.6 表现场景整体照明效果的一个重要方面是透明现象的模拟颜 色 空 间

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=


7.6 表现场景整体照明效果的一个重要方面是透明现象的模拟颜 色 空 间

  • 所有色度值落在锥形体与x+y+z=1平面的相交区域上。把这个区域投影到xOy平面上,所得的马蹄形区域称为CIE色度图。如图所示

CIE色度图


7.6 表现场景整体照明效果的一个重要方面是透明现象的模拟颜 色 空 间

  • CIE色度图的一个重要用途是定义颜色域(color gamut),或称颜色区域(color range),以便显示叠加颜色的效果。如图所示

图用CIE色度图定义颜色域


7.6 表现场景整体照明效果的一个重要方面是透明现象的模拟颜 色 空 间

8.6.3 几种常用的颜色模型

  • 所谓颜色模型,指的是某个三维颜色空间中的一个可见光子集,它包含某个颜色域的所有颜色 。

  • 最常见的 RGB颜色模型,此外,还有 CMY和 HSV颜色模型


  • 红、绿、蓝表现场景整体照明效果的一个重要方面是透明现象的模拟(RGB)颜色模型是加性原色。也就是说,各个原色的光能叠加在一起产生复合色

图RGB三原色叠加效果示意图


7.6 表现场景整体照明效果的一个重要方面是透明现象的模拟颜 色 空 间

  • RGB颜色模型通常用下图所示的单位立方体来表示

RGB立方体


7.6 表现场景整体照明效果的一个重要方面是透明现象的模拟颜 色 空 间

  • CMY颜色系统

  • 红、绿、蓝的补色青(Cyan)、品红(Magenta)、黄(Yellow)为原色构成 。常用于从白光中滤去某种颜色,故称为减性原色系统 。

图CMY三原色的减色效果示意图


7.6 表现场景整体照明效果的一个重要方面是透明现象的模拟颜 色 空 间

  • HSV(Hue, Saturation, Value)颜色模型则是面向用户的。该模型对应于圆柱坐标系中的一个圆锥形子集,如图所示。

HSV颜色模型示意图


7.6 表现场景整体照明效果的一个重要方面是透明现象的模拟颜 色 空 间

  • HSV模型对应于画家配色的方法。画家用改变色浓和色深的方法从某种纯色中获得不同色调的颜色。

  • 如图所示,是具有某个固定色彩的颜色的三角形表示。

色浓、色深、色调之间的关系


End of the chapter表现场景整体照明效果的一个重要方面是透明现象的模拟


ad