真实感图形显示11复习过程.ppt
《真实感图形显示11复习过程.ppt》由会员分享,可在线阅读,更多相关《真实感图形显示11复习过程.ppt(84页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、真实感图形显示11线消隐线消隐 是以场景中的物体为处理单元,将一个物体与其余的 k1 个物体逐一比较,仅显示它可见的表面以达到消隐的目的。此类算法通常用于消除隐藏线消除隐藏线。假定场景中有 k 个物体,平均每个物体的表面由 h 个多边形构成,其计算复杂度为 O(kh)2)。算法描述如下:算法描述如下:for(场景中的每一个物体)将该物体与场景中的其它物体进行比较,确定其表面的可见部分;显示该物体表面的可见部分;(示例如右图)线消隐示例面消隐面消隐是以窗口内的每个像素为处理单元,确定在每一个像素处,场景中的物体哪一个距离观察点最近(可见的),从而用它的颜色来显示该像素。此类算法通常用于消消除隐藏
2、面除隐藏面。若显示区域中有 mn 个像素,则其计算复杂度为O(mnkh)。算法描述如下:算法描述如下:for(窗口内的每一个像素)确定距观察点最近的物体,以该物体表面的颜色来显示像素;面削隐示例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)
3、0任意两个自隐藏面的交线,为自隐藏线。(自隐藏线应该用虚线输出)。7.1.3 凹多面体的隐藏线消隐凹多面体的隐藏线消隐凹多面体的隐藏线消除比较复杂。假设凹多面体用它的表面多边形的集合表示,消除隐藏线的问题可归结为:对于一条空间线段对于一条空间线段P1P2和一个多边形和一个多边形,判,判断线段是否被多边形遮挡断线段是否被多边形遮挡。如果被遮挡,求出如果被遮挡,求出隐藏部分隐藏部分 线段和多边形的关系有:1)线段与多边形的任何边均不相交。处理方法比较简单。2)线段与多边形相交。那么多边形的边把线段投影的参数区间0,1分割成若干子区间,每个子区间对应一条子线段(如下图所示),进一步判断各子线段的隐藏
4、性。线段投影被分为若干子线段可见子线段的确定 把各个子线段与所有需要比较的多边形依次进行隐藏性判别,记下各条隐藏子线段的位置。最后,对这些区间进行求并集运算,即可确定总的隐藏子线段的位置,余下的则是可见子线段(右图)基本思想:基本思想:在图象空间中,将待显示的所有多边形按深度值从小到大排序,用前面可见多边形去切割后面的多边形,最终使得每个多边形要么是完全可见,要么是完全不可见。用区域排序算法消隐,需要用到一个多边形裁剪算法。7.2.1 区域排序算法(区域排序算法(1)当对两个形体相应表面的多边形进行裁剪时,我们称用来裁剪的多边形为裁剪多边形,另一个多边形为被裁剪多边形。算法要求多边形的边都是有
5、向的,不妨设多边形的外环总是顺时针方向的,并且沿着边的走向,左侧始终是多边形的外部,右侧是多边形的内部。若两多边形相交,新的多边形可以用“遇到交点后向右拐”的规则来生成。于是被裁剪多边形被分为两个乃至多个多边形;我们把其中落在裁剪多边形外的多边形叫作外部多边形;把落在裁剪多边形之内的多边形叫作内部多边形。区域排序算法(区域排序算法(2 2)算法的步骤:算法的步骤:进行初步深度排序,如可按各多边形z向坐标最小值(或最大值、平均值)排序。选择当前深度最小(离视点最近)的多边形为裁剪多边形。用裁剪多边形对那些深度值更大的多边形进行裁剪。比较裁剪多边形与各个内部多边形的深度,检查裁剪多边形是否是离视点
6、最近的多边形。如果裁剪多边形深度大于某个内部多边形的深度,则恢复被裁剪的各个多边形的原形,选择新的裁剪多边形,回到步骤再做,否则做步骤。选择下一个深度最小的多边形作为裁剪多边形,从步骤开始做,直到所有多边形都处理过为止。在得到的多边形中,所有内部多边形是不可见的,其余多边形均为可见多边形。8.2.2 深度缓存深度缓存(Z-buffer)算法算法由来由来:帧缓冲器保存各像素颜色值(CB)z缓冲器-保存各像素处物体深度值(ZB)z缓冲器中的单元与帧缓冲器中的单元一一对应思路思路:先将z缓冲器中个单元的初始值置为-1(规范视见体的最小n值)。当要改变某个像素的颜色值时,首先检查当前多边形的深度值是否
7、大于该像素原来的深度值(保存在该像素所对应的Z缓冲器的单元中),如果大于,说明当前多边形更靠近观察点,用它的颜色替换像素原来的颜色;否则说明在当前像素处,当前多边形被前面所绘制的多边形遮挡了,是不可见的,像素的颜色值不改变。xyz视线方向视点位置屏幕像素FBufferZBuffer投影面深度缓存算法深度缓存算法 (ZBuffer(ZBuffer算法算法)ZBuffer -ZBuffer -用于存放与屏幕上像素点对应的物体上点的深度值。用于存放与屏幕上像素点对应的物体上点的深度值。Z-buffer算法的步骤如下:算法的步骤如下:初始化ZB和CB,使得ZB(i,j)=Zmax,CB(i,j)=背景
8、色。其中,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两个缓存数组占用的存储单元太多,需要有一个较大容量的 ZBuffer。(2):在每个多边形占据的每个像素处都要计算深度值,计算量大Z-BufferZ-Buffer算法实现中的关键问题算法实现中的关键问题 判断点(i,j)是否在多边形Fk在投影面
9、上的投影内 解决办法:采用包含测试。计算多边形Fk在点(i,j)处的深度值 Zi,j 若多边形Fk的平面方程为:ax+by+cz+d=0若 c 0,则axi+byi+dc若 c=0,则多边形Fk的法线方向与 Z 轴垂直,Fk在投影面上的投影为一条直线,可不予考虑。Zi,j=8.2.4扫描线算法 在多边形填充算法中,活性边表的使用取得了节省运行空间的效果。用同样的思想改造Z-buffer算法:将整个绘图区域分割成若干个小区域,然后一个区域一个区域地显示,这样Z缓冲器的单元数只要等于一个区域内像素的个数就可以了。如果将小区域取成屏幕上的扫描线,就得到扫描线Z缓冲器算法。for(各条扫描线各条扫描线
10、)将帧缓冲器将帧缓冲器I(x)置为背景色;置为背景色;将将Z缓冲器的缓冲器的Z(x)置为最大值;置为最大值;for (每个多边形)每个多边形)求出多边形在投影平面上的投影与当前扫描线的相交区间求出多边形在投影平面上的投影与当前扫描线的相交区间 for (该区间内的每个像素)(该区间内的每个像素)if(多边形在此处的多边形在此处的Z值小于值小于Z(x))置帧缓冲器置帧缓冲器I(x)值为当前多边形颜色;值为当前多边形颜色;置置Z缓冲器缓冲器Z(x)值为多边形在此处的值为多边形在此处的Z值值;扫描线算法描述扫描线算法描述7.3.1 光源特性和物体表面特性光源特性和物体表面特性 Shading:显示一
11、个物体的色彩以及色彩在光照环境下的明暗变化的描绘方法。(相关因素:光源特性和物体表面特性。)一:光源特性一:光源特性 包括包括1:光的色彩光的色彩(R、G、B)2:光的强度光的强度 由R,G,B三种色光的强弱决定,总的光强为:Total_Value=0.30*Value_R+0.59*Value_G+0.11*Value_B 点光源3:光的方向光的方向分布式光源 漫射光源三种光源三种光源 右边是三种右边是三种光源的示意图。光源的示意图。其中点光源和分其中点光源和分布式光源合称直布式光源合称直射光源射光源;物体表面特性包括如下内容物体表面特性包括如下内容:反射系数由物体表面的材料和形状决定,分为
12、漫反射(DiffuseReflection)系数和镜面反射(SpecularReflection)系数。透射系数记为Tp,描述物体透射光线的能力,且有0Tp1。表面方向7.3.2 光照模型及其实现光照模型及其实现 光照模型(IlluminationModel)描述物体表面的色彩明暗同光源特性、物体表面特性之间的关系。光照模型分3个部分描述这种关系,即漫射光线的情况、直线光线的情况和透射光线的情况。漫射光线的情况漫射光线的情况 漫射光源是从四面八方均匀照来的,物体表面的色彩明暗与表面的形状无关,仅与表面的反射系数有关。漫射光源照明的模型为EPd=RPId上式可以写为EPd-r=RP-rId-r,
13、EPd-g=RP-gId-g,EPd-b=RP-bId-b 直射光线的情况直射光线的情况 在这种情况下,物体表面的明暗随表面法矢量和入射光线Is的夹角I的改变而变化。此时,物体表面会发生两类反射,即漫反射漫反射和镜面反射镜面反射。在直射照明下,物体表面P点的漫反射和镜面反射的模型根据Lambert定律和Bui-TuongPhong的实验提出(图8.5)。EPs=RPcosiIPs+WP(i)cosnsIPs光照模型中各参数的图示Eps:P点反射的直射光线IPs的光强RP:P点的漫反射系数I:P点的法矢量N与入射光方向L的夹角Ips:入射的直射光线的强度WP(i):P点的镜面反射系数(入射角i的
14、函数)W(i)与i的关系 WP(i)是P点的镜面反射系数(入射角i的函数)。由于W(i)的计算比较复杂,实际中常用一个常数W代替。n控制高光的聚散,它和P点的材料有关。对于光滑发亮的金属表面,n值取得大,从而产生会聚的高光点 n与高光区域大小的关系 透射光线的情况透射光线的情况 透射模型如下:EPt=TPIPb其中:Ept:物体表面P点处透射出的光强TP:P点的透射系数(取值范围为01)Ipb:到达P点背后的光强。将上述3种情况综合起来,便获得物体表面P点处所发光强EP的计算公式:EP=EPd+EPs+EPt=RPId+(RPcosi+WPcosns)IPs+TPIpb上式中只有cosi和co
15、ss的值是未知的,需要推算。(详见7.3.2)7.3.3 明暗的光滑处理明暗的光滑处理 在计算机图形学中,曲面体(例如球)通常是用多面体逼近表达的。这时,分别计算各个面的亮度,就会在多边形与多边形的交界处产生明暗的连续变化,影响曲面的显示效果。解决方法:采用插补的方法,使得表面明暗光滑化。最常使用的表面明暗光滑化的方法有两种,称为Gourand方法和Phong方法。Gourand光滑方法如下:光滑方法如下:基本思想:在每个多边形顶点处计算颜色,然后在各个多边形内部进行线性插值,得到多边形内部各点颜色。即它是一种颜色插值着色方法。基本步骤:先计算出多面体顶点的法线方向 用光照模型求得V点的亮度。
16、由两顶点的亮度,插值得出棱上各点的亮度。由棱上各点的亮度,插值得出面上各点的亮度。(下面详细介绍每步)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)kStep2:用光照模型求得V点的亮度。Step3:由两顶点的亮度,插值得出棱上各点的亮度。由棱上各点的亮度,插值得出面上各点的亮度。保留abc折痕的情况 如果希望在某处不处理成光滑而要保留折痕效果(例如abc)方法是在顶点b
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 真实感 图形 显示 11 复习 过程
限制150内