1、计算机图形学基础算法计算机图形学基础算法1、三维形体的计算机表达2、图形变换、图形变换3、基础算法、基础算法4、线框及消隐显示、线框及消隐显示5、真实感显示、真实感显示 6、图形学的其它应用、图形学的其它应用 现实生活中的产品都是由不同类型的三维(3D)几何形状构成的集合体。描述产品对象的形状、大小、位置与结构等几何信息的模型称为几何模型(Geometric Model)。利用计算机图形技术可在计算机内部描述产品的几何模型和属性(如颜色、纹理等),并生成直观真实感的图形。三维几何形体的表达 计算机中表示形体几何模型计算机中表示形体几何模型通常用:通常用:线框模型线框模型 表面模型表面模型 实体
2、模型实体模型 线框模型和表面模型保存的线框模型和表面模型保存的三维形体信息都不完整。三维形体信息都不完整。只有实体模型才能够完整地、只有实体模型才能够完整地、无歧义地表示三维形体。无歧义地表示三维形体。点点用三维坐标表示,是最基本的元素用三维坐标表示,是最基本的元素边边是形体相邻面的交界,可为空间直线或曲线是形体相邻面的交界,可为空间直线或曲线环环是有序、有向的封闭边界,是有序、有向的封闭边界,外环外环仅一个,逆时针方向,仅一个,逆时针方向,内环内环可有可无,也可多个,方向顺时针。可有可无,也可多个,方向顺时针。面面是一个单连通区域,可以是平面或曲面,由一个外环是一个单连通区域,可以是平面或曲
3、面,由一个外环和若干个内环组成;面的方向由面的法矢决定,法矢向和若干个内环组成;面的方向由面的法矢决定,法矢向外为正向面。外为正向面。基本概念及定义实体实体是由若干个面组成的闭包,实体的边界是有限个是由若干个面组成的闭包,实体的边界是有限个面的集合。面的集合。形体表面上任一点的足够小的形体表面上任一点的足够小的邻域邻域在拓扑上应是一个在拓扑上应是一个等价的封闭圆,即围绕该点的形体邻域在二维空间中等价的封闭圆,即围绕该点的形体邻域在二维空间中可构成一个单连通域,我们把满足该定义的形体称为可构成一个单连通域,我们把满足该定义的形体称为正则形体正则形体。否则为。否则为非正则形体非正则形体,如存在悬面
4、、悬边的,如存在悬面、悬边的长方体为非正则形体。长方体为非正则形体。线框模型线框模型用顶点和棱边表示三维形体,其棱边可以为直线直线、圆弧圆弧、二次曲线二次曲线及样条曲线样条曲线组成。线框模型在计算机内存储的数据结构:顶点表:记录各顶点坐标值;棱线表:记录每条棱线所连接的两顶点。class POINT class EDGE double v3;/坐标值 int start_point_no;/边的起点 int pointtype;/点的属性 int end_point_no;/边的终点 CURVE cur;/边方程定义;.以立方体为例,其线框模型结构如下表:优点优点1.结构简单,计算机内部易于表
5、达,绘制快速;2.物体的三维数据可以产生任意视图,为生成工程图带来了方便缺点缺点1.有二义性,缺少表面轮廓信息,当形状复杂、棱线过多时,会引起模糊理解。2.在数据结构中缺少边与面、面与体之间关系的信息。从原理上讲,此种模型不能消除隐藏线、计算物性、生成数控加工刀具轨迹、有限元网格剖分、物体干涉检验等。表面模型 表面模型是用有连接顺序的棱边围成的有限区域来定义形体的表面,再由表面的集合来定义形体。表面可以是平面,也可以是柱面、球面等类型的二次曲面,也可是样条曲面构成的自由曲面。表面模型是在线框模型的基础上,增加有关面边信息以及表面特征、棱边的连接方向等内容。表面模型存储几何信息的方法是建立三表结
6、构,即顶点表、边表和面表。1)顶点坐标值存放在顶点表顶点表中;2)含有指向顶点表指针的边表边表,用来为多边形的每条边标识顶点;3)面表面表有指向边表的指针,用来为每个表面标识其组成边。class POINT class EDGE class FACE 同线框模型 同线框模型 int edge_num;/边数 int *edge_no;/边链表 int face_type;/面类型 SURFACE sur;/面方程 .表面模型唯一没有解决的问题是形体究竟在表面的哪一侧,因而在物性计算、有限元分析等应用中,表面模型在形体的表示上仍然缺乏完整性。表面模型可以满足面面求交,线面消隐、明暗处理和数控加工
7、的要求。表面模型的特点表面模型的特点实体模型 为了解决形体存在于表面的哪一侧的问题,可采用实体模型来描述三维立体 在表面模型的基础上可用三种方法来定义表面的哪一侧存在实体。1)给出实体存在一侧的一点;2)直接用表面的外法矢来指明实体存在的一侧;3)用有向棱边隐含地表示表面的外法矢方向,该方用有向棱边隐含地表示表面的外法矢方向,该方 法为法为CADCAD系统广泛采用。系统广泛采用。(思考:为什么不直接用法矢?)用有向棱边隐含地表示表面的外法矢方向时,规定有向棱边按右手法则右手法则取向:沿着闭合的棱沿着闭合的棱边所得的方向与表面外法矢方向边所得的方向与表面外法矢方向一致。一致。思考:相邻两个面的公
8、共棱思考:相邻两个面的公共棱边的方向不会矛盾吗?边的方向不会矛盾吗?(有矛盾,(有矛盾,CAD系统中增加系统中增加“环环”的定义解决矛盾)的定义解决矛盾)class POINT class EDGE class FACE 同线框模型 同线框模型 int edge_num;/边数 EDGE*edge;/边链表 int face_type;/面类型 SURFACE sur;/面方程 .数据结构如下:数据结构如下:根据实体模型,可以进行物性计算(如体积、质量,惯量)、有限元分析等应用。从前面的实体模型可知,本质上我们仍然采用了形体的边界表面的数学描述代替实体描述,并非真正描述了实体内部属性。这种典型
9、的边界表面描述方法通常称为实体的边界表达方法(BREP),这在后面内容将详细介绍。线框、表面与实体模型的比较模型表示模型表示应用范围应用范围局限性局限性二维线框二维线框画二维线框图(工程图)画二维线框图(工程图)无法观察参数的变化,不可无法观察参数的变化,不可能产生有实际意义的形体能产生有实际意义的形体三维线框三维线框画二、三维线框图画二、三维线框图不能表示实体、图形会有不能表示实体、图形会有二义性二义性表面模型表面模型艺术图形、形体表面的艺术图形、形体表面的显示、数控加工显示、数控加工不能表示实体不能表示实体实体模型实体模型物性计算、有限元分析物性计算、有限元分析用集合运算构造形体用集合运算
10、构造形体只能产生正则形体只能产生正则形体抽象形体的层次较低抽象形体的层次较低1、三维形体的计算机表达、三维形体的计算机表达2、图形变换3、基础算法、基础算法4、线框及消隐显示、线框及消隐显示5、真实感显示、真实感显示 6、图形学的其它应用、图形学的其它应用图形变换图形变换 在CAD系统中,经常将显示的形体进行放大缩小、旋转、平移等,以便用户更清楚地观察或编辑操作。实现形体放大缩小、旋转、平移的方法是图形变换。在CAD系统中,常用的图形变换有平移、旋转、比例、投影等变换。二维图形变换二维图形变换三三维维图图形形变变换换简单几何形体的图形变换应用举例Tzyxzzyyxxzyxzzyyxx11111
11、1888212121888212121式中:T为所要进行的图形变换矩阵 假定一六面体ABCDEFGH各点的坐标分别为(x 1,y 1,z 1),.,(x 8,y 8,z 8),则经过图形变换后的坐标为:图形的显示流程图形的显示流程1、三维形体的计算机表达、三维形体的计算机表达2、图形变换、图形变换3、基础算法4、线框及消隐显示、线框及消隐显示5、真实感显示、真实感显示 6、图形学的其它应用、图形学的其它应用1)网格剖分算法)网格剖分算法 目前三维几何图形的显示算法均是基于三角形网格,且算法不断被固化到硬件中(如显卡、图形加速卡等),如:三维游戏及动画 复杂场景渲染显示 CAD模型显示 有限元分
12、析 科学数据可视化 电影、战场仿真A A)平面上的三角剖分)平面上的三角剖分任意多边形的三角剖分平面点集的三角剖分边界离散网格生成网格后处理分析、显示软件一般处理过程B B)参数曲面的三角剖分)参数曲面的三角剖分 为了显示三维零件形体,CAD系统内部提供参数曲面的三角剖分算法,对形体的每一个表面都进行三角剖分,如图所示。经过三角剖分处理,三维零件形体表面都生成并记录了完整的多面体离散数据(即显示数据)CAD系统中的显示算法(线框图、消隐图、真实感显示图等)大多数都是基于该多面体离散数据的算法处理。C)C)空间散乱点集的三角剖分(曲面重建)空间散乱点集的三角剖分(曲面重建)?合理分割数据并准确重
13、建原产品特征约束模型仍存在困难?快速重建与产品外形拓扑一致的网格局部网格基于三维局部网格基于三维DelaunayDelaunay的构造的构造重建的网格拓扑同产品局部外形拓扑一致局部点集的三维Delaunay剖分得到对应的Voronoi图连接Voronoi区中心点得到局部构造网格在八叉树点集中快速得到绕中心点的邻域点集D)D)有限元单元网格三角剖分有限元单元网格三角剖分有限元网格生成技术发展到现在,已经出现了大量的不同实现方法。当前广泛使用的Delaunay三角化、推进波前法和八叉树方法等。三维几何数据压缩是指对描述三维场景的模型数据进行压缩,以便于模型数据的存储和网络传输,在分布式虚拟现实、协
14、同应用、多用户视频游戏、模型数据在计算机内部的存储和传输有着非常重要的意义。事实上三维图形的信息容量有时也非常大,给存储和传输带来了严重的障碍,必须进行压缩编码才适应现有的网络传输技术,而且在一些需实时处理的应用场合更需要压缩技术的支持。2)三角形网格压缩单分辨率模型的几何数据压缩单分辨率模型的几何数据压缩是指对物体的一种层次细节的多边形网格表示形式的几何数据进行压缩。使之生成:三角形条带、扇形、网格 每个三角形独立地由其3个顶点的9个坐标来表述,如果用浮点数,则需要36个字节来描述一个三角形(暂且不考虑颜色、法向、纹理坐标等属性数据);这种表述方案使得每个顶点约需被描述6次,浪费了大量存储空
15、间。一种改进的方案是顶点和三角形分开表示,每个顶点用其3个浮点数表示的位置坐标确定;而每个三角形,则用三角形描述表来表示,其中每个表项仅包含该三角形的3个顶点序号.这使得存储空间得到很大程度的节省。三角形条带的引入进一步减少了不必要的顶点传输:两个相邻的三角形公用一条边,那么从第二个三角形开始,一个新顶点的加入和其前一个三角形的一条边即可构成另一三角形,这使得每个顶点最多必须传送两次。V0V2V3V4V5V1V10V9V8V7V6V12V11V14V13V15V0V1V70110111110110000000000000该技术有利于缓解图形显示硬件传输瓶颈,加速显示速度 多分辨率模型的压缩是面
16、向多分辨率模型的压缩方法,多分辨率模型可分为:离散多分辨率模型 连续多分辨率模型 离散多分辨率模型是对复杂的三角形网格通过简化算法逐步得到不同细节层次的多个三角网格模型 连续多分辨率模型则是通过一种紧凑的模型表示方法,可生成任意多个不同分辨率的模型(不介绍)。多分辨率模型的几何数据压缩离散多分辨率模型的压缩离散多分辨率模型的压缩 离散多分辨率模型是对复杂的三角形网格经过一系列简化操作得到了多个不同分辨率的多边形网格模型。这种简化算法通过对三角形网格施以局部的变化而逐步得到不同的细节层次(LOD),为了保证对原始网格的足够近似,每个简化步骤都须得到控制。在分布式图形应用中,针对多分辨率模型,累进
17、传输是一个非常有效的传送措施。该方案的思想是首先传输LOD层次中一个最低分辨率的模型,然后在绘制操作开始的同时传送一系列的细化操作(类似 JPGE2000思想);逐步细化的LOD显示可以与更加细化LOD操作信息的传送同步进行,减少了操作人员的等待时间。但是由于累进传输对全局状态设置的要求以及累进传输受到传输速度的制约,使得累进传输的研究进展较为缓慢。随着研究的逐步深入,会使得几何压缩的算法更加成熟和先进,更能满足网络几何图形传输、分布式更能满足网络几何图形传输、分布式虚拟环境、电子购物等的应用需求虚拟环境、电子购物等的应用需求,进一步推动计算机图形学向前发展。3)相交测试与碰撞测试)相交测试与
18、碰撞测试在计算机图形学、CAD、CAE中经常遇到相交测试盒碰撞测试(运动物体)。如鼠标拾取,视窗裁剪、曲面求交、光线跟踪、布尔运算、装配干涉校验、动画漫游、运动碰撞、机器人与机床刀具的轨迹规划等。尤其对较大规模数据的模型而言,相交测试和碰撞测试的速度对系统影响很大。基本定义:基本定义:射线:r(t)=o+t dO:原点,d:射线方向T:参数轴对齐包容盒(矩形盒):通常称:AABB表面平行于坐标面有向包容盒:简称:OBB 即任意方向的AABB往往由一个中心,三个单位矢量和三个半边长定义包容盒离散有向多面体简称 kDOPn3n1n2n4s1d1maxd1min由k/2(k为偶数)个规一化法矢ni定
19、义,每个ni有两个标量值dimin和dimax,由三元组(ni,dimin,dimax)描述一个平板层Si,所有平板层的交集是kDOP的实际体积,上图为8DOP。包容盒的创建:AABB:直接比较所有多面体(前面的离散多面体)顶点坐标即可得kDOP:是AABB得扩展,将所有多面体顶点坐标投影到kDOP的每条法线ni上,然后保留dimin、dimax,所有这些值定义一个最小的kDOP。球体包容盒:球体包容盒:计算比较麻烦。较为简单的方法是先计算AABB,再计算AABB的中心,以此为球心,球心到最远顶点的距离即为半径。其它更好更优的算法可查资料。显然,最远距离两点最为球的直径是最优解,关键是快速搜索
20、。OBB:计算方法较多,较繁琐。方法之一是:1)计算凸包 2)计算凸包质心 3)计算协方差矩阵的特征向量 4)其特征向量即为OBB三个方向 5)向三个方向投影即可求出半长值AABB、圆球包容盒比较粗糙(分块多包容盒改进),算法简单、圆球包容盒比较粗糙(分块多包容盒改进),算法简单KDOP比比AABB更紧致,但计算较多更紧致,但计算较多OBB则较则较kDOP更优更优选用何种包容盒视复杂度而定。选用何种包容盒视复杂度而定。测试算法实现基本原则:1)尽可能用最简单算法排除或确定相交情形;2)充分利用前一次计算结果;3)如果使用了多种测试,可以尝试改变内部顺序,或许会有意外收效;4)尽量避免复杂计算(
21、如sin,cos,开方等)5)尽量降低维数,使问题简化;6)相交测试复杂时,先用包容盒排除7)养成计时比较的习惯,采用真实数据及计算环境8)确保计算鲁棒性常用相交测试算法:射线球体测试;射线长方体测试;线段长方体测试;射线三角形测试;射线多边形测试;平面长方体测试;三角形三角形测试;三角形长方体测试;BVBV测试(AABB、KDOP、球、OBB两两之间).。碰撞处理分为:碰撞测试、碰撞确定、碰撞反应碰撞处理在游戏中是最重要的算法之一,目前算法很多,文献很多,目前没有一个算法能够对所有情形都有效的处理算法。常见测试方法有:1)用射线测试2)BSP树测试3)一般层次构造测试4)kDOP树测试5)O
22、BB树测试(较KDOP方法好)。一般刚体处理简单一些,柔软物体(液体、衣物)处理更难。1、三维形体的计算机表达、三维形体的计算机表达2、图形变换、图形变换3、基础算法、基础算法4、线框及消隐显示5、真实感显示、真实感显示 6、图形学的其它应用、图形学的其它应用显示器显示原理显示器显示原理常规显示器上的图形由荧光屏的点阵组成,电子束按行列次序扫描点矩阵,并由显示内容来控制所扫描的点是否发亮,每扫描一遍称为一帧。荧光屏上每一点称象素(Pixel)。每个象素都对应于Buffer中的一个存储单元,里面存放着该象素的显示亮度值。象素的亮度值控制电子束对荧光屏的轰击强度,象素在帧缓存寄存器中的位置编码控制
23、电子束的偏转位置。分辨率(Resolution)是光栅扫描显示设备最重要的指标 显示器用于显示字符、图形(触摸显示屏还可作为输入设备)计算机图形的具体应用范围很广,但是从基本的处理技术看只有两类:l 线条类:线条类:如工程图、地图、曲线图表等;l 明暗图类(与照片相似):明暗图类(与照片相似):为了生成图形,首先要有原始数据或数学模型,如工程人员构思的机械零件模型,飞机的总体方案模型,地形航测的判读数据等等。这些数字化的输入经过计算机处理后变成图形输出。三维图形的线框显示属于第一类三维图形的浓淡图及真实感显示是第二类 经过三角剖分处理,计算机内部增加了完整的三维形体逼近多面体近似表达数据结构(
24、即表面全部由以三角形为主的多边形构成,如右下图所示)。在线框显示模型中,为显示方便,分别对边界边和内部边作标识。显示方法:遍历所有多边形网格的点表和边表。两种显示状态可以任选:a)仅显示轮廓边(内部边不显示)b)显示所有离散多边形特点:简单快捷,但有二义性。1)线框图显示算法)线框图显示算法 线框显示往往导致理解的二义性,如下图。为消除二义性,CAD系统经常采用消除遮挡的不可见线或面的显示算法。习惯上称作消除隐藏线和隐藏面消除隐藏线和隐藏面,简称消隐消隐。消隐算法的分类:消隐算法的分类:消隐的对象是三维物体,消隐结果与观察物体有关,也与视点有关。2)线框消隐显示算法)线框消隐显示算法(c)多面
25、体的轮廓分类多面体的轮廓分类A)凸多面体消隐算法)凸多面体消隐算法 设V为由视点出发的观察向量,N为某多边形面的法向量。若V N0,称该多边形为后向面后向面。若V N0,称该多边形为前向面前向面。如右图c,后向面总是看不见的。(a)前向面前向面 (b)后向面后向面 d)凸多面体凸多面体 因此,对凸多面体(右图因此,对凸多面体(右图d)消隐,)消隐,仅需判断前向面仅需判断前向面(即即VN0),画出所有,画出所有前向面的各棱边即可。前向面的各棱边即可。为加速计算,将凸多面体变换,使为加速计算,将凸多面体变换,使观察方向观察方向V与与Z轴方向一致,则仅判断轴方向一致,则仅判断前向面的法矢分量前向面的
26、法矢分量 Nz 0)for(该面所有棱边)画出棱边;End凸多面体消隐算法如下:VnizxyB)任意多面体消隐算法)任意多面体消隐算法算法思路:算法思路:1)为运算方便,对视锥以外的物体应先行裁剪过虑,以减少不必要的运算。2)后向面上的所有棱边都不可见 3)对每一个前向面的所有棱边判断可见性,即判断面对线的遮挡关系。在判断面与线的遮挡关系过程中,要反复地进行线线、线面之间的求交运算,因此因此求交计算速度将是关键。求交计算速度将是关键。线面求交 线线求交某一直线段对任一平面的遮挡关系判断算法:某一直线段对任一平面的遮挡关系判断算法:(1)若线段两端点及视点在给定平面同侧(图a),线段可见,转7
27、(2)若线段投影与平面投影的包围盒无交(图b),线段可见,转7 图a 视点与线段同侧 图b 包围盒不交(3)求直线与平面的交点。若无交点,转4;否则,交点在线段内部或外部,则判断 a)若交点在线段内部,交点将线段分成两段,与视点同侧的一段可见,转7;剩余另一段在视点异侧,转4继续判断。b)若交点在线段外部,转4继续判断。(4)求剩下线段的投影与平面边界投影的所有交点 根据交点在原直线方程的参数值求出Z值(即深度)若无交点,转5。(5)以上所求得的各交点将线段的投影分成若干段,求出第一段中点。(6)若第一段中点在平面的投影内,则相应的段被遮挡,否则不被遮挡;其他段的遮挡关系可依次交替取值进行判断
28、。(见图d)(7)当前循环结束,各可见段进入下一个面的比较,直至所有面比较完毕。图d 分段交替取值 上述算法为一条边,一个面的情况,对多条边、上述算法为一条边,一个面的情况,对多条边、多个面则通过循环嵌套实现。多个面则通过循环嵌套实现。如果消隐对象有N条棱,当N很大时,用两两求交的方法这个工作量是很大的O(N2)。为了提高算法的效率,需要设法减少求交的工作量,因此相交测试是关键。如上述算法中仅需对可见子线段与其余平面进行类似的可见性判断,对不可见线段不予计算。不同消隐算法的关键在于加速计算的策略和方法不同消隐算法的关键在于加速计算的策略和方法不同。现在的商用不同。现在的商用CAD系统消隐算法正
29、确率不能达到系统消隐算法正确率不能达到100%,速度也有待提高。,速度也有待提高。重点在于线段可见性的判断速度和正确性。重点在于线段可见性的判断速度和正确性。对CAD图形来说,需要显示轮廓,而非内部三角形边界,为此必须对前面的算法修正:1)三角剖分时,标识是否内部边界;2)计算是否轮廓边界;3)内部边、轮廓边不必计算消隐;4)对其它边进行正常消隐计算。C)画家算法原理 1)把屏幕置成背景色;2)物体的各个面按其离视点的远近进行排序,排序结果存在一张深度优先级表中;3)按照从表头到表尾的顺序逐个用背景色填充绘制各个面,用指定颜色绘制面的边界。由于后显示的图形取代先显示的画面,而后显示的图形所代表
30、的面离视点更近,所以由远及近的绘制各面,就相当于消除隐藏面。这与油画作家作画的过程类似,先画远景,再画中景,最后画近景。由于这个原因,该算法习惯上称为画家算法画家算法或列表优先算法列表优先算法。这种算法必须首先建立深度优先级表。遮挡关系判断示意图 画家算法原理简单,关键是如何对场景中物体按深度排序画家算法原理简单,关键是如何对场景中物体按深度排序。其缺点是只能处理互不相交的面,而且深度优先级表中面的顺序可能出错。在两个面相交,三个以上的面重叠的情形,用任何排序方法都在两个面相交,三个以上的面重叠的情形,用任何排序方法都不能排出正确的序。这时只能把有关的面进行分割后再排序。不能排出正确的序。这时
31、只能把有关的面进行分割后再排序。画家算法既可用于线框图消隐,也可用于简单的浓淡图绘制(只需按指定颜色绘制多边形,不必画边界)1、三维形体的计算机表达、三维形体的计算机表达2、图形变换、图形变换3、基础算法、基础算法4、线框及消隐显示、线框及消隐显示5、真实感显示 6、图形学的其它应用、图形学的其它应用真实感显示 1 1)光照效果影响因素)光照效果影响因素2 2)简单效果的浓淡图生成)简单效果的浓淡图生成3 3)一般性效果图形生成)一般性效果图形生成4 4)真实感效果图生成)真实感效果图生成5 5)纹理映射)纹理映射1)光照效果影响因素)光照效果影响因素 当光照射到物体表面时,当光照射到物体表面
32、时,物体对光会发生反射、物体对光会发生反射、透射、吸收、衍射、折射和干涉。透射、吸收、衍射、折射和干涉。被物体吸收的部分转化为热。被物体吸收的部分转化为热。颜色是人对光的生理反映颜色是人对光的生理反映,反射、透射的光进入,反射、透射的光进入人的视觉系统,使我们能看见物体的颜色。人的视觉系统,使我们能看见物体的颜色。为模拟这一现象,我们建立一些数学模型来替代为模拟这一现象,我们建立一些数学模型来替代复杂的物理模型。这些模型就称为复杂的物理模型。这些模型就称为明暗效应模型明暗效应模型或者或者光照明模型光照明模型。思考:我们所见物体的颜色是怎样形成的?思考:我们所见物体的颜色是怎样形成的?影响观察物
33、体颜色的主要因素有哪些?影响观察物体颜色的主要因素有哪些?在不考虑人的生理因素的情况下,在不考虑人的生理因素的情况下,物体的颜色与物体的颜色与光源颜色、物体表面物理特性、表面粗糙度、周边环光源颜色、物体表面物理特性、表面粗糙度、周边环境等因素有关境等因素有关。在正常的情况下,光沿着直线传播,当光遇到介在正常的情况下,光沿着直线传播,当光遇到介质不同的表面时,会产生反射和折射现象,而且质不同的表面时,会产生反射和折射现象,而且在反在反射和折射的时候,它们遵循反射定律和折射定律。射和折射的时候,它们遵循反射定律和折射定律。研究光照模型的目的:研究光照模型的目的:确定物体表面的每一个多边形或者多边形
34、中确定物体表面的每一个多边形或者多边形中的每一个点的颜色,以便实现具有真实感显示效的每一个点的颜色,以便实现具有真实感显示效果的三维形体渲染绘制。果的三维形体渲染绘制。A A)单颜色填充多边形)单颜色填充多边形 算法思路:根据多面体表面的平面法矢决定颜色值,直接调用直接调用OpenGL的多边形填充算法即可的多边形填充算法即可。算法简单,但轮廓分明,各多边形之间过渡不光滑。2)简单效果的浓淡图生成)简单效果的浓淡图生成B B)GouraudGouraud模型模型 算法思想:为使多边形边界之间光滑显示,先计算多边形各顶点光强,后通过双线性插值,计算多边形内各点光强。能保证多边形边界颜色的连续性,但
35、高光模糊,有时出现过亮或过暗条纹(即马赫效应)。计算较为简单,计算较为简单,OpenGL算法已实现硬件加速算法已实现硬件加速。算法步骤:算法步骤:For(每一个三角形)1)计算多边形顶点的平均法向;2)根据基本光照模型计算顶点的平均光强;3)通过线性插值,计算多边形的边上的各点光强;4)通过线性插值,计算多边形内部各点的光强。3)一般性效果图形生成)一般性效果图形生成简单光照明模型简单光照明模型-Phong模型浓淡图绘制算法实现浓淡图绘制算法实现A A)理想漫反射理想漫反射B B)镜面反射镜面反射 C C)环境光环境光 D D)PhongPhong光照明模型光照明模型A A)Z Z缓冲器缓冲器
36、(Z-Buffer)(Z-Buffer)算法算法 B B)扫描线算法扫描线算法 C C)区间扫描线算法区间扫描线算法 简单光照明模型简单光照明模型-Phong模型 简单光照明模型简单光照明模型模拟物体表面对光的反射作用。光源被假定为点光源点光源,反射作用被细分为镜面反射镜面反射(Specular Reflection)和漫反射漫反射(Diffuse Reflection)。简单光照明模型简单光照明模型只考虑物体对直接光照的反射作用,而物体间的光反射作用,只用环环境光境光(Ambient Light)来表示。不妨设:不妨设:入射光强为入射光强为I Il l 物体表面上点物体表面上点P P 的法向
37、为的法向为N N 从点从点P P指向光源的向量为指向光源的向量为L L 两者间的夹角为两者间的夹角为 图 漫反射A A)理想漫反射理想漫反射 当光源来自一个方向时,当光源来自一个方向时,漫反射光均匀向各方向漫反射光均匀向各方向传播,与视点无关传播,与视点无关,它是由表面的粗糙不平引起的,它是由表面的粗糙不平引起的,因而可假定漫反射光的空间分布是均匀的。因而可假定漫反射光的空间分布是均匀的。p 如果如果 I Il l 表示点光源的强度,表示点光源的强度,k kd d 表示物体表面漫反射系数,则表示物体表面漫反射系数,则漫反射方程可描述为:漫反射方程可描述为:cosdlkII )2 (0 若若N
38、N为物体表面的单位法向量,为物体表面的单位法向量,L L为物体表面上一点为物体表面上一点指向光源的单位矢量,则:指向光源的单位矢量,则:)(LN dlkII)(1iniliIILN 如果有多个光源,则光强度计算式为:如果有多个光源,则光强度计算式为:图 漫反射B B)镜面反射)镜面反射 对于理想镜面,反射光集中在一个方向,并遵守反射定律。对一般的光滑表面,反射光集中对一般的光滑表面,反射光集中在一个范围内,且由反射定律决定的在一个范围内,且由反射定律决定的反射方向光强最大反射方向光强最大。图 镜面反射光 因此,对于同一点来说,从不同位置所观察到的镜面反因此,对于同一点来说,从不同位置所观察到的
39、镜面反射光强是不同的。镜面反射光强可表示为:射光强是不同的。镜面反射光强可表示为:Ks Ks是与物体有关的镜面反射系数,是与物体有关的镜面反射系数,a a 为视线方向为视线方向V V与反与反射方向射方向R R的夹角,的夹角,n n为反射指数,反映了物体表面的光泽程度,为反射指数,反映了物体表面的光泽程度,一般为一般为1 120002000,数目越大物体表面越光滑。,数目越大物体表面越光滑。镜面反射光将会在反射方向附近形成很亮的光斑,镜面反射光将会在反射方向附近形成很亮的光斑,称为高光现象称为高光现象。镜面反射光产生的高光区域只反映光源的颜色镜面反射光产生的高光区域只反映光源的颜色 将将V和和R
40、都格式化为单位向量,镜面反射光强可表都格式化为单位向量,镜面反射光强可表示为:示为:式中式中:对多个光源:对多个光源:图 镜面反射光NLNLR)2(C C)环境光)环境光 环境光是指光源间接对物体的影响,是在物体和环境之间多环境光是指光源间接对物体的影响,是在物体和环境之间多次反射,最终达到平衡时的一种光。次反射,最终达到平衡时的一种光。近似地认为同一环境下的环境光,其近似地认为同一环境下的环境光,其光强分布是均匀光强分布是均匀的,它的,它在在任何一个方向上的分布都相同任何一个方向上的分布都相同。例如,透过厚厚云层的阳光就。例如,透过厚厚云层的阳光就可以称为环境光。可以称为环境光。在简单光照明
41、模型中,用一个常数来模拟环境光,用式子表在简单光照明模型中,用一个常数来模拟环境光,用式子表示为:示为:其中:其中:Ia 为环境光的光强为环境光的光强 Ka为物体对环境光的反射系数为物体对环境光的反射系数 D D)PhongPhong光照明模型光照明模型 综上分析,综上分析,Phong光照明模型表述为:光照明模型表述为:由物体表面上一由物体表面上一点点 P 反射到视点的光强反射到视点的光强 I 为环境光的反射光强为环境光的反射光强 I e、理想漫、理想漫反射光强反射光强 I d、和镜面反射光、和镜面反射光 I s 的总和的总和,即:,即:按按R、G、B三种颜色分量展开计算得:三种颜色分量展开计
42、算得:I I e I d I s由此可得:由此可得:用用Phong模型进行计算时,对物体表面上每个点模型进行计算时,对物体表面上每个点P,均,均需计算光线的反射方向需计算光线的反射方向R,再由,再由V计算(计算(RV),为减少计),为减少计算,可作如下假设:算,可作如下假设:a)光源在无穷远处,即光线方向光源在无穷远处,即光线方向L为常数;为常数;b)视点在无穷远处,即视线方向视点在无穷远处,即视线方向V为常数;为常数;c)为避免计算反射方向为避免计算反射方向R,用(用(HN)代替()代替(RV),),这里这里H为为L和和V的平分向量的平分向量,即:,即:H (LV)/|LV|注意:注意:Ph
43、ong模型对物体表面的每一点的光强进行计算,显模型对物体表面的每一点的光强进行计算,显然其计算量较大。然其计算量较大。PhongPhong模型计算实例模型计算实例 图中可以看出高光指数、漫反射及镜面系数对显示效果的影响图中可以看出高光指数、漫反射及镜面系数对显示效果的影响 PhongPhong光照明模型是真实感图形学中提出的第一个有影响光照明模型是真实感图形学中提出的第一个有影响的光照明模型,生成图象的真实度已达到可接受程度。的光照明模型,生成图象的真实度已达到可接受程度。但在实际应用中,它是一个经验模型,还具有以下的一些但在实际应用中,它是一个经验模型,还具有以下的一些问题:问题:用用Pho
44、ngPhong模型显示出的物体象塑料,没有质感;模型显示出的物体象塑料,没有质感;没有考虑距离对光照强度的衰减影响;没有考虑距离对光照强度的衰减影响;环境光是常量,没有考虑物体之间相互的反射光;环境光是常量,没有考虑物体之间相互的反射光;镜面反射的颜色是光源的颜色,与物体的材料无关;镜面反射的颜色是光源的颜色,与物体的材料无关;镜面反射的计算在入射角很大时会产生失真;镜面反射的计算在入射角很大时会产生失真;PhongPhong模型是简单的局部光照模型,对物体间相互反射及模型是简单的局部光照模型,对物体间相互反射及折射、阴影处理欠缺等。折射、阴影处理欠缺等。浓淡图绘制算法实现过程浓淡图绘制算法实
45、现过程 通过前面介绍的通过前面介绍的gouraudgouraud模型、模型、PhongPhong光照模型可光照模型可计算物体表面上点的颜色值计算物体表面上点的颜色值。为了显示形体的三维真实感效果图,下面介绍多为了显示形体的三维真实感效果图,下面介绍多面体面体浓淡图的如何绘制浓淡图的如何绘制。由于空间三维物体是连续点集。显由于空间三维物体是连续点集。显然直接计算点的颜色将无法确定计算采然直接计算点的颜色将无法确定计算采样点的位置和数目。样点的位置和数目。事实上,我们仅能看到屏幕所能显示的区域。如事实上,我们仅能看到屏幕所能显示的区域。如果能够求得屏幕上每一个象素点所对应的物体上点果能够求得屏幕上
46、每一个象素点所对应的物体上点的颜色,这样就可绘制整个图形。的颜色,这样就可绘制整个图形。为了得到屏幕上某象素点所对应的物体上点的颜为了得到屏幕上某象素点所对应的物体上点的颜色,假定作经过该象素点的一条射线,射线平行于观色,假定作经过该象素点的一条射线,射线平行于观察视线,则射线与多面体物体可能有多个交点。察视线,则射线与多面体物体可能有多个交点。如果物体不是透明的,则处于最前面的交点的颜如果物体不是透明的,则处于最前面的交点的颜色即为所求色即为所求,如右图所示。,如右图所示。最简单的算法最简单的算法Z Z缓冲区(缓冲区(Z ZBufferBuffer)算法)算法 为计算物体表面上对应象素点的颜
47、色为计算物体表面上对应象素点的颜色,用帧缓存器存,用帧缓存器存放每个象素颜色(按光照模型计算),用深度缓存空间来放每个象素颜色(按光照模型计算),用深度缓存空间来存放每个象素深度值存放每个象素深度值Z,称为称为Z缓冲器(即缓冲器(即ZBuffer)。A A)Z Z缓冲器缓冲器(Z-Buffer)(Z-Buffer)算法算法 cz绘制时思路:绘制时思路:a)Z 缓冲器中每个单元值是对应象素点所反映物缓冲器中每个单元值是对应象素点所反映物体对象的体对象的 z 坐标值,初值取成坐标值,初值取成 z 的极小值。的极小值。b)将待处理的景物表面上的采样点变换到图像空)将待处理的景物表面上的采样点变换到图
48、像空间,计算其深度值间,计算其深度值 z。c)并根据采样点在屏幕上的投影位置,将其)并根据采样点在屏幕上的投影位置,将其 z 值值与已存贮在与已存贮在 z 缓存器中相应象素处的原可见点的深度值缓存器中相应象素处的原可见点的深度值进行比较。进行比较。d)如果该采样点位于)如果该采样点位于Z缓存器所记录的可见点之缓存器所记录的可见点之前,则将该采样点处的表面颜色填入帧缓存器相应象素,前,则将该采样点处的表面颜色填入帧缓存器相应象素,同时用其深度值更新同时用其深度值更新 z 缓存器存贮的深度值。否则,不缓存器存贮的深度值。否则,不写入也不更新。写入也不更新。Z-Buffer算法()算法()for(i
49、=0,1,m)/m:窗口水平方向象素数目:窗口水平方向象素数目 for(j=1,n)/n:窗口垂直方向象素数目:窗口垂直方向象素数目 用背景色初始化帧缓存用背景色初始化帧缓存CB:CB(i,j)=背景色;背景色;用最小用最小Z值初始化深度缓存:值初始化深度缓存:ZB(i,j)=Zmin;for(每一个多边形每一个多边形)将该多边形进行投影变换;将该多边形进行投影变换;扫描转换该多边形在视平面上的扫描转换该多边形在视平面上的投影多边形投影多边形;for(该多边形所覆盖的每个象素该多边形所覆盖的每个象素(i,j)计算该多边形在该象素的深度值计算该多边形在该象素的深度值Zi,j;if(Zi,j ZB
50、(i,j))ZB(i,j)Zi,j;计算该多边形在该象素的颜色值计算该多边形在该象素的颜色值Ci,j;CB(i,j)=Ci,j;注:对投影多边形进行裁剪得到有效区域,可加快显示速度注:对投影多边形进行裁剪得到有效区域,可加快显示速度 Z-Buffer算法在象素级上以近物取代远物。形体算法在象素级上以近物取代远物。形体在屏幕上的出现顺序是无关紧要的。这种取代方法实在屏幕上的出现顺序是无关紧要的。这种取代方法实现起来远比总体排序灵活简单,有利于硬件实现。现起来远比总体排序灵活简单,有利于硬件实现。然而然而Z-Buffer算法存在缺点:占用空间大,没有算法存在缺点:占用空间大,没有利用图形的相关性与