计算机图形学ppt课件第七章真实感图形显

上传人:新** 文档编号:579329446 上传时间:2024-08-26 格式:PPT 页数:145 大小:1.54MB
返回 下载 相关 举报
计算机图形学ppt课件第七章真实感图形显_第1页
第1页 / 共145页
计算机图形学ppt课件第七章真实感图形显_第2页
第2页 / 共145页
计算机图形学ppt课件第七章真实感图形显_第3页
第3页 / 共145页
计算机图形学ppt课件第七章真实感图形显_第4页
第4页 / 共145页
计算机图形学ppt课件第七章真实感图形显_第5页
第5页 / 共145页
点击查看更多>>
资源描述

《计算机图形学ppt课件第七章真实感图形显》由会员分享,可在线阅读,更多相关《计算机图形学ppt课件第七章真实感图形显(145页珍藏版)》请在金锄头文库上搜索。

1、第七章第七章 真实感图形显示真实感图形显示n n消隐n n光照n n图案与纹理n n颜色空间消隐消隐n n消隐的分类n n消除隐藏线n n消除隐藏面消隐消隐投影变换失去了深度信息,往往导致图形的二义性要消除二义性,就必须在绘制时消除被遮挡的不可见的线或面,习惯上称作消除隐藏线和隐藏面,简称为消隐。经过消隐得到的投影图称为物体的真实图形。长方体线框投影图的二义性消隐消隐消隐的对象是三维物体。三维体的表示主要有边界表示和CSG表示等。消隐结果与观察物体有关,也与视点有关。 线框图 消隐图 真实感图形消隐的分类消隐的分类n按消隐对象分类n n线消隐n n消隐对象是物体上的边,消除的是物体上不可见的边

2、。 n n面消隐 n n消隐对象是物体上的面,消除的是物体上不可见的面。 消除隐藏线消除隐藏线n n对造型的要求n n在线框显示模型中在线框显示模型中, ,要求造型系统中有面的信要求造型系统中有面的信息,最好有体的信息。息,最好有体的信息。n n坐标变换n n将视点变换到将视点变换到Z Z轴的正无穷大处,视线方向轴的正无穷大处,视线方向变为变为Z Z轴的负方向。轴的负方向。n n最基本的运算n n判断面对线的遮挡关系判断面对线的遮挡关系. .反复地进行线线、线反复地进行线线、线面之间的求交运算面之间的求交运算 求交运算射线与直线求交运算射线与直线求交运算假定直线方程为射线方程为把射线方程代入直

3、线方程得到 当 时,直线与射线平行,若还有 ,则整条射线与直线重合。当 时,则当 时,二者交点为 ,当 时,无交点射线与线段求交问题射线与线段求交问题假定射线方程如上一样,线段的两端点为 ,则线段的方程为射线方程代入上式得到令 ,当 时,射线与线段平行。这时若还有 ,则线段与射线(或其反向延长线)重合。如果 ,则得到当 ,射线与线段有唯一交点。将 代入射线方程,或将代入线段方程求得。射线与平面求交问题射线与平面求交问题假设一空间射线起点为 ,方向为则该射线方程为又假设一任意平面,其方程为 。将射线方程代入平面方程得整理得显然,当 ,射线与平面平行。此时若还有 ,则整条射线落在平面上。除了这种情

4、况外,射线(或其反向延长线)与平面交于一点,参数为 当 时,交点在射线上,否则交点在射线得反向延长线上(不算交点)消除隐藏线消除隐藏线n n凸多面体的隐藏线消除n n凹多面体的隐藏线消除面消隐面消隐n n面消隐算法的分类n n提高消隐算法效率的常见方法n n画家算法n nZ缓冲器算法(Z-Buffer)n n扫描线Z缓冲器算法n n区域子分算法n n光线投射算法面消隐算法的分类面消隐算法的分类 第一类(图像空间的消隐算法):第一类(图像空间的消隐算法):以窗口内的每个像以窗口内的每个像素为处理单元;如素为处理单元;如Z Zbufferbuffer、扫描线、扫描线、WarnockWarnock算

