1、根据多面体表面的平面法矢决定颜色值,直接调用OpenGL的多边形填充算法即可。算法简单,但轮廓分明,各多边形之间过渡不光滑。,2)Gouraud模型,算法思想:为使多边形边界之间光滑显示,先计算多边形各顶点光强,后通过双线性插值,计算多边形内各点光强。,能保证多边形边界颜色的连续性,但高光模糊,有时出现过亮或过暗条纹(即马赫效应)。计算较为简单,OpenGL算法已实现硬件加速。,算法步骤:,For(每一个三角形)1)计算多边形顶点的平均法向;2)根据基本光照模型计算顶点的平均光强;3)通过线性插值,计算多边形的边上的各点光强;4)通过线性插值,计算多边形内部各点的光强。,10 三维形体的真实感
2、显示,1.简单效果的浓淡图生成2.一般性效果图形生成3.真实感效果图生成 1)全局关照模型 2)光线跟踪 3)辐射度算法4.纹理映射,2.一般性效果图形生成,1)简单光照明模型-Phong模型,简单光照明模型模拟物体表面对光的反射作用。光源被假定为点光源,反射作用被细分为镜面反射(Specula Reflection)和漫反射(Diffuse Reflection)。,简单光照明模型只考虑物体对直接光照的反射作用,而物体间的光反射作用,只用环境光(Ambient Light)来表示。,Phong模型是一种简单光照明模型,不妨设:入射光强为Ip 物体表面上点P 的法向为N 从点P指向光源的向量为
3、L 两者间的夹角为,A)理想漫反射 当光源来自一个方向时,漫反射光均匀向各方向传播,与视点无关,它是由表面的粗糙不平引起的,因而可假定漫反射光的空间分布是均匀的。,P,如果 Ip 表示点光源的强度,kd 表示物体表面漫反射系数,则漫反射方程可描述为:,若N为物体表面的单位法向量,L为物体表面上一点指向光源的单位矢量,则:,如果有多个光源,则光强度计算式为:,B)镜面反射光 对于理想镜面,反射光集中在一个方向,并遵守反射定律。对一般的光滑表面,反射光集中在一个范围内,且由反射定律决定的反射方向光强最大。,因此,对于同一点来说,从不同位置所观察到的镜面反射光强是不同的。镜面反射光强可表示为:,Ks
4、是与物体有关的镜面反射系数,a 为视线方向V与反射方向R的夹角,n为反射指数,反映了物体表面的光泽程度,一般为12000,数目越大物体表面越光滑。,镜面反射光将会在反射方向附近形成很亮的光斑,称为高光现象。镜面反射光产生的高光区域只反映光源的颜色 将V和R都格式化为单位向量,镜面反射光强可表示为:,式中:,对多个光源:,C)环境光 环境光是指光源间接对物体的影响,是在物体和环境之间多次反射,最终达到平衡时的一种光。近似地认为同一环境下的环境光,其光强分布是均匀的,它在任何一个方向上的分布都相同。例如,透过厚厚云层的阳光就可以称为环境光。在简单光照明模型中,用一个常数来模拟环境光,用式子表示为:
5、,其中:Ia 为环境光的光强 Ka为物体对环境光的反射系数,D)Phong光照明模型 综上分析,Phong光照明模型表述为:由物体表面上一点 P 反射到视点的光强 I 为环境光的反射光强 I e、理想漫反射光强 I d、和镜面反射光 I s 的总和,即:,按R、G、B三种颜色分量展开计算得:,I I e I d I s,由此可得:,用Phong模型进行计算时,对物体表面上每个点P,均需计算光线的反射方向R,再由V计算(RV),为减少计算,可作如下假设:a)光源在无穷远处,即光线方向L为常数;b)视点在无穷远处,即视线方向V为常数;c)为避免计算反射方向R,用(HN)近似代替(RV)这里H为L和
6、V的平分向量,即:H(LV)/|LV|,注意:Phong模型对物体表面的每一点的光强进行计算,显然其计算量较大。,E)Phong模型计算实例 图中可以看出高光指数n、漫反射Kd及镜面系数Ks对显示效果的影响 亮点集中 面积 亮度,Phong光照明模型是真实感图形学中提出的第一个有影响的光照明模型,生成图象的真实度已达到可接受程度。但在实际应用中,它是一个经验模型,还具有以下的一些问题:用Phong模型显示出的物体象塑料,没有质感;没有考虑距离对光照强度的衰减影响;环境光是常量,没有考虑物体之间相互的反射光;镜面反射的颜色是光源的颜色,与物体的材料无关;镜面反射的计算在入射角很大时会产生失真;P
7、hong模型是简单的局部光照模型,对物体间相互反射及折射、阴影处理欠缺等。,2)浓淡图绘制算法,通过前面介绍的Gouraud模型、Phong光照模型可计算物体表面上点的颜色值。为了显示形体的三维真实感效果图,下面介绍多面体浓淡图的如何绘制。,由于空间三维物体是连续点集。显然直接计算点的颜色将无法确定计算采样点的位置和数目。,事实上,我们仅能看到屏幕所能显示的区域。如果能够求得屏幕上每一个象素点所对应的物体上点的颜色,这样就可绘制整个图形。,为了得到屏幕上某象素点所对应的物体上点的颜色,假定作经过该象素点的一条射线,射线平行于观察视线,则射线与多面体物体可能有多个交点。如果物体不是透明的,则处于
8、最前面的交点的颜色即为所求,如右图所示。,最简单的算法Z缓冲区(ZBuffer)算法,为计算物体表面上对应象素点的颜色,用帧缓存器存放每个象素颜色(按光照模型计算),用深度缓存空间来存放每个象素深度值Z,称为Z缓冲器(即ZBuffer)。,A)Z缓冲器(Z-Buffer)算法,绘制时思路:1)Z 缓冲器中每个单元值是对应象素点所反映物体对象的 z 坐标值,初值取成 z 的极小值。2)将待处理的景物表面上的采样点变换到图像空间,计算其深度值 z。3)并根据采样点在屏幕上的投影位置,将其 z 值与已存贮在 z 缓存器中相应象素处的原可见点的深度值进行比较。4)如果该采样点位于Z缓存器所记录的可见点
9、之前,则将该采样点处的表面颜色填入帧缓存器相应象素,同时用其深度值更新 z 缓存器存贮的深度值。否则,不写入也不更新。,Z-Buffer算法()for(i=0,1,m)/m:窗口水平方向象素数目 for(j=1,n)/n:窗口垂直方向象素数目 用背景色初始化帧缓存CB:CB(i,j)=背景色;用最小Z值初始化深度缓存:ZB(i,j)=Zmin;for(每一个多边形 p)/算法1 将该多边形进行投影变换;扫描转换该多边形在视平面上的投影多边形;for(该多边形所覆盖的每个象素(i,j)计算该多边形在该象素的深度值Zi,j;if(Zi,j ZB(i,j)ZB(i,j)Zi,j;计算该多边形在该象素
10、的颜色值Ci,j;CB(i,j)=Ci,j;/for p/注:对投影多边形进行裁剪得到有效区域,可加快显示速度,Z-Buffer算法在象素级上以近物取代远物。形体在屏幕上的出现顺序是无关紧要的。这种取代方法实现起来远比总体排序灵活简单,有利于硬件实现。然而Z-Buffer算法存在缺点:占用空间大,没有利用图形的相关性与连续性。Z-Buffer算法以算法简单著称,但也以占空间大而闻名。Z-Buffer算法需要开一个与图象大小相等的缓存数组ZB,可一次性显示。当然,也可只用一个深度缓存变量zb,但需逐点计算显示,显示效率低下。,B)扫描线Z-buffer算法,如何减少Z-buffer的缓冲内存,并
11、利用相关性提高点与多边形的包含性测试和深度计算速度,就得到扫描线Z-buffer算法。从最上扫描线开始向下对每条扫描线作处理。对每条扫描线来说,把相应的帧缓冲器单元置成底色,在z缓冲器中存放z的极小值。,与Zbuffer算法相比,扫描线Zbuffer将整个绘图窗口内的消隐问题分解到一条条扫描线上解决,使所需的Z缓冲器大大减少。,对每个多边形检查它在oxy平面上的投影和当前扫描线是否相交(如右上图),若不相交则跳过该多边形;若相交则扫描线和多边形边界交点一定成对出现,对每对交点间的象素计算多边形所在平面对应点的深度(即 z 值),并和z缓冲器中相应深度值比较。对所有多边形和帧缓冲器每一行都作上述
12、处理。利用活性多边形Y、活化边表处理相邻扫描线和象素的连贯性,提高算法效率。,C)区间扫描线算法,扫描线z缓冲器算法将消隐问题分散到每一条扫描线上去解决,这样问题变得较简单了。但在每个象素处计算多边形z值的工作量仍是很大。实际上每条扫描线被各多边形边界在oxy平面上的投影分割成为数不多的区间(如右图),每一个区间上只显示一个面。因此,只要在区间上任一点处,找出在该处z值最大的一个面,这个区间上的每个象素就用这个面的颜色来显示。这就是所谓区间扫描线算法。,扫描面Oxz,区间扫描线算法使得在一条扫描线上每个区间只计算一次深度值,不需要Z缓冲器。它是把当前扫描线与各多边形在投影平面的投影的交点进行排
13、序后,使扫描线分为若干子区间。因此,只要在该区间任一点处找出在该处 z 值最大的一个面,这个区间上的每一个象素就用这个面的颜色来显示。,当然,现在计算机的硬件发展很快,缓存数组所耗空间已不是障碍。,Phong模型的区间扫描线绘制算法示例,1,10 三维形体的真实感显示,1.简单效果的浓淡图生成2.一般性效果图形生成3.真实感效果图生成 1)全局关照模型 2)光线跟踪 3)辐射度算法4.纹理映射,1)整体光照明模型及真实感显示,简单光照明模型和局部光照明模型,虽然可以产生物体的真实感图象,但它们都只是处理光源直接照射物体表面的光强计算,不能很好的模拟光的折射、反射和阴影等,也不能用来表示物体间的
14、相互光照明影响。而基于简单光照明模型的光透射模型,虽然可以模拟光的折射,但是这种折射的计算范围很小,不能很好的模拟多个透明体之间的复杂光照明现象。对于上述的这些问题,就必须要有一个更精确的光照明模型。整体光照明模型就是这样的一种模型,它是相对于局部光照明模型而言的。在现有的整体光照明模型中,主要有光线跟踪和辐射度两种绘制方法。,2)光线跟踪算法的基本思想,光线跟踪算法是真实感图形学中的主要算法之一,算法具有原理简单、实现方便和能够生成各种逼真的视觉效果等优点。在真实感图形学对光线跟踪算法的研究中,Whitted提出了第一个整体光照模型,并给出一般性光线跟踪算法的范例,综合考虑了光的反射、折射透射、阴影等。,光线跟综过程示意图,简单光透射模型把透射光分为理想漫透射和规则透射。由光源发出的光称为直接光,物体对直接光的反射或折射称为直接反射和直接折射。把物体表面间对光的反射和折射称为间接光,间接反射,间接折射。这是光线在物体间的传播方式,是光线跟踪算法的基础。,由光源发出的光到达物体表面后,产生反射和折射,简单光照明模型和光透射模型模拟了这两种现象。在简单光照明模型中,反射被分为理想漫反射和镜面反射光。,最基本的光线跟踪算法是跟踪镜面反射和折射。从光源
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1