1、第第 7 7 章章 立体真实感图形立体真实感图形 第第 7 章章 立体真实感图形立体真实感图形 7.1 消除隐藏线消除隐藏线 7.2 消除隐藏面消除隐藏面 7.3 光照明模型光照明模型 7.4 颜色模型颜色模型 7.5 纹理纹理 7.6 科学计算可视化科学计算可视化习题习题 第第 7 7 章章 立体真实感图形立体真实感图形 7.1 消消 除除 隐隐 藏藏 线线 7.1.1 概述 用计算机生成三维物体的真实图形,是计算机图形学研究的重要内容。真实图形在虚拟现实系统、科学计算可视化、广告影视、动画制作、电影特技模拟、计算机游戏等许多领域都有广泛的应用。在用显示设备描述物体的图形时,必须把三维信息经
2、过某种投影变换,在二维的显示表面上绘制出来。第第 7 7 章章 立体真实感图形立体真实感图形 由于投影变换失去了深度信息,往往导致图形的二义性(如图7.1所示)。要消除二义性,就必须在绘制时消除被遮挡的不可见的线或面,习惯上称作消除隐藏线和隐藏面,或简称为消隐。经过消隐得到的投影图形称为物体的真实图形(如图7.2所示)。第第 7 7 章章 立体真实感图形立体真实感图形 图 7.1 长方体线框投影图的二义性 第第 7 7 章章 立体真实感图形立体真实感图形 图 7.2 线框图、消隐图、真实感图形 第第 7 7 章章 立体真实感图形立体真实感图形 通常,可以按消隐对象将三维物体消隐分为以下两类:(
3、1)线消隐。其消隐对象是物体上的边,消除的是物体上不可见的边。(2)面消隐。其消隐对象是物体上的面,消除的是物体上不可见的面。第第 7 7 章章 立体真实感图形立体真实感图形 Ivan Sutherland根据消隐空间的不同,将消隐算法分为三类:(1)物体空间的消隐算法。将场景中每一个面与其它每个面比较,求出所有点、边、面的遮挡关系。(2)图像空间的消隐算法。对屏幕上每个像素进行判断,决定哪个多边形在该像素可见。(3)物体空间和图像空间的消隐算法。在物体空间中预先计算面的可见性优先级,再在图像空间中生成消隐图。第第 7 7 章章 立体真实感图形立体真实感图形 7.1.2 凸多面体的隐藏线消除
4、消隐的对象是三维物体。三维形体的表示方法主要有边界表示和CSG表示等。最简单的表示方式是用表面上的平面多边形的集合表示,称为面集表示法。如果物体的表面是曲面,则可将曲面用多个平面多边形近似逼近。第第 7 7 章章 立体真实感图形立体真实感图形 假设物体用它的表面多边形的集合来表示,凸多面体是由若干个平面围成的物体。假设这些平面方程为 aix+biy+ciz+di0 (i=1,2,n)第第 7 7 章章 立体真实感图形立体真实感图形 由于平面有面向物体内部的一面(内侧面)和面向物体外部的一面(外侧面),必须加以区分。设构成平面的多边形顶点指定为逆时针方向,则在右手系统中观察物体平面的外侧时,法向
5、量方向由里向外。该平面法向量可以通过向量叉积得到。设逆时针顺序的三个多边形顶点V1,V2,V3,在右手系统中形成两个向量V1V2,V1V3,则该平面法向量 N=(V2-V1)(V3-V1)第第 7 7 章章 立体真实感图形立体真实感图形 下面介绍一种快速简便的判别多面体的后向面的物空间算法,它建立在内外测试法的基础之上。假设有一点(x,y,z)和一个平面参数为A,B,C,D的多边形面,若 Ax+By+Cz+D0,则该多边形为后向面。另外,若将物体描述转换至投影坐标系中,且观察方向平行于观察坐标系中的z轴,则V=(0,0,V),且 VN=VCz 则只须考查法向量N的z分量Cz的符号。第第 7 7
6、 章章 立体真实感图形立体真实感图形 图 7.3 不同面的法向量(a)前向面;(b)后向面NNVV(a)(b)第第 7 7 章章 立体真实感图形立体真实感图形 图 7.4 多面体的隐藏线消除JEDCBAHFGINV第第 7 7 章章 立体真实感图形立体真实感图形 在一个沿着z轴反向观察的右手观察系统中,若Cz0 (i=1,2,n)其中,Ni=(ai,bi,ci)第第 7 7 章章 立体真实感图形立体真实感图形 但是 NiQ(s,t)+di =Ni(V+(P1-V)s+(P2-P1)ts)+di =pi+qis+rits 上式中,pi=NiV+di,qiNi(P1-V),riNi(P2-P1)。
7、所以,凸多面体E遮挡线段P1P2的充要条件是不等式组 pi+qis+rits+di0;(i=1,2,n)0t1 0s1第第 7 7 章章 立体真实感图形立体真实感图形 图 7.6 包围盒不交 BCAACB第第 7 7 章章 立体真实感图形立体真实感图形 平面对直线段的遮挡判断算法如下:(1)若线段的两端点及视点在给定平面的同侧,线段不被给定平面遮挡,转(7)。(2)若线段的投影与平面投影的包围盒无交,线段不被给定平面遮挡,转(7)。(3)求直线与相应无穷平面的交点。若无交点,转(4)。第第 7 7 章章 立体真实感图形立体真实感图形 (4)求所剩线段的投影与平面边界投影的所有交点,并根据交点在
8、原直线参数方程中的参数值求出z值(即深度)。若无交点,转(5)。(5)以上所求得的各交点将线段的投影分成若干段,求出第一段的中点。(6)若第一段中点在平面的投影内,则相应的段被遮挡,否则不被遮挡;其它段的遮挡关系可依次交替取值进行判断。(7)结束。第第 7 7 章章 立体真实感图形立体真实感图形 7.1.3 凹多面体的隐藏线消除 对于凹多面体,我们同样可以按照7.1.2节所讨论的那样,求出物体表面各多边形的法向量判断多边形面的朝向。后向面都是自隐藏面,而前向面是潜在可见面。它们可能完全可见,也可能部分可见,还可能是完全隐藏。把所有朝后的面与朝前的面的公共边,称为“轮廓线”。这种线段包括物体的实
9、际轮廓线和另外一些从视点不可见的线段。轮廓线的集合是物体表面棱边的一个子集。第第 7 7 章章 立体真实感图形立体真实感图形 隐藏量方法用于计算一条线段被一个凹多面体遮挡的部分。首先把线段与凹多面体的“轮廓线”求交,交点按参数大小顺序排列(如图7.7所示)。它们把线段分割成若干子线段,然后计算各子线段的隐藏量。所谓隐藏量,就是落在该子线段之前的潜在可见面的数目。第第 7 7 章章 立体真实感图形立体真实感图形 图 7.7 分段交替取值 第第 7 7 章章 立体真实感图形立体真实感图形 7.2 消消 除除 隐隐 藏藏 面面 7.2.1 画家算法 画家算法的原理是:先把屏幕置成背景色,再把物体的各
10、个面按其离视点的远近进行排序,离视点远者在表头,离视点近者在表尾,排序结果存于一张深度优先级表中。第第 7 7 章章 立体真实感图形立体真实感图形 检查分以下五项(如图7.8(a)、(b)、(c)、(d)、(e)所示):P和Q在xOy平面上投影的包围盒在x方向上不相交;P和Q在xOy平面上投影的包围盒在y方向上不相交;P和Q在xOy平面上的投影不相交;P的各顶点均在Q的远离视点的一侧;Q的各顶点均在P的靠近视点的一侧。第第 7 7 章章 立体真实感图形立体真实感图形 图 7.8 P不遮挡Q的各种情况(图(a)、(b)、(c)、(d)、(e)及互相遮挡(图(f)yPQPQyyxxxPQxOOOx
11、xOOOzz(a)(b)(c)(d)(e)(f)QPPQy第第 7 7 章章 立体真实感图形立体真实感图形 (1)深度重叠判断。(2)投影重叠判断。(3)Q在P之前。(4)P在Q之前。(5)精确的重叠测试。第第 7 7 章章 立体真实感图形立体真实感图形 7.2.2 Z缓冲区(Z-Buffer)算法 画家算法中,深度排序计算量大,而且排序后,还需再检查相邻的面,以确保在深度优先级表中前者在前,后者在后。若遇到多边形相交,或多边形循环重叠的情形,还必须分割多边形。为了避免这些复杂的运算,人们发明了Z缓冲区(Z-Buffer)算法。在这个算法里,不仅需要有帧缓存来存放每个像素的颜色值,还需要一个深
12、度(Z)缓存来存放每个像素的深度值,如图7.9所示。第第 7 7 章章 立体真实感图形立体真实感图形 图 7.9 Z缓冲区示意图 屏幕帧缓冲器Z缓冲器每个单元存放对应像素的颜色值每个单元存放对应像素的深度值第第 7 7 章章 立体真实感图形立体真实感图形 (1)射线法。由被测点P处向y轴负方向(即y=-)作射线,交点个数是奇数,则被测点在多边形内部,否则,在多边形外部。若射线正好经过多边形的顶点,则采用“左开右闭”的原则来实现。即当射线与某条边的顶点相交时,若边在射线的左侧,交点有效,计数;若边在射线的右侧,交点无效,不计数。如图7.10、图7.11所示。第第 7 7 章章 立体真实感图形立体
13、真实感图形 图 7.10 射线法交点计数(a)奇数交点;(b)偶数交点P3P2P1PPP1P2(a)(b)第第 7 7 章章 立体真实感图形立体真实感图形 图 7.11 射线与顶点相交时的计数(a)射线与边重合;(b)射线穿过交点相邻的边;(c)射线在交点邻边的一侧 P1PP2P3P4PP1P2P3PP1P2P3P4(a)(b)(c)第第 7 7 章章 立体真实感图形立体真实感图形 (2)弧长法。弧长法要求多边形是有向多边形,即规定沿多边形的正向,边的左侧为多边形的内域。如图7.12所示,以被测点为圆心,作单位圆,将全部有向边向单位圆作径向投影,并计算其在单位圆上弧长的代数和。第第 7 7 章
14、章 立体真实感图形立体真实感图形 图 7.12 弧长法测试点的包含性(a)被测点P在多边形外;(b)被测点P在多边形内(b)BAPECDBAECD2154321543P(a)第第 7 7 章章 立体真实感图形立体真实感图形 图 7.13 弧长累加方法P4(,)P5(,)P1(,)P2(,)P3(,)P第第 7 7 章章 立体真实感图形立体真实感图形 真正计算边的弧长是很费时的。其实可以利用多边形的顶点符号,以及边所跨越的象限计算弧长代数和。这里,我们给出一种以顶点符号为基础的弧长累加方法。这种方法简单、快速。如图7.13所示,将坐标原点移到被测点P,于是,新坐标系将平面划分为四个象限,各象限内
15、的符号对分别为(,),(,),(,),(,)。算法规定:若顶点Pi的某个坐标为0,则其符号为。若顶点Pi的x、y坐标都为0,则说明这个顶点为被测点,我们在这之前予以排除。于是弧长变化如表7.1所示。第第 7 7 章章 立体真实感图形立体真实感图形 表 7.1 符号对变化与弧长变化的关系 第第 7 7 章章 立体真实感图形立体真实感图形 下面计算多边形Pk在点(i,j)处的深度。设多边形Pk的平面方程为 ax+by+cz+d=0 若c0,则把(i,j)代入方程,就可得深度值cdbjaidepth第第 7 7 章章 立体真实感图形立体真实感图形 7.2.3 扫描线Z-Buffer算法 1.算法的主
16、要思想 按扫描行的顺序处理一帧画面,在由视点和扫描线所决定的扫描平面上解决消隐问题。具体步骤是:在处理当前扫描线时,定义一个一维数组作为当前扫描线的Z-Buffer。2.数据结构 多边形Y表实际上是一个指针数组(如图7.14所示)。将所有多边形存于多边形Y表中,根据多边形顶点中最小的y坐标,插入多边形Y表中的相应位置。第第 7 7 章章 立体真实感图形立体真实感图形 图 7.14 待消隐对象与多边形Y表 6543210123456701234567xe3e4P2e5e0e2e1yP1 Ymax2IP2 Ymax1IP2第第 7 7 章章 立体真实感图形立体真实感图形 为了实现这种更新,要在进入
17、扫描之前,作如下处理:(1)按每个多边形的最大y值进行排序,求出多边形所交的最高扫描线,把它链入该扫描线的y值缓存中。(2)在多边形的数据表中,增加一个计数器,记录它所交的扫描线条数。第第 7 7 章章 立体真实感图形立体真实感图形 图 7.15 活性多边形表APT Ymax2 Ymax1y 4APTAPT Ymax2y 2IP2IP1IP2第第 7 7 章章 立体真实感图形立体真实感图形 边表ET:活性多边形表中的每一个多边形都有一个边表ET。多边形P1的边表ET如图7.16所示。边表中,存放了每条边端点中较大的y值,增量x,x,y值较小一端的x坐标和z坐标。第第 7 7 章章 立体真实感图
18、形立体真实感图形 图 7.16 边表ET Ymax,x,x,z6543210e2Ymax,x,x,zYmax,x,x,ze0e1第第 7 7 章章 立体真实感图形立体真实感图形 活性边对表AET(如图7.17所示)。在一条扫描线上,同一多边形的相邻两条边构成一个边对。活性边对表AET中存放当前多边形中与当前扫描线相交的各边对的信息。第第 7 7 章章 立体真实感图形立体真实感图形 图 7.17 边对与活性边对表AET 0 1 2 3 4 5 6 7e1e3e4e0e21234567y(y 2)AETAETx(y 6)e0e1e0e4e3e2第第 7 7 章章 立体真实感图形立体真实感图形 AE
19、T的每个结点包括边对中如下信息:xl左侧边与扫描线交点的x坐标;xl左侧边在扫描线加1时的x坐标增量 xl;ylmax左侧边两端点中最大的y值;xr 右侧边与扫描线交点的x坐标;xr 右侧边在扫描线加1时的x坐标增量xr;yrmax右侧边两端点中最大的y值;zl 左侧边与扫描线交点处的多边形深度值;第第 7 7 章章 立体真实感图形立体真实感图形 za 沿扫描线方向增加1个像素时,多边形所在平面的z坐标增量为a/c;zb 扫描线加1时,多边形所在平面的z坐标增量为b/c;IP多边形序号。第第 7 7 章章 立体真实感图形立体真实感图形 3.扫描线Z-buffer算法 扫描线Z-Buffer算法
20、()建多边形Y表;对每一个多边形根据顶点最小的y值,将多边形置入多边形Y表。活性多边形表APT,活性边表AET初始化为空。for(每条扫描线i,i从小到大)1.帧缓存CB置为背景色。2.深度缓存ZB(一维数组)置为负无穷大。3.将对应扫描线i的多边形Y表中的多边形加入到活性多边形表APT中。第第 7 7 章章 立体真实感图形立体真实感图形 4.对新加入的多边形,生成其相应的边Y表。5.对APT中每一个多边形,若其边Y表中对应扫描线i增加了新的边,将新的边配对,加到活性边对表AET中。6.对AET中的每一对边:6.1 对xl x ZB(i),则令ZB(i)=depth,并计算颜色值,写帧缓存。第
21、第 7 7 章章 立体真实感图形立体真实感图形 7.删除APT中多边形顶点最大y坐标为I的多边形,并删除相应的边。8.对AET中的每一个边对,作如下处理:8.1 删除ylmax或ylmax 已等于i的边。若一边对中只删除了其中一边,需对该多边形的边重新配对。8.2 用增量公式计算新的xl、xr和zl。用增量公式计算新的xlxlxl、xrxrxr和zlzlxl za+zb 第第 7 7 章章 立体真实感图形立体真实感图形 7.2.4 区间扫描线算法 下面讨论如何确定小区间ai,ai+1(i1,2,n)的颜色。可分为三种情况考虑:(1)小区间上没有任何多边形,这时该小区间用背景色显示。(2)小区间
22、上只有一个多边形,如a1,a2a3,a4,这时以对应多边形在该处的颜色显示。(3)小区间上存在两个或两个以上的多边形,如a2,a3,必须通过深度测试判断哪个多边形可见。第第 7 7 章章 立体真实感图形立体真实感图形 图 7.19 扫描线与多边形的投影相交得到若干子区间a1a2a3F1a4a5a6a7a8F2第第 7 7 章章 立体真实感图形立体真实感图形 图 7.19 两个平面在屏幕上的投影情形(a)两个平面在屏幕上的投影;(b)无贯穿的情形;(c)相互贯穿的情形 a1a2a4xyza2a1a3a4xa4a3a2a1bxZ(a)(b)(c)第第 7 7 章章 立体真实感图形立体真实感图形 7
23、.2.5 区域采样(Warnock)算法 前面介绍的画家算法、Z缓冲区算法和扫描线算法,都是点取样算法。用这三种算法绘制物体真实图形时,总是在投影面取一组离散点,在各个离散点解决消隐问题,以及确定颜色、亮度,用于显示屏幕上的对应像素。下面介绍的区域采样算法(区域子分割算法),利用图形的区域连贯性,在连续的区域上确定可见面及其颜色、亮度。区域子分割算法如图7.20和图7.21所示,它的基本思想是:把物体投影到全屏幕窗口上,然后递归分割窗口,直到窗口内目标足够简单,可以显示为止。第第 7 7 章章 立体真实感图形立体真实感图形 图 7.20 区域子分割的过程 第第 7 7 章章 立体真实感图形立体
24、真实感图形 图 7.21 窗口与多边形的覆盖关系(a)内含;(b)多边形与窗口相交;(c)包围;(d)窗口和多边形(a)(b)(c)(d)第第 7 7 章章 立体真实感图形立体真实感图形 分离下列情况之一发生时,窗口足够简单,可以直接显示:(1)所有多边形均与窗口分离,该窗口置背景色。(2)只有一个多边形与窗口相交,或该多边形包含窗口,则先将整个窗口置背景色,再对多边形在窗口内部分用扫描线算法绘制。(3)有一个多边形包围了窗口,或窗口与多个多边形相交,但有一个多边形包围窗口,而且在最前面最靠近观察点,则用该多边形的颜色显示窗口。第第 7 7 章章 立体真实感图形立体真实感图形 图 7.22 区
25、域编码 213窗口04675第第 7 7 章章 立体真实感图形立体真实感图形 对每条边,令(终点编码)-(起点编码),若4则=-8;若-4则=+8;若4则将该边在窗口边界分为两段,对每一段求。把每条边的求和,得08多边形包围窗口 多边形分离窗口 第第 7 7 章章 立体真实感图形立体真实感图形 假设全屏幕窗口分辨率为1024768。窗口以左下角点(x,y)和边宽s定义。图7.23是使用栈结构实现的区域子分割算法流程图。由于算法中每次递归地把窗口分割成四个与原窗口相似的小窗口,故这种算法通常称为四叉树算法。第第 7 7 章章 立体真实感图形立体真实感图形 图 7.23 区域子分割算法流程图 开始
26、全屏幕窗口(0,0,1024)压入堆栈从栈中弹出窗口(x,y,s)检查窗口与物体的覆盖关系窗口内目标简单?显示窗口内目标栈空?结束YYs1?显示该像素s s/2YNN把窗口分为四个子窗口入栈(x,y,s)(x s,y,s)(x,y s,s)(x s,y s,s)N第第 7 7 章章 立体真实感图形立体真实感图形 7.2.6 光线投射算法 光线投射算法的思想是:考察由视点出发穿过观察屏幕的一像素而射入场景的一条射线,则可确定出场景中与该射线相交的物体。在计算出光线与物体表面的交点之后,离像素最近的交点的所在面片的颜色为该像素的颜色;如果没有交点,说明没有多边形的投影覆盖此像素,用背景色显示它即可
27、。如图7.24所示。第第 7 7 章章 立体真实感图形立体真实感图形 图 7.24 将通过屏幕各像素的投影线 与场景中的物体表面求交 像素第第 7 7 章章 立体真实感图形立体真实感图形 7.3 光光 照照 明明 模模 型型 7.3.1 光照明模型的基础知识 (1)反射定律:入射角等于反射角,而且反射光线、入射光线与法向量在同一平面上,如图7.25所示。(2)折射定律:折射角与入射角满足1/2=sin/sin,且折射线在入射线与法线构成的平面上,式子中的符号如图7.26所示。第第 7 7 章章 立体真实感图形立体真实感图形 图 7.25 光的反射定律 视线反射光法向量入射光光源第第 7 7 章
28、章 立体真实感图形立体真实感图形 图 7.26 光的折射定律 入射光折射光21第第 7 7 章章 立体真实感图形立体真实感图形 (3)能量关系:在光的反射和折射现象中,能量是守恒的,能量的分布情况满足这样的一个式子:Ii=Id+Is+It+Iv。第第 7 7 章章 立体真实感图形立体真实感图形 2.光的度量(1)立体角:面元ds向点光源P所张的立体角d为2rdsd其中,r为点光源到面元中心的垂直距离。第第 7 7 章章 立体真实感图形立体真实感图形 (2)点发光强度。光通量:单位时间内通过面元ds的光能量,记为dF。发光强度:如图7.27所示,点光源在某个方向上的发光强度,定义为该方向上单位立
29、体角内的光通量,即2rdsdFddFI第第 7 7 章章 立体真实感图形立体真实感图形 各向同性的点光源,在各个方向上单位立体角内通过的光通量相等,即在各个方向上发光强度相等。设发光强度为I,则点光源向外辐射的整个光通量为球立体角内的光通量,即IIdF440第第 7 7 章章 立体真实感图形立体真实感图形 图 7.27 光的强度 dPds第第 7 7 章章 立体真实感图形立体真实感图形 7.3.2 Phong光照明模型 光 照 到 物 体 表 面 时,物 体 对 光 会 发 生 反 射(Reflection)、透射(Transmission)、吸收(Absorption)、衍射(Diffrac
30、tion)、折射(Refraction)和干涉(Interference)。第第 7 7 章章 立体真实感图形立体真实感图形 1.理想漫反射 当光源来自一个方向时,漫反射光均匀向各方向传播,与视点无关,它是由表面的粗糙不平引起的,因而漫反射光的空间分布是均匀的。记入射光强为Ip,物体表面上点P 的法向量为N,从点P指向光源的向量为L,两者间的夹角为,由Lambert余弦定律,则漫反射光强为 Id=IpKd cos (0,/2)第第 7 7 章章 立体真实感图形立体真实感图形 其中,Kd是与物体有关的漫反射系数,0Kd1。当L、N为单位向量时,上式也可用如下形式表达 Id=IpKd(LN)在有多
31、个光源的情况下,可以有如下的表示)(NLIKIiipidd第第 7 7 章章 立体真实感图形立体真实感图形 2.镜面反射光 对于理想镜面,反射光集中在一个方向,并遵守反射定律。对一般的光滑表面,反射光集中在一个范围内,且由反射定律决定的反射方向光强最大。因此,对于同一点来说,从不同位置所观察到的镜面反射光强是不同的。镜面反射光强可表示为 Is=IpKs cos (0,/2)第第 7 7 章章 立体真实感图形立体真实感图形 同样的,将V和R都格式化为单位向量,镜面反射光强可表示为 Is=IpKs(RV)n 其中,R可由R=N2 cos-L=2N(NL)-L计算。对多个光源的情形,镜面反射光强可表
32、示为minipissVRIKI1)(第第 7 7 章章 立体真实感图形立体真实感图形 3.环境光 环境光是指光源间接对物体的影响,是在物体和环境之间多次反射,最终达到平衡时的一种光。一般近似地认为同一环境下的环境光,其光强分布是均匀的,它在任何一个方向上的分布都相同。例如,透过厚厚云层的阳光就可以称为环境光。在简单光照明模型中,用一个常数来模拟环境光,用式子表示为 Ie=IaKa 其中,Ia为环境光的光强,Ka为物体对环境光的反射系数。第第 7 7 章章 立体真实感图形立体真实感图形 4.Phong光照明模型的建立 综合上面介绍的光反射作用的各个部分,Phong光照明模型表述为由物体表面上一点
33、P反射到视点的光强I为环境光的反射光强Ie、理想漫反射光强Id和镜面反射光Is的总和,即 I=IaKa+IpKd(LN)+IpKs(RV)n 按照上式,如果用H表示L和V的角平分向量,Phong光照明模型计算中涉及的各方向向量如图7.28所示。第第 7 7 章章 立体真实感图形立体真实感图形 图 7.28 Phong光照明模型LNHRVP第第 7 7 章章 立体真实感图形立体真实感图形 5.Phong光照明模型的实现 在用Phong模型进行真实感图形计算时,对物体表面上的每个点P,均需计算光线的反射方向R,再由V计算(RV)。为减少计算量,可以作如下假设:(1)光源在无穷远处。即光线方向L为常
34、数;(2)视点在无穷远处,即视线方向V为常数;(3)用(HN)近似(RV)。这里H为L和V的平分向量,H=(L+V)/|L+V|。第第 7 7 章章 立体真实感图形立体真实感图形 图 7.29 n取不同值时的Phong光照明模型示例 第第 7 7 章章 立体真实感图形立体真实感图形 7.3.3 增量式光照明模型 1.Gouraud明暗处理(双线性光强插值)Gouraud明暗处理是先计算物体表面多边形各顶点的光强,然后用双线性插值,求出多边形内部区域中各点的光强。它的基本算法描述如下:(1)计算多边形顶点的平均法向;(2)计算顶点的平均光强;(3)插值计算离散边上的各点光强;(4)插值计算多边形
35、内域中各点的光强。第第 7 7 章章 立体真实感图形立体真实感图形 下面介绍算法中的每一个步骤。(1)顶点法向计算。假设顶点A相邻的多边形有k个,法向分别为N1,N2,Nk,取顶点A的法向为)(121kaNNNkN第第 7 7 章章 立体真实感图形立体真实感图形 图 7.30 双线性光强插值 IaI2I3IsI4IbI1扫描线yxO第第 7 7 章章 立体真实感图形立体真实感图形 (2)顶点平均光强计算。在Gourand提出明暗处理方法时,采用的光强插值是:krNLKIKIIappaa)(第第 7 7 章章 立体真实感图形立体真实感图形 用多边形顶点的光强进行双线性插值,可以求出多边形上各点和
36、内部点的光强。在这个算法步骤中,我们把线性插值与扫描线算法相互结合,同时用增量算法实现各点光强的计算。增量算法首先由顶点的光强插值计算各边的光强,然后由各边的光强插值计算出多边形内部点的光强,如图7.30所示。第第 7 7 章章 立体真实感图形立体真实感图形 双线性光强插值的公式如下:)()(1)()(1)()(1144141122121asasbbabsssbssaxxIxxIxxIyyIyyIyyIyyIyyIyyI第第 7 7 章章 立体真实感图形立体真实感图形 如果采用增量算法,当扫描线ys由j变成j+1时,新扫描线上的点(xa,j+1)和(xb,j+1)的光强,可以由前一条扫描线与边
37、的交点(xa,j)和(xb,j)的光强作一次加法得到:41412121,1,1,yyIIIyyIIIIIIIIIbabjbjbajaja第第 7 7 章章 立体真实感图形立体真实感图形 而在一条扫描线内部,横坐标xs由xa到xb递增,当xs由i增为i+1时,多边形内的点(i+1,ys)的光强可以由同一扫描行左侧的点(i,ys)的光强作一次加法得到,即)(1,1ababsssisiIIxxIIII第第 7 7 章章 立体真实感图形立体真实感图形 2.Phong明暗处理(双线性法向插值)与双线性光强插值相比,该方法有如下特点:(1)保留双线性插值,对多边形边上的点和内域各点,采用增量法。(2)对顶
38、点的法向量进行插值,而顶点的法向量,用相邻的多边形的法向作平均。(3)由插值得到的法向,计算每个像素的光亮度。(4)假定光源与视点均在无穷远处,光强只是法向量的函数。第第 7 7 章章 立体真实感图形立体真实感图形 双线性法向插值的公式与光强插值的公式基本类似,将其中的光强项用法向量项代替。插值公式如下:)()(1)()(1)()(1144141122121asasbbabsssbssaxxNxxNxxNyyNyyNyyNyyNyyNyyN第第 7 7 章章 立体真实感图形立体真实感图形 7.3.4 局部光照明模型 1.理论基础 (1)光的电磁理论。光波是电磁波的一种,自然光是非偏振光,由自然
39、光照射到物体表面产生的反射光,其反射率系数由如下Fresnel公式确定:)(sin)(sin)(tan)(tan212222第第 7 7 章章 立体真实感图形立体真实感图形 其中,是入射角,若发生反射的物体表面两侧折射率分别为n1和n2,那么满足下面公式:sinsin21nn第第 7 7 章章 立体真实感图形立体真实感图形 图 7.31 微平面示意 N第第 7 7 章章 立体真实感图形立体真实感图形 (2)微平面理论。简单光照明模型假定物体表面是理想光滑的,而实际上从微观情况来看,相对于很小的光波长来说,物体表面都是十分粗糙不平的。在局部光照明模型中,必须能够反映这种物体表面的粗糙程度,微平面
40、假说理论就是在这种情况下提出来的。微平面理论将粗糙物体表面看成是由无数个微小的理想镜面组成的。这些平面朝向各异,随机分布,如图7.31所示。第第 7 7 章章 立体真实感图形立体真实感图形 图 7.32 光路被微平面遮挡的情况(a)没有遮挡;(b)反射光被遮挡;(c)入射光被遮挡 LHVLHVVHL(a)(b)(c)第第 7 7 章章 立体真实感图形立体真实感图形 图 7.33 入射光光能量计算 Nddscosds第第 7 7 章章 立体真实感图形立体真实感图形 2.局部光照明模型的建立 假设用Rbd表示物体表面对入射自然光的反射率系数,写成反射光的光强Ir与单位时间内单位面积上的入射光能量E
41、i的比,就是irbdEIR第第 7 7 章章 立体真实感图形立体真实感图形 式中,入射光能量Ei(如图7.33所示)可用入射光的光强Ii和单位面积向光源所张的立体角d表示为 Ei=Ii cosd=Ii(NL)d 于是有如下的一个关系:Ir=RbdIi(NL)d 而反射率系数可写成漫反射率和镜面反射率的代数和,即 Rbd=KdRd+KsRs 因此,局部光照明模型最后表示为 Ir=IaKa+Ii(NL)d(KdRd+KsRs)第第 7 7 章章 立体真实感图形立体真实感图形 如图7.34所示,与前面介绍的简单光照明模型比较,局部光照明模型有如下的一些优点:(1)局部光照明模型是基于入射光能量导出的
42、光辐射模型,而简单光照明模型则是基于经验,显然前者更具有理论基础。(2)局部光照明模型的反射项以实际物体表面的微平面理论为基础,反映表面的粗糙度对反射光强的影响,而简单光照明模型只以(NH)n近似,前者的模拟更精确。第第 7 7 章章 立体真实感图形立体真实感图形 (3)局部光照明模型的高光由Fresnel定律,根据材料的物理性质决定颜色,而简单光照明模型只与高光颜色有关,而与材料无关。(4)简单光照明模型在入射角接近90时会产生失真现象,而在局部光照明模型中可以很好地改进这一点。(5)用简单光照明模型生成的物体图像,看上去像塑料,显示不出磨亮的金属光泽,而在局部光照明模型中,反射光强的计算考
43、虑了物体材质的影响,就可以模拟金属的光泽。第第 7 7 章章 立体真实感图形立体真实感图形 图 7.34 Phong光照明模型与局部光照明模型比较(图中左边为用Phong光照明 模型显示的球,右边为用局部光照明模型显示的球)第第 7 7 章章 立体真实感图形立体真实感图形 *7.3.5 光透射模型 1.透明效果的简单模拟 由于透明物体可以透射光,因而可以透过这种材料看到后面的物体,由于光的折射通常会改变光的方向,要在真实感图形学中模拟折射,需要较大的计算量,在Whitted和Hall提出光透射模型之前,为了能够看到一个透明物体后面的东西,就有一些透明效果模拟的简单方法。第第 7 7 章章 立体
44、真实感图形立体真实感图形 图 7.35 颜色调和模拟透明效果(x,y)Ia透明体不透明体Ib第第 7 7 章章 立体真实感图形立体真实感图形 如图7.35 所示,设过像素点(x,y)的视线与物体相交处的颜色(或光强)为Ia,视线穿过物体与另一物体相交处的颜色(或光强)为Ib,则像素点(x,y)的颜色(或光强)可由如下颜色调和公式计算 I=tIb+(1-t)Ia 其中,Ia和Ib可由简单光照明模型计算。第第 7 7 章章 立体真实感图形立体真实感图形 2.Whitted光透射模型 在简单光照明模型的基础上,加上透射光一项,就得到Whitted光透射模型:I=IaKa+IpKd(LN)+IpKs(
45、HN)n+ItKt 其中,It为折射方向的入射光强度;Kt为透射系数,是01之间的一个常数,其大小取决于物体的材料。第第 7 7 章章 立体真实感图形立体真实感图形 如果该透明物体又是一个镜面反射体,应再加上反射光一项,以模拟镜面反射效果。于是得到Whitted整体光照模型:I=IaKa+IpKd(LN)+IpKs(HN)n+ItKt+IsKs 这里,Is为镜面反射方向的入射光强度;Ks为镜面反射系数,是01之间的一个常数,其大小同样取决于物体的材料。第第 7 7 章章 立体真实感图形立体真实感图形 图 7.36 Whitted光透射模型 NVSLT第第 7 7 章章 立体真实感图形立体真实感
46、图形 用Whitted模型计算光照效果,剩下的关键问题就是计算反射与折射方向。即已知视线方向V,求其反射方向S与折射方向T。然后可求出反射与折射方向上与另一物体的交点。关于上面的问题可以用几何光学的原理来解决。给定视线方向V与法向方向N,视线方向V的反射方向S可以由下式计算:S=2N(NV)-V第第 7 7 章章 立体真实感图形立体真实感图形 那么在给定视线方向V与法向方向N以后,如何求V的折射方向T呢?首先令V,N,T均为单位向量,1是视点所在空间的介质折射率,2为物体的折射率。根据折射定律,入射角1和折射角2有如下的关系:1221sinsin而且V,N,T共面。第第 7 7 章章 立体真实
47、感图形立体真实感图形 Whitted的折射方向计算公式:T=kf(N-V)-N 其中,VNVVVNVkf,122计算所得的T为非单位向量。第第 7 7 章章 立体真实感图形立体真实感图形 Heckbert给出了一个更为简单的计算公式:NVT)cos1(cos112其中,VN 1122cos,)2cos1(11cos计算所得的V为单位向量。第第 7 7 章章 立体真实感图形立体真实感图形 3.Hall光透射模型 Hall光透射模型是在Whitted光透射模型的基础上推广而来的,它能够模拟透射高光的效果,实际上,就是在Whitted模型的光强计算中加入光源引起的规则透射分量,同时还可以处理理想的漫
48、透射。首先介绍该模型是如何处理理想漫透射的。透明物体的粗糙表面对透射光的作用表现为漫透射。如毛玻璃表面即为漫透射面。当光线透过这样的表面射出时,光线将向各个方向散射。对理想漫透射面而言,透射光的光强在各个方向均相等。第第 7 7 章章 立体真实感图形立体真实感图形 用Lambert余弦定律描述点P处的漫透射光的光强为 Idt=IpKdt(-NL)其中,Ip为入射光的强度,即点光源的强度;Kdt为物体的漫透射系数,在01之间;L为光源方向;N为面法向。第第 7 7 章章 立体真实感图形立体真实感图形 图 7.37 规则透射高光 TVNPLIP第第 7 7 章章 立体真实感图形立体真实感图形 Ha
49、ll用下面的式子模拟透射高光现象:It=IpKt(TV)n 其中,It为规则透射光在视线方向的强度;Ip为点光源的强度;Kt为物体的透明系数;n为反映物体表面光泽的常数。第第 7 7 章章 立体真实感图形立体真实感图形 为减少计算量,可以和简单光照明模型一样,作如下假设:(1)假定光源在无穷远处,光线方向L为常量;(2)视点在无穷远处,视线方向V为常量。第第 7 7 章章 立体真实感图形立体真实感图形 图 7.38 虚拟法向计算HtPLT,V虚拟透明面第第 7 7 章章 立体真实感图形立体真实感图形 在使用Hall光透射模型的时候,应注意以下三点:(1)只有视点与光源在透明物体的两侧时,才能透
50、过透明物体看到透射高光。(2)光线射入和射出透明体,均会产生折射,通常不考虑第一次折射。(3)折射的临界角现象。第第 7 7 章章 立体真实感图形立体真实感图形 4.简单光反射透射模型 综合简单光照明模型,Whitted光透射模型和Hall光透射模型,可得简单光反射透射模型:ssttntjtjjdtpinsjsiidspiaaKIKIHNKLNKINHKNLKIKII)()()()(12第第 7 7 章章 立体真实感图形立体真实感图形 *7.4 颜颜 色色 模模 型型 7.4.1 色度图 1.颜色的基本概念 颜色是外来的光刺激作用于人的视觉器官而产生的主观感觉,因而物体的颜色不仅取决于物体本身