5、法算法 for (for (窗口内的每一个像素窗口内的每一个像素) ) 确定距视点最近的物体,以该物体表面的颜色来显示像确定距视点最近的物体,以该物体表面的颜色来显示像 素素 第二类(物体空间的消隐算法):第二类(物体空间的消隐算法):以场景中的物体为以场景中的物体为处理单元;如光线投射算法处理单元;如光线投射算法for (for (场景中的每一个物体场景中的每一个物体) ) 将其与场景中的其它物体比较,确定其表面的可见部将其与场景中的其它物体比较,确定其表面的可见部 分;分; 显示该物体表面的可见部分;显示该物体表面的可见部分; 面消隐算法的分类面消隐算法的分类n n第一类(图像空间的消隐算

6、法)算法复杂度:假设场景中有k个物体,平均每个物体表面由h个多边形构成,显示区域中有m x n个像素,算法的复杂度为:O(mnkh)n n第二类(物体空间的消隐算法 )算法复杂度:假设场景中有k个物体,平均每个物体表面由h个多边形构成,显示区域中有m x n个像素,算法的复杂度为:O(kh)*(kh)提高消隐算法效率的常见方法提高消隐算法效率的常见方法n n利用连贯性n n将透视投影转换成平行投影n n包围盒技术n n背面剔除n n空间分割技术n n物体分层表示方法方法1-1-利用连贯性利用连贯性 相邻事物的属性之间有一定的连贯性,其属性值通常是平缓过渡的,如颜色值、空间位置关系等。连贯性有:

7、u物体连贯性u面的连贯性u区域连贯性u扫描线的连贯性u深度连贯性方法方法1-1-利用连贯性利用连贯性u物体连贯性:如果物体A与物体B是完全相互分离的,则在消隐时,只需比较A、B两物体之间的遮挡关系就可以了,无须对它们的表面多边形逐一进行测试。例如,若A距视点较B远,则在测试B上的表面的可见性时,无须考虑A的表面。u面的连贯性:一张面内的各种属性值一般都是缓慢变化的,允许采用增量形式对其进行计算。u区域连贯性:区域指屏幕上一组相邻的像素,它们通常为同一个可见面所占据,可见性相同。区域连贯性表现在一条扫描线上即为扫描线上的每个区间内只有一个面可见。方法方法1-1-利用连贯性利用连贯性u扫描线的连贯

8、性:相邻两条扫描线上,可见面的分布情况相似。u深度连贯性:同一表面上的相邻部分深度是相近的,而占据屏幕上同一区域的不同表面的深度不同。这样在判断表面间的遮挡关系时,只需取其上一点计算出深度值,比较该深度值即可得到结果。方法方法2-2-透视投影转换成平行投影透视投影转换成平行投影消隐与透视关系密切,体现在:1)消隐必须在投影之前完成;2)物体之间的遮挡关系与投影中心(视点)的选取有关;3)物体之间的遮挡关系与投影方式有关方法方法3-3-包围盒技术包围盒技术包围盒概念:一个形体的包围盒指的是包围它的简单形体。一个好的包围盒要具有两个条件:包围和充分紧密包围着形体;对其的测试比较简单。 方法方法3-

9、3-包围盒技术包围盒技术应用避免盲目求交例如:两个空间多边形A、B在投影平面上的投影分别为A,B ,因为A 、B的矩形包围盒不相交,则A、B不相交,无须进行遮挡测试。右下图:包围盒相交,投影也相交;包围盒相交,投影不相交。 方法方法4-4-背面剔除背面剔除外法向:规定每个多边形的外法向都是指向物体外部的。前向面:若多边形的外法向与投影方向(观察方向)的夹角为钝角,称为前向面。后向面:若多边形的外法向与投影方向(观察方向)的夹角为锐角,称为后向面(背面) 。剔除依据:背面总是被前向面所遮挡,从而不可见。方法方法4-4-背面剔除背面剔除前向面后向面多面体的隐藏线消除图中的JEAF、HCBG和DEA

10、BC所在的面均为后向面。 其它为前向面。方法方法5-5-空间分割技术空间分割技术依据:场景中的物体,它们的投影在投影平面上是否有重叠部分?(是否存在相互遮挡的可能?)对于根本不存在相互遮挡关系的物体,应避免这种不必要的测试。方法:将投影平面上的窗口分成若干小区域;为每个小区域建立相关物体表,表中物体的投影于该区域有相交部分;则在小区域中判断那个物体可见时,只要对该区域的相关物体表中的物体进行比较即可。方法方法6-6-物体分层表示物体分层表示表示形式:模型变换中的树形表示方式原理:减少场景中物体的个数,从而降低算法复杂度。方法方法6-6-物体分层表示物体分层表示方法: 将父节点所代表的物体看成子

11、节点所代表物体的包围盒,当两个父节点之间不存在遮挡关系时,就没有必要对两者的子节点做进一步测试。父节点之间的遮挡关系可以用它们之间的包围盒进行预测试。画家算法(列表优先算法)画家算法(列表优先算法)l由来:画家的作画顺序暗示出所画物体之间的相互遮挡关系l算法基本思想: 1)先把屏幕置成背景色 2)先将场景中的物体按其距观察点的远近进行排序,结果放在一张线性表中;(线性表构造:距观察点远的称优先级低,放在表头;距观察点近的称优先级高,放在表尾。该表称为深度优先级表) 3)然后按照从远到近(从表头到表尾)的顺序逐个绘制物体。关键:如何对场景中的物体按深度(远近)排序,建立深度优先级表?画家算法(列

12、表优先算法)画家算法(列表优先算法)l一种针对多边形的排序算法如下:Step 1:将场景中所有多边形存入一个线性表,记为L;Step 2: 如果L中仅有一个多边形,算法结束;否则根据每个多边形的Zmin对它们预排序。不妨假定多边形P落在表首,即Zmin(P)为最小。再记Q为L P(表中其余多边形)中任意一个;Step 3: 判别P, Q之间的关系,有如下二种:(1): 对所有的Q,有Zmax(P) Zmin (Q),需进一步判别:画家算法(列表优先算法)画家算法(列表优先算法)例子: A)若P,Q的投影P,Q的包围盒不相交(图a),则P,Q在表中的次序不重要,令L = L P, 返回step

13、2;否则进行下一步。画家算法(列表优先算法)画家算法(列表优先算法)B)若P的所有顶点位于Q所在平面的不可见的一侧(图b),则P,Q关系正确,令L = L P, 返回step 2;否则进行下一步。画家算法(列表优先算法)画家算法(列表优先算法)C)若Q的所有顶点位于P所在平面的可见的一侧(图c),则P,Q关系正确,令L = L P, 返回step 2;否则进行下一步。画家算法(列表优先算法)画家算法(列表优先算法)D)对P,Q投影P,Q求交,若P,Q不相交(图d),则P,Q在表中的次序不重要,令L = L P, 返回step 2;否则在它们所相交的区域中任取一点,计算P,Q在该点的深度值,如果

14、P的深度小,则P,Q关系正确,令L = L P, 返回step 2;否则交换P,Q,返回step 3.画家算法(列表优先算法)画家算法(列表优先算法)本算法不能处理的情况:多边形循环遮挡多边形相互穿透解决办法:分割成两个Z-BufferZ-Buffer算法算法由来: 帧缓冲器 保存各像素颜色值 Z缓冲器 -保存各像素处物体深度值 Z缓冲器中的单元与帧缓冲器中的单元一一对应Z-BufferZ-Buffer算法算法算法思想:先将Z缓冲器中个单元的初始值置为最小值。当要改变某个像素的颜色值时,首先检查当前多边形的深度值是否大于该像素原来的深度值(保存在该像素所对应的Z缓冲器的单元中),如果大于,说明

15、当前多边形更靠近观察点,用它的颜色替换像素原来的颜色;否则说明在当前像素处,当前多边形被前面所绘制的多边形遮挡了,是不可见的,像素的颜色值不改变。Z-BufferZ-Buffer算法算法- -算法描述算法描述 帧缓存全置为背景色深度缓存全置为最小Z值for(每一个多边形) for(该多边形所覆盖的每个象素(x,y) ) 计算该多边形在该象素的深度值Z(x,y); if(Z(x,y)大于Z缓存在(x,y)的值) 把Z(x,y)存入Z缓存中(x,y)处 把多边形在(x,y)处的颜色值存入帧缓存的(x,y)处 需要计算的像素深度值次数需要计算的像素深度值次数=多边形个数多边形个数*多边形平均占据的多

16、边形平均占据的像素个数像素个数Z-BufferZ-Buffer算法算法Z缓冲器算法是所有图像空间算法中最简单的一种隐藏面消除算法。它在象素级上以近物取代远物,与形体在屏幕上的出现顺序无关。优点:1)简单稳定,利于硬件实现 2)不需要整个场景的几何数据缺点: 1)需要一个额外的Z缓冲器 2)在每个多边形占据的每个像素处都要计算深度值,计算量大 Z-BufferZ-Buffer算法算法- -改进算法改进算法只用一个深度缓存变量zb的改进算法。一般认为,Z-Buffer算法需要开一个与图象大小相等的缓存数组ZB,实际上,可以改进算法,只用一个深度缓存变量zb。 Z-BufferZ-Buffer算法算

17、法- -改进算法改进算法帧缓存全置为背景色帧缓存全置为背景色for(屏幕上的每个象素屏幕上的每个象素(i,j) 深度缓存变量深度缓存变量zb置最小值置最小值MinValue for(多面体上的每个多边形多面体上的每个多边形Pk) if(象素点象素点(i,j)在在pk的投影多边形之内的投影多边形之内)计算计算Pk在在(i,j)处的深度值处的深度值depth;if(depth大于大于zb)zb = depth;indexp = k; if(zb != MinValue) 在交点在交点 (i,j) 处用多边形处用多边形Pindexp的颜色显示的颜色显示 Z-BufferZ-Buffer算法算法- -

18、改进算法改进算法关键问题:判断象素点(i,j)是否在多边形Pk的投影多边形之内计算多边形Pk在点(i,j)处的深度。设多边形Pk的平面方程为:扫描线扫描线Z-bufferZ-buffer算法算法n n由来:Z缓冲器算法中所需要的Z缓冲器容量较大,为克服这个缺点可以将整个绘图区域分割成若干个小区域,然后一个区域一个区域地显示,这样Z缓冲器的单元数只要等于一个区域内像素的个数就可以了。n n如果将小区域取成屏幕上的扫描线,就得到扫描线Z缓冲器算法。扫描线扫描线Z-bufferZ-buffer算法算法n n算法思想:n n在处理当前扫描线时,开一个一维数组作为当在处理当前扫描线时,开一个一维数组作为

19、当前扫描线的前扫描线的Z-bufferZ-buffer。首先。首先找出与当前扫描线找出与当前扫描线找出与当前扫描线找出与当前扫描线相关的多边形,以及每个多边形中相关的边对相关的多边形,以及每个多边形中相关的边对相关的多边形,以及每个多边形中相关的边对相关的多边形,以及每个多边形中相关的边对。n n对每一个边对之间的小区间上的各象素,计算对每一个边对之间的小区间上的各象素,计算深度,并与深度,并与Z-bufferZ-buffer中的值比较,找出各象素中的值比较,找出各象素处可见平面。处可见平面。n n写帧缓存。采用增量算法计算深度。写帧缓存。采用增量算法计算深度。扫描线扫描线Z-bufferZ-

20、buffer算法算法for ( v= 0;vvmax;v+) for (u= 0; u Z缓冲器的第u单元的值) 置帧缓冲器的第(u,v)单元值为当前多边形颜色; 置Z缓冲器的第u单元值为d; /处理下一条扫描线 扫描线扫描线Z-bufferZ-buffer算法算法n n改进之一:将窗口分割成扫描线Z缓冲器的单元数只要等于一条扫描线内像素的个数就可以了。扫描线扫描线Z-bufferZ-buffer算法算法n n改进之二:采用多边形分类表、活化多边形表避免多边形多边形与扫描线的盲目求交n n多边形分类表(PT):对多边形进行分类的一维数组,长度等于绘图窗口内扫描线的数目。若一个多边形在投影平面上

21、的投影的最小v坐标为v,则它属于第v类。扫描线扫描线Z-bufferZ-buffer算法算法扫描线扫描线Z-bufferZ-buffer算法算法n n活化多边形表(活化多边形表(APLAPL):记录):记录投影与当前扫描线相交的多边形。投影与当前扫描线相交的多边形。扫描线扫描线Z-bufferZ-buffer算法算法- -多边形多边形n n其中,多边形的数据结构如下:其中,多边形的数据结构如下:n na,b,c,da,b,c,d:多边形所在平面方程:多边形所在平面方程f(u,v,nf(u,v,n)=)=au+bv+cn+dau+bv+cn+d=0=0的的系数。系数。n ncolor:color

22、:多边形的颜色多边形的颜色n nvmaxvmax: :多边形在投影平面上的投影的最大多边形在投影平面上的投影的最大v v坐标值。坐标值。n nPIPI:多边形的序号:多边形的序号n nnextPnextP:指向下一个多边形结构的指针:指向下一个多边形结构的指针扫描线扫描线Z-bufferZ-buffer算法算法n n改进之三:利用边、边的分类表、边对、活化边改进之三:利用边、边的分类表、边对、活化边对表避免对表避免边边边边与扫描线的盲目求交与扫描线的盲目求交n n扫描线Z-buffer算法- -边数据结构边数据结构n n边:用来记录多边形的一条边,其中边:用来记录多边形的一条边,其中vmaxv

23、max:边的投影:边的投影的上端点的的上端点的v v坐标。坐标。n nu u:边的下端点的:边的下端点的u u坐标坐标n nn n:边的下端点的:边的下端点的n n坐标坐标 D Du u:在该边上:在该边上v v值增加一个单位时,值增加一个单位时,u u坐标的变化量坐标的变化量D Dn nnextEnextE:指向下一条边结构的指针。:指向下一条边结构的指针。扫描线扫描线Z-bufferZ-buffer算法算法n n边的分类表(边的分类表(ETET):当一个多边形):当一个多边形进入活化多边形表时进入活化多边形表时,需为其建立一个边分类表(需为其建立一个边分类表(ETET)。这里,)。这里,E

24、TET与其在扫描与其在扫描转换多边形的扫描线算法中的含义相同,是对多边形的非转换多边形的扫描线算法中的含义相同,是对多边形的非水平边进行分类的一维数组,长度等于绘图窗口内扫描线水平边进行分类的一维数组,长度等于绘图窗口内扫描线的数目。若一条边在投影平面上的投影的下端点的的数目。若一条边在投影平面上的投影的下端点的v v坐标坐标为为v v,则将该边归为第,则将该边归为第v v类。类。区域子分算法(区域子分算法(Warnock Warnock 算法算法) )n n由来:由来: Z Z缓冲器算法与扫描线缓冲器算法与扫描线Z Z缓冲器算法中都是缓冲器算法中都是将像素孤立来考虑,未利用相邻像素之间存在的

25、将像素孤立来考虑,未利用相邻像素之间存在的属性的连贯性,即区域的连贯性,所以算法效率属性的连贯性,即区域的连贯性,所以算法效率不高。实际上,可见多边形至少覆盖了绘图窗内不高。实际上,可见多边形至少覆盖了绘图窗内的一块区域,这块区域由多边形在投影平面上的的一块区域,这块区域由多边形在投影平面上的投影的边界围成。如果能将这类区域找出来,再投影的边界围成。如果能将这类区域找出来,再用相应的多边形颜色加以填充则避免了在每个像用相应的多边形颜色加以填充则避免了在每个像素处计算深度值,消隐问题也就解决了。素处计算深度值,消隐问题也就解决了。区域子分算法(区域子分算法(Warnock Warnock 算法)

26、算法)n n算法基本思路:首先将场景中的多边形投影到绘图窗口内(假设它为边长为假设它为边长为k k的正方形的正方形),判断窗口是否足够简单,若是则算法结束;否则将窗口进一步分为四块。对此四个小窗口重复上述过程,直到窗口仅为一个像素大小。此时可能有多个多边形覆盖了该像素,计算它们的深度值,以最近的颜色显示该像素即可。区域子分算法(区域子分算法(Warnock Warnock 算法)算法)n n何谓窗口足够简单? 存在下列情况之一即可称为窗口足够简单:存在下列情况之一即可称为窗口足够简单:1 1)窗口为空,即多边形与窗口的关系是)窗口为空,即多边形与窗口的关系是分离分离的;的;2 2)窗口内仅含一

27、个多边形,即有一个多边形与窗)窗口内仅含一个多边形,即有一个多边形与窗口的关系是口的关系是包含或相交包含或相交。此时先对多边形投影进。此时先对多边形投影进行裁剪,再对裁剪结果进行填充;行裁剪,再对裁剪结果进行填充;3 3)有一个多边形的投影)有一个多边形的投影包围包围了窗口,并且它是最了窗口,并且它是最靠近观察点的,以该多边形颜色填充窗口。靠近观察点的,以该多边形颜色填充窗口。区域子分算法(区域子分算法(Warnock Warnock 算法)算法)区域子分算法(区域子分算法(Warnock Warnock 算法)算法)n n分离和包围多边形的判别:通常有分离和包围多边形的判别:通常有3 3种判

28、别种判别方法:射线检查法,转角累计检查法和区方法:射线检查法,转角累计检查法和区域检查法。这三种检查都假定相交的和内域检查法。这三种检查都假定相交的和内含的多边形已经事先判定了。含的多边形已经事先判定了。n n射线检查法:从窗口内的任意点,画一射线检查法:从窗口内的任意点,画一条射线至无穷远处,累计射线与多边形条射线至无穷远处,累计射线与多边形交点的个数。如果为偶数交点的个数。如果为偶数( (或为零或为零) ),则,则此多边形与窗口分离;否则,此多边形此多边形与窗口分离;否则,此多边形包围窗口。但当射线通过多边形的顶点包围窗口。但当射线通过多边形的顶点时,会得出错误结论。时,会得出错误结论。(

29、 (如左图如左图) )解决方解决方法有:当射线通过多边形的局部极值顶法有:当射线通过多边形的局部极值顶点时,记入两个交点;当射线通过多边点时,记入两个交点;当射线通过多边形的非局部极值顶点时,记入一交点。形的非局部极值顶点时,记入一交点。yxp6p7p8p4p10p9p3p1p2p5yxp6p4p3p1p2p5p6区域子分算法(区域子分算法(Warnock Warnock 算法)算法)n n转角累计检查法转角累计检查法: :按顺时针方向或逆时针方向绕多边形依次累加多边按顺时针方向或逆时针方向绕多边形依次累加多边形各边起点与终点对窗口内任意一点所张的夹角。按累计角度之和可形各边起点与终点对窗口内

30、任意一点所张的夹角。按累计角度之和可以判定:以判定:n n若角度之和等于若角度之和等于0 0,则表示多边形与窗口分离;,则表示多边形与窗口分离;n n若角度之和等于若角度之和等于360360 *n*n,则表示多边形包围窗口,则表示多边形包围窗口(n(n次次) )。多边形多边形窗口窗口窗口窗口多边形多边形区域子分算法(区域子分算法(Warnock Warnock 算法算法n n区域检查法: 1)区域编码 2)多边形顶点编码 3)多边形边的编码 4)多边形的编码区域子分算法(区域子分算法(Warnock Warnock 算法算法) )n n1 1、区域编码。窗口四条、区域编码。窗口四条边所在直线将

31、屏幕划分成边所在直线将屏幕划分成9 9个区域,对窗口以外的个区域,对窗口以外的8 8个区域按逆时针(或顺个区域按逆时针(或顺时针)进行编码,编码为时针)进行编码,编码为0707。n n2 2、多边形顶点编码。多、多边形顶点编码。多边形边形v v0 0v v1 1v vn n的顶点的顶点v vi i的的投影落在哪个区域,那个投影落在哪个区域,那个区域的编码便作为该顶点区域的编码便作为该顶点的编码,记为的编码,记为I Ii i。区域子分算法(区域子分算法(Warnock Warnock 算法算法) )n n3、多边形的编码。多边形的边vi ivi+1i+1的编码定义为Di i=Ii+1i+1-Ii

32、 i,i=0,1n;其中,令In+1n+1=I0 0,并且,当Di i 4时,取Di i = Di i -8;当Di i 4时,取Di i = Di i +8;n n当Di i =+/-4时,取该边与窗口边的延长线的交点将该边分为两段,对两段分别按上面的规则编码,再令Di i等于两者之和。n n4、多边形的编码。定义多边形的编码为其边的编码之和 ,则区域子分算法(区域子分算法(Warnock Warnock 算法算法) )区域子分算法(区域子分算法(Warnock Warnock 算法算法) )n n例如:例如:I I0 0=5,I=5,I1 1=7,I=7,I2 2=3, =3, D D0

33、0=7-5=2, =7-5=2, D D1 1=3-7=-4, =3-7=-4, D D2 2=5-3=2, =5-3=2, 因为因为D D1 1=-4,=-4,按按第三步的处理规则,取边第三步的处理规则,取边v v1 1v v2 2与窗口上边所在直线与窗口上边所在直线的交点将的交点将v v1 1v v2 2分为两段,分为两段,两段的编码分别为两段的编码分别为2 2,2 2,从而,从而D D2 2=4=4。最终求出多。最终求出多边形的编码为边形的编码为 D D0 0+ + D D1 1+ +D D2 2=2+4+2=8=2+4+2=8,因,因此,该三角形包围窗口。此,该三角形包围窗口。区域子分

34、算法(区域子分算法(Warnock Warnock 算法算法) )n n如图:如图:I I0 0=1,I=1,I1 1=3,I=3,I2 2=7, =7, D D0 0=3-=3-1=2, 1=2, D D1 1=7-3=4, =7-3=4, D D2 2=1-7=-6=1-7=-6。按第按第3 3步处理规则,取步处理规则,取v v1 1v v2 2与窗口上边所在直线的交与窗口上边所在直线的交点点v v 将其分为两段,两段将其分为两段,两段的编码分别为的编码分别为-2-2,-2-2,从,从而而D D1 1=-2+=-2+(-2-2)=-4=-4。而。而D D2 2=-6+8=2=-6+8=2。

35、最终求出多。最终求出多边形的编码为边形的编码为D D0 0+ +D D1 1+ +D D2 2=2+=2+(-4-4)+2=0+2=0。n n从而得出结论:多边形与从而得出结论:多边形与窗口分离。窗口分离。光线投射算法光线投射算法n n算法思想:将通过绘图窗口内每一个像素的投影线与场景算法思想:将通过绘图窗口内每一个像素的投影线与场景中的所有多边形求交。如果有交点,用深度值最大的交点中的所有多边形求交。如果有交点,用深度值最大的交点(最近的)所属的多边形的颜色显示相应的像素;如果没(最近的)所属的多边形的颜色显示相应的像素;如果没有交点,说明没有多边形的投影覆盖此像素,用背景色显有交点,说明没

36、有多边形的投影覆盖此像素,用背景色显示即可。示即可。光线投射算法光线投射算法- -算法描述算法描述for ( v= 0;vvmax;v+) for (u= 0; uumax; u+) 形成通过像素(u,v)的投影线; for (场景中每一个多边形) 将投影线与多边形求交; if (有交点) 以最近交点所属多边形的颜色显示像素(u,v) else 以背景色显示像素(u,v); 光线投射算法光线投射算法n n基本问题n n光线与物体表面的求交光线与物体表面的求交光线投射算法光线投射算法- -算法描述算法描述for ( v= 0;vvmax;v+) for (u= 0; u Z Zf f时,取时,取

37、S S0 0= =S Sf fn n当当Z Z0 0 ht t,即qt tqi i。如果入射角不断增大,到一定的程度,折射角qt t =90度,此时透射光线沿着平行于分界面的方向传播,称此时的qi i为临界角度,记为qc c 。当qi i qc c时,发生全反射,透射与反射光合二为一。光透射模型的研究光透射模型的研究n n早期简单透射现象的模拟n n1980年,Whitted光透射模型,首次考虑了光线的折射现象n n1983年,在Whitted的基础上,Hall光透射模型,考虑了漫透射和规则透射光整体光照明模型整体光照明模型 简单光照明模型亦称局部光照明模型,其假定物体是不透明的,只考虑光源的

38、直接照射,而忽略了光在环境景物之间的传递。为了增加图形的真实感,必须考虑环境的漫射、镜面反射和规则投射对景物表面产生的整体照明效果。 整体光照明模型考虑了物体之间的相互影响以产生整体照明效果整体光照明模型整体光照明模型n n物体表面入射光的构成(1 1)光源直接照射)光源直接照射(2 2)其它物体的反射光)其它物体的反射光(3 3)透射光)透射光n n局部光照明模型仅考虑了(1)整体光照明模型整体光照明模型n n例如:从视点观察到的物体例如:从视点观察到的物体A A表面表面的亮度来源于三方面的贡献:的亮度来源于三方面的贡献:(1 1)光源直接照射到)光源直接照射到A A的表面,然后的表面,然后

39、被反射到人眼中的光产生的。被反射到人眼中的光产生的。(2 2)光源或其它物体的光经)光源或其它物体的光经A A物体折物体折射到人眼中的光产生的。射到人眼中的光产生的。(3 3)物体)物体B B的表面将光反射到物体的表面将光反射到物体A A的表面,再经物体的表面,再经物体A A的表面反射到的表面反射到人眼中产生的。人眼中产生的。n n局部光照明模型仅考虑了(局部光照明模型仅考虑了(1 1)WittedWitted光照模型光照模型n nWhitted光照模型基于如下假设:n n物体表面向视点方向V辐射的光亮度I 由三部分组成:(1)光源直接照射引起的反射光亮度Il l 。(2)来自V的镜面反射方向

40、R的其它物体反射或折射来的光的亮度Is s 。(3)来自V的透射方向T的其它物体反射或折射来的光的亮度It t WittedWitted光照模型光照模型n nWittedWitted光照模型:光照模型:I I = = I Il l + + K Ks s I Is s + + K Kt tI It t n n或或n nI Is s 为镜面反射方向的入射光强度;为镜面反射方向的入射光强度;K Ks s为镜面反射系数,为镜面反射系数,为为0 01 1之间的一个常数之间的一个常数n nI It t 为折射方向光强,为折射方向光强,K Kt t为透射系数,是为透射系数,是0 0 1 1之间的常之间的常数

41、数n nI Il l 的计算可采用的计算可采用PhongPhong模型模型因此,关键是因此,关键是I Is s和和I It t的计算。如何计算呢?的计算。如何计算呢?WittedWitted光照模型光照模型- -反射、折射方向计算反射、折射方向计算n n已知视线方向已知视线方向V V,求其,求其反射方向反射方向R R与折射方向与折射方向T T(N N是表面的法向方向是表面的法向方向)n n视线视线V V的反射方向的反射方向R Rn n折射方向折射方向T TT、R方向确定后,下一步即可计算沿二方向投射景物表面上的光亮度,即Is Is 和和It It 。另外另外WhittedWhitted模型为一

42、递归模型,为模型为一递归模型,为计算这一模型,将用到下面的计算这一模型,将用到下面的光线跟踪技术。光线跟踪技术。光线跟踪(光线跟踪(Raytracing)该方法由Appel于1968年提出。光线跟踪算法的基本原理n n自然界中光线的传播过程光源物体表面 物体表面人眼人眼n n光线跟踪过程-光线传播的逆过程光线跟踪光线跟踪n n从视点向每个从视点向每个象素发出一条光线,它与场景中的一些物体表面相交,最近的象素发出一条光线,它与场景中的一些物体表面相交,最近的交点即为可见点,记为交点即为可见点,记为P P,像素的亮度即由,像素的亮度即由P P点的亮度确定。由点的亮度确定。由WhittedWhitt

43、ed光照模光照模型可知,型可知,P P点的亮度由三部分组成:点的亮度由三部分组成: I Il l , I Is s 和和I It t 。其中其中I Il l 可以直接由局部光照可以直接由局部光照模型计算得到。模型计算得到。光线跟踪光线跟踪n n为了求为了求I Is s 和和I It t ,从,从P P点发出反射光线和透射光线,它分别交场景中的物体表点发出反射光线和透射光线,它分别交场景中的物体表面于面于PsPs和和PtPt,PsPs和和PtPt点的亮度即分别为点的亮度即分别为I Is s 和和I It t ,将它们求出代入,将它们求出代入WhittedWhitted模模型即可。但是,型即可。但

44、是,I Is s 和和I It t 同样由同样由WhittedWhitted模型确定,即模型确定,即WhittedWhitted模型是一个递模型是一个递归式,从而计算归式,从而计算I Is s 和和I It t 需要重复以上的计算过程需要重复以上的计算过程: :计算局部光亮度、发出反计算局部光亮度、发出反射光线与透射光线。可以用一棵光线树来表示射光线与透射光线。可以用一棵光线树来表示光线跟踪光线跟踪n n递归终止条件:1、光线不与场景中的任何物体相交2、被跟踪的光线达到了给定的层次3、由于Ks s和Kt t都小于0,当光线经过反射和折射后,其亮度会衰减。因此可以预先设置一个阈值,在进行光线跟踪

45、时,若被跟踪光线对像素亮度的贡献小于这个阈值,便停止跟踪。光线跟踪算法光线跟踪算法- -算法描述算法描述设置视点,投影平面以及窗口的参数;For (窗口内的每一条扫描线) for (扫描线上的每一个像素) 确定从视点指向像素中心的光线ray; 像素的颜色=RayTracing(ray,1); 光线跟踪算法光线跟踪算法- -算法描述算法描述Color Color RayTracing(RayRayTracing(Ray ray, ray, intint depth) depth) 求求rayray与物体表面最近的交点与物体表面最近的交点P P; if if (有交点)(有交点) 用局部光照明模型

46、计算用局部光照明模型计算P P点的点的IcIc; color = color = IcIc; ; if if (depthdepth给定的最大跟踪层次)给定的最大跟踪层次) 计算计算rayray的反射光线;的反射光线; Is=Is=RayTracingRayTracing( (反射光线,反射光线,depth+1depth+1);); if if (物体是透明的)(物体是透明的) 计算计算rayray的透射光线;的透射光线; It=It=RayTracingRayTracing( (透射光线,透射光线,depth+1); depth+1); color = color = IcIc + Is +

47、 It ; + Is + It ; else color = black else color = black; return color ;return color ; 光线跟踪算法光线跟踪算法 根据光线跟踪基本原理,假设在显示分辨率为根据光线跟踪基本原理,假设在显示分辨率为N NM M的屏幕上生成图形,必须从视点出发通过屏的屏幕上生成图形,必须从视点出发通过屏幕向景物发射幕向景物发射N NM M条光线。设每根光线在场景中条光线。设每根光线在场景中经过反射和折射平均派生出经过反射和折射平均派生出d d根光线,并设每一景物交点朝光源发射m m 条阴影探测光线,则总的光线数增加至(m+1) (m

48、+1) d d N N M M。当。当m m为为2 2,d d为为5 5,N N为为800800,M M为为600600时,其光线数目是时,其光线数目是720720万条。万条。这意味着需进行这意味着需进行720720万次直线与景物的求交计算才万次直线与景物的求交计算才能完成图形的绘制。庞大的求交量使图形绘制耗能完成图形的绘制。庞大的求交量使图形绘制耗费大大增加。生成一幅中等复杂程度的真实感图费大大增加。生成一幅中等复杂程度的真实感图形需要数分钟至数小时。形需要数分钟至数小时。光线跟踪算法光线跟踪算法 优点: 能够方便的产生阴影,模拟镜面反射与折射现象。 缺点: 计算量大,每一条光线都要与场景中的物体进行求交、计算光照模型等。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号