《第9章真实感图形》由会员分享,可在线阅读,更多相关《第9章真实感图形(104页珍藏版)》请在金锄头文库上搜索。
1、计算机图形学基础计算机图形学基础计算机图形学基础计算机图形学基础第第9章章 真真实感感图形形绘制制 本章主要内容几何造型技术几何造型技术光照模型光照模型表面纹理表面纹理真实感图形表现实例真实感图形表现实例 OpenGL三维图形设计三维图形设计9.1三维形体的表示三维形体的表示 表示形体的两种模型(规则对象、不规则对象)规则对象的造型方法预备知识:实体的定义、正则集合运算特征表示空间分割表示推移表示边界表示构造实体几何表示不规则形体的建模方法分形造型(L系统)粒子系统9.1.1 造型技术概述研究如何在计算机中建立恰当的模型表示不同图形对象图形对象的技术。(图形对象:(图形对象:树、花、云、石、水
2、、砖、木板、树、花、云、石、水、砖、木板、橡胶、大理石、玻璃、塑料、布、水、烟雾、橡胶、大理石、玻璃、塑料、布、水、烟雾、火、波浪火、波浪)存在多种表示方法,主要分:几何模型的传统造型方法 非规则对象的非传统造型方法9.1.2(传统造型)规则对象欧氏几何描述形体几何造型几何信息(各部分几何形状与空间位置)拓扑信息(各部分之间的连接关系)例如:飞机外形设计机械零件制造9.1.3 图形对象图形对象的表示之二非传统造型不规则对象过程式模拟(用一个简单以及少量的用一个简单以及少量的易于调节的参数表示一大类对象,不断改变参数,递归调用这个易于调节的参数表示一大类对象,不断改变参数,递归调用这个模型,逐渐
3、产生数据量很大的对象。)模型,逐渐产生数据量很大的对象。)(山、树、水、烟雾、(山、树、水、烟雾、火、波浪,布、绳、橡皮球)火、波浪,布、绳、橡皮球)分形造型(基于分数维理论的随机模型)粒子系统模型非刚性物体模型(基于物理的建模)基于文法的模型9.1.4 表示形体的模型分类表示形体的模型分类数据模型数据模型(1/3)什么是数据模型?什么是数据模型?完全以数据描述,例如:完全以数据描述,例如:用以用以8 8个顶点表示的立方体个顶点表示的立方体以中心点和半径表示的球以中心点和半径表示的球以数据文件的形式存在,包括:以数据文件的形式存在,包括: 特征表示、空间分割表示、推移表示、边特征表示、空间分割
4、表示、推移表示、边界表示、构造实体几何表示等。界表示、构造实体几何表示等。进一步分为进一步分为线框模型线框模型表面模型表面模型实体模型实体模型数据模型数据模型(2/3)线框模型线框模型将形体表示成一组轮廓线的集合将形体表示成一组轮廓线的集合简单、处理速度快简单、处理速度快与形体之间不存在一一对应关系,与形体之间不存在一一对应关系,是真实物体的高度抽象,是真实物体的高度抽象,不适合真实感显示不适合真实感显示表面模型表面模型将形体表示成一组表面的集合将形体表示成一组表面的集合形体与其表面一一对应,适合于真实感显示形体与其表面一一对应,适合于真实感显示数据模型数据模型(3/3)实体模型实体模型用来描
5、述实体,主要用于用来描述实体,主要用于CAD/CAM包含了描述一个实体所需的较多信息,如几何信包含了描述一个实体所需的较多信息,如几何信息、拓扑信息。息、拓扑信息。过程模型以一个过程和相应的控制参数描述以一个过程和相应的控制参数描述例如例如用一些控制参数和一个生成规则描述的植物。用一些控制参数和一个生成规则描述的植物。以一个数据文件和一段代码的形式存在,包括:以一个数据文件和一段代码的形式存在,包括: 粒子系统、粒子系统、L系统、迭代函数系统等系统、迭代函数系统等9.2 规则对象的造型方法预备知识:实体的定义与与 正则集合运算正则集合运算方法包括:方法包括:特征表示特征表示空间分割表示空间分割
6、表示推移表示推移表示边界表示边界表示构造实体几何表示构造实体几何表示9.2.1 实体的定义(实体的定义(1/4)抽象带来的问题抽象带来的问题计算机中表示的物体是无效的计算机中表示的物体是无效的不能够客观存在不能够客观存在为什么要求客观存在为什么要求客观存在CAD/CAM的需求的需求什么是客观存在(有效)什么是客观存在(有效)实体的定义实体的定义具有一定的形状具有一定的形状具有封闭的边界(表面具有封闭的边界(表面)内部连通内部连通占据有限的空间占据有限的空间经过运算后,仍然是有效的物体经过运算后,仍然是有效的物体实体的定义(实体的定义(2/4)内点内点边界点边界点取内点运算取内点运算i取闭包运算
7、取闭包运算c正则运算正则运算r实体的定义(实体的定义(3/4)正则点集正则点集 称为称为A的正则点集的正则点集称称A为正则点集,如果它满足为正则点集,如果它满足问题:正则点集是实体?问题:正则点集是实体?实体的定义(实体的定义(4/4)实体的定义实体的定义可计算的条件可计算的条件正则点集正则点集表面是二维流形表面是二维流形二维流形二维流形其上任意一点存在充分小的领域与圆盘同构其上任意一点存在充分小的领域与圆盘同构(存在连续的一一映射)(存在连续的一一映射)9.2.2 正则集合运算(正则集合运算(1/2)为什么需要正则集合运算为什么需要正则集合运算集合运算式构造复杂物体的有效方法集合运算式构造复
8、杂物体的有效方法普通的集合运算会产生无效物体普通的集合运算会产生无效物体正则集合运算(正则集合运算(2/2)正则集合运算的定义正则集合运算的定义正则并正则并正则交正则交正则差正则差9.2.3 特征表示特征表示用用一组特征参数表示一组类似的物体一组特征参数表示一组类似的物体特征包括形状特征、材料特征等特征包括形状特征、材料特征等适用于工业上标准件的表示适用于工业上标准件的表示9.2.4 空间分割表示(空间分割表示(1/8)空间位置枚举表示空间位置枚举表示选择一个立方体空间,将他均匀划分选择一个立方体空间,将他均匀划分空间分割表示(空间分割表示(2/8)用三维数组用三维数组CIJK表示物体,数组中
9、的表示物体,数组中的元素与单位小立方体一一对应元素与单位小立方体一一对应当当CIjk = 1时,表示对应的小立方体被物体占据时,表示对应的小立方体被物体占据当当CIjk = 0时,表示对应的小立方体没有被物体占时,表示对应的小立方体没有被物体占据据优点优点可以表示任何物体可以表示任何物体容易实现物体间的集合运算容易实现物体间的集合运算容易计算物体的整体性质,如体积等容易计算物体的整体性质,如体积等缺点缺点占用大量的存储空间,如占用大量的存储空间,如1024*1024*1024 = 1G bits没有边界信息,不适于图形显示没有边界信息,不适于图形显示对物体进行几何变换困难,如非对物体进行几何变
10、换困难,如非90度的旋转变换度的旋转变换是物体的非精确表示是物体的非精确表示空间分割表示(空间分割表示(3/8)八叉树表示八叉树表示对空间位置枚举表示的空间分割方法作了改进:均对空间位置枚举表示的空间分割方法作了改进:均匀分割匀分割 自适应分割自适应分割八叉树建立过程八叉树建立过程八叉树的根节点对应整个物体空间:八叉树的根节点对应整个物体空间:v如果它完全被物体占据,将该节点标记为如果它完全被物体占据,将该节点标记为F(Full),算法结束;算法结束;v如果它内部没有物体,将该节点标记为如果它内部没有物体,将该节点标记为E(Empty),算法结束;算法结束;v如果它被物体部分占据,将该节点标记
11、为如果它被物体部分占据,将该节点标记为P(Partial),并将它分割成并将它分割成8个子立方体,对每一个子立方体进个子立方体,对每一个子立方体进行同样的处理行同样的处理空间分割表示(空间分割表示(5/8)八叉树表示八叉树表示分割成分割成8个子立方体个子立方体空间分割表示(空间分割表示(4/8)F(Full)E(Empty)空间分割表示(空间分割表示(6/8)优点优点可以表示任何物体可以表示任何物体容易实现物体建的集合运算容易实现物体建的集合运算容易计算物体的整体性质,如体积等容易计算物体的整体性质,如体积等较空间位置枚举表示占用的存贮空间少较空间位置枚举表示占用的存贮空间少缺点缺点没有边界信
12、息,不适于图形显示没有边界信息,不适于图形显示对物体进行几何变换困难对物体进行几何变换困难是物体的非精确表示是物体的非精确表示空间分割表示(空间分割表示(7/8)单元分解表示单元分解表示对空间位置枚举表示的空间分割方法作了改进:单对空间位置枚举表示的空间分割方法作了改进:单一体素一体素 多种体素多种体素三种空间分割方法的比较三种空间分割方法的比较空间位置枚举表示空间位置枚举表示-同样大小同样大小立方体粘合在一起表示物体立方体粘合在一起表示物体八叉树表示八叉树表示-不同大小的立方体不同大小的立方体粘合在一起表示物体粘合在一起表示物体单元分解表示单元分解表示-多种体素多种体素粘合在一起表示物体粘合
13、在一起表示物体空间分割表示(空间分割表示(8/8)优点优点表示简单表示简单容易实现几何变换容易实现几何变换基本体素可以按需选择,表示范围较广基本体素可以按需选择,表示范围较广可以精确表示物体可以精确表示物体缺点缺点物体的表示不唯一物体的表示不唯一物体的有效性难以保证物体的有效性难以保证9.2.5 推移推移(sweep)表示表示(1/3)将物体将物体A沿着轨迹沿着轨迹P推移得到物体推移得到物体B,称称B为为体体平移平移sweep-将一个二维区域沿着一个矢量将一个二维区域沿着一个矢量方向推移方向推移推移表示推移表示(2/3)旋转旋转sweep-将一个二维区域绕旋转将一个二维区域绕旋转轴旋转一周轴旋
14、转一周推移表示推移表示(3/3)广义广义sweep任意物体沿着任意轨迹推移任意物体沿着任意轨迹推移推移过程中物体可以变形推移过程中物体可以变形优点优点表示简单、直观表示简单、直观适合做图形输入手段适合做图形输入手段缺点缺点作几何变换困难作几何变换困难对几何运算不封闭对几何运算不封闭9.2.6 边界表示(边界表示(1/4)物体的边界与物体一一对应,确定了物物体的边界与物体一一对应,确定了物体的边界也就确定了物体本身体的边界也就确定了物体本身用于表示物体边界的有用于表示物体边界的有-平面多边形、平面多边形、曲面片曲面片什么是多面体?什么是多面体?平面多面体平面多面体表面由平面多边形组成的多面体表面
15、由平面多边形组成的多面体简单多面体简单多面体与球拓扑同构与球拓扑同构边界表示(边界表示(2/4)欧拉公式欧拉公式欧拉公式是必要条件欧拉公式是必要条件附加条件:附加条件:一条边连接两个点;一条边连接两个点;一条边被两个面、且仅被两个面共享;一条边被两个面、且仅被两个面共享;至少有三条边交于一个顶点等至少有三条边交于一个顶点等V-e+f=2边界表示边界表示(3/4)广义欧拉公式广义欧拉公式V-e+f-r=2(s-h)r: 多面体表面上孔的个数s: 相互分离的多面体数h: 贯穿多面体的孔洞个数边界表示边界表示(4/4)优点优点精确表示物体精确表示物体表示能力强表示能力强几何变换容易几何变换容易适于显
16、示处理适于显示处理缺点缺点表示复杂表示复杂有效性难以保证有效性难以保证集合运算复杂集合运算复杂9.2.7 构造实体几何表示(构造实体几何表示(1/2)将物体表示成一棵二叉树,称为将物体表示成一棵二叉树,称为CSG树树叶节点叶节点-基本体素,如立方体、圆柱体等基本体素,如立方体、圆柱体等中间节点中间节点-正则集合运算正则集合运算构造实体几何表示(构造实体几何表示(2/2)优点优点表示简单、直观表示简单、直观也是物体的构造方法,可用作图形输入手段也是物体的构造方法,可用作图形输入手段容易计算物体的整体性质容易计算物体的整体性质物体的有效性自动得到保证物体的有效性自动得到保证缺点缺点表示不唯一表示不
17、唯一不能直接用于显示不能直接用于显示求交计算麻烦求交计算麻烦9.3 不规则形体的建模方法不规则形体的建模方法分形造型分形造型分形几何表示的物体具有一个基本分形几何表示的物体具有一个基本特征:特征:无限的自相似性。无限的自相似性。山、树、海山、树、海岸线。岸线。粒子系统粒子系统表现表现“流体流体”特性特性(模拟自然景物或其他非规(模拟自然景物或其他非规则形状物体)则形状物体),擅长描述随时间变化的物擅长描述随时间变化的物体,流动、翻腾、膨胀等,体,流动、翻腾、膨胀等,如云、火、如云、火、烟、起源爆炸。烟、起源爆炸。动力系统动力系统基于文法的模型基于文法的模型9.3.1 L系统(系统(1/4)由生
18、物学家由生物学家Lindenmayer创立创立基本思想:基本思想:用文法表示植物的拓扑结构用文法表示植物的拓扑结构通过图形学方法生成逼真的画面通过图形学方法生成逼真的画面DOL系统(确定的上下文无关的系统(确定的上下文无关的L系统)系统)定义为三元组定义为三元组,其中其中V-表示字母集合表示字母集合V*-表示表示V上所有单词的集合上所有单词的集合w-是一个非空单词,称为公理是一个非空单词,称为公理P-产生式集合产生式集合 ,使得,使得如果没有明显的产生式,则令如果没有明显的产生式,则令L系统(系统(2/4)例子例子-Koch 雪花曲线雪花曲线V:F,+,-w:FP:F-F-F+F-F几何解释几
19、何解释F:向前画一条线向前画一条线+:右转右转-:左转左转 分形雪花实例:http:/202.113.229.160/math/fenxing2.htmL系统(系统(3/4)L( Lindermayer )系统系统增加如下两个字符增加如下两个字符:压栈:压栈:出栈:出栈例子例子-植物植物w:FP:F-F+FF-FF提出者:美国的生物学家Aristid Lindermayer L系统(系统(4/4)分形造型生成的树9.3.2 粒子系统与传统的建模方法或分形相比较,粒子系统不是用多边形的几何要素表示,而是用称为粒子(粒子(ParticlesParticles)的目标量的目标量来表示。例如模拟火焰时
20、,粒子的密度越高,亮度越高,表现出火焰独有的效果。 见例子:燃烧的纸燃烧的纸烟雾烟雾来源:来源:http:/graphics.http:/graphics.stanfordstanford. .eduedu/fedkiwfedkiw/ /9.3.3 非刚性物体模型以前的动画主要基于路径与运动学,运动参数:位置、速度。基于物理的建模,用力学方程描述运动,包括力力与加速度加速度)方法:用一组网格结点来逼近物体。网格结点之间柔性连接,然后取一外力作用在物体上,考虑贯穿物体网格的力传递。橡皮球的模拟:(弹簧模型)布料的模拟:(弹性材料模型)9.4.1 光源特性和物体表面特性光源特性和物体表面特性 Sh
21、ading :显示一个物体的色彩以及色彩在光照环境下的明暗变化 的描绘方法。 (相关因素:光源特性和物体表面特性。)一:光源特性一:光源特性 包括包括 1:光的色彩光的色彩 (R、G、B ) 2:光的强度光的强度 由R,G,B三种色光的强弱决定,总的光强为:Total_Value=0.30*Value_R+0.59*Value_G+0.11*Value_B 点光源 3:光的方向光的方向 分布式光源 漫射光源 9.4 光照模型光照模型三种光源三种光源 三种光源的示三种光源的示意图。意图。其中点光源和其中点光源和分布式光源合称分布式光源合称直射光源直射光源;几种常用的颜色模型 颜色模型某个三维颜色
22、空间中的一个可见光子集,它包含某个颜色域的所有颜色 。 最常见: RGBRGB 颜色模型 另外: CMYCMY 和 HSVHSV 颜色模型 详见第1章有关内容。物体表面特性包括如下内容物体表面特性包括如下内容: 反射系数由物体表面的材料和形状决定,分为漫反射(Diffuse Reflection)系数和镜面反射(Specular Reflection)系数。 透射系数 记为Tp,描述物体透射光线的能力,且有0Tp1。 表面方向 9.4.2 光照模型及其实现光照模型及其实现 光照模型(Illumination Model)描述物体表面的色彩明暗同光源特性、物体表面特性之间的关系。 光照模型分3个
23、部分描述这种关系,即漫射光线的情况、直线光线的情况和透射光线的情况。 漫射光线的情况漫射光线的情况 漫射光源是从四面八方均匀照来的,物体表面的色彩明暗与表面的形状无关,仅与表面的反射系数有关 。漫射光源照明的模型为 EPd = RPId 上式可以写为EPd-r=RP-rId-r,EPd-g=RP-gId-g,EPd-b=RP-bId-b 直射光线的情况直射光线的情况 在这种情况下,物体表面的明暗随表面法矢量和入射光线Is的夹角I的改变而变化。此时,物体表面会发生两类反射,即漫反射漫反射和镜面反射镜面反射。 在直射照明下,物体表面P点的漫反射和镜面反射的模型根据Lambert定律和Bui-Tuo
24、ng Phong的实验提出(图8.5)。 EPs=RPcos iIPs+WP(i)cosn sIPs光照模型中各参数的图示 Eps: P点反射的直射光线IPs的光强RP: P点的漫反射系数I: P点的法矢量N与入射光方向L的夹角Ips:入射的直射光线的强度WP(i):P点的镜面反射系数(入射角i的函数) W(i)与i的关系 WP(i)是P点的镜面反射系数(入射角i的函数)。由于W(i)的计算比较复杂,实际中常用一个常数W代替。 n控制高光的聚散,它和P点的材料有关。对于光滑发亮的金属表面,n值取得大,从而产生会聚的高光点 n与高光区域大小的关系 透射光线的情况透射光线的情况 透射模型如下: E
25、Pt = TPIPb 其中:Ept:物体表面P点处透射出的光强TP:P点的透射系数(取值范围为01)Ipb:到达P点背后的光强。 将上述3种情况综合起来,便获得物体表面P点处所发光强EP的计算公式: EP=EPd+EPs+EPt = RPId+(RPcos i+WPcosn s)IPs+TPIpb 上式中只有cos i和cos s的值是未知的,需要推算。9.4.3 明暗的光滑处理明暗的光滑处理 在计算机图形学中,曲面体(例如球)通常是用多面体逼近表达的。这时,分别计算各个面的亮度,就会在多边形与多边形的交界处产生明暗的连续变化,影响曲面的显示效果。 解决方法: 采用插补的方法,使得表面明暗光滑
26、化。最常使用的表面明暗光滑化的方法有两种,称为Gourand方法和Phong方法。 Gourand光滑方法如下:光滑方法如下:基本思想:在每个多边形顶点处计算颜色,然后在各个多边形内部进行线性插值,得到多边形内部各点颜色。即它是一种颜色插值着色方法。基本步骤: 先计算出多面体顶点的法线方向 用光照模型求得V点的亮度。 由两顶点的亮度,插值得出棱上各点的亮度。由棱上各点的亮度,插值得出面上各点的亮度。(下面详细介绍每步)Step1: 计算多面体顶点的法线方向 设与多面体顶点V相邻的多边形为P1,P2,Pn,它们的法线分别为N1(a1, b1, c1),N2(a2, b2, c2),Nn(an,
27、bn, cn)。则V的法线nV取做:nV = (a1+a2+an)i+(b1+b2+bn)j+(c1+c2+cn)kStep2: 用光照模型求得V点的亮度。 Step3:由两顶点的亮度,插值得出棱上各点的亮度。由棱上各点的亮度,插值得出面上各点的亮度 。保留abc折痕的情况 如果希望在某处不处理成光滑而要保留折痕效果 (例如abc)方法是在顶点b设置2条法线。分别用语A和B,C和D之间的插值Gourand光滑化方法光滑化方法 优点:能有效的显示漫反射曲面,计算量小 缺点:1、高光有时会异常2、当对曲面采用不同的多边形进行分割时会产生不同的效果。3、Gouraud明暗处理会造成表面上出现过亮或过
28、暗的条纹,称为马赫带(Mach_band)效应 改进Phong提出双线性法向插值,以时间为代价,解决高光问题 明暗变化失常 马赫带效应Gourand光滑化方法光滑化方法 基本思想:通过对多边形顶点的法矢量进行插值,获得其内部各点的法矢量,又称为法向插值着色方法。步骤1、计算多边形单位法矢量2、计算多边形顶点单位法矢量 3、对多边形顶点法矢量进行双线性插值, 获得内部各点的法矢量 4、利用光照明方程计算多边形内部各点颜色Phong光滑方法光滑方法Phong着色方法着色方法NA由N1、N2线性插值得到:两种方法的比较两种方法的比较1 Phong着色方法绘制的图形比Gouraud方法更真实,体现在两
29、个方面:高光区域的扩散,产生正确的高光区域 1:Phong着色方法计算量远大于Gouraud着色方法 2:在处理某些多边形分割的曲面时,Phong算法还不如Gouraud算法好。 两种方法的比较两种方法的比较2 Phone方法可以产生正确的高光区域Gouraud Gouraud PhonePhone两种方法的比较两种方法的比较39.4.4 阴影生成阴影生成 目的:增加图形的立体立体感感和场景的层次层次感感 ,真实感真实感阴影可分为两种:阴影可分为两种:本影本影:本影即景物表面上那些没有被光源(景物中所有特定光源的集合)直接照射的部分半影半影:而半影指的是景物表面上那些被某些特 定光源(或特定光
30、源的一部分)直接照射但并非被所有特定光源直接照射的部分。一般来说,半影的计算比本影要复杂得多 方法一方法一:影域多边形方法 所谓影域,就是物体投射出的台体 。判断点是否在台体中即可确定是否在阴影中。S1S2S3S4S5IIIIII利用影域多边形进行阴影判断 为了判别一可见多边形的某部分是否位于影域内,可将影域多边形置入景物多边形表中 (右图)方法方法2 2:曲面细节多边形方法:曲面细节多边形方法 首先,取光源方向为视线方向对景物进行第一次消隐,产生相对光源可见的景物多边形(称为曲面细节多边形);并通过标识数将这些多边形与它们覆盖的原始景物多边形联系在一起。位于编号i的原始景物多边形上的曲面细节
31、多边形也注以编号i。接着,算法取视线方向对景物进行第二次消隐。 方法方法3:z缓冲器方法缓冲器方法 为了方便地在光滑曲面片上生成阴影 ,Williams提出一种z缓冲器方法 首先,利用z缓冲器消隐算法取光源为视点对景物进行消隐。所有景物均变换到光源坐标系 第二步,仍采用z缓冲器消隐算法按视线方向计算画面 方法方法4 4:光线跟踪方法:光线跟踪方法 1980年Whitted提出了整体光照明模型,并用光线跟踪(Ray tracing)技术来解这个模型 在光线跟踪算法中,要确定某点是否位于某个光源的阴影内,只要从该点出发向光源发出一根测试光线即可。9.4.5 光线跟踪的基本原理 光线跟踪方法沿着到达
32、视点的光线的反方向跟踪,经过屏幕上每一像素,找出与视线所交的物体表面点P0,并继续跟踪,找出影响P0点光强的所有光源,从而算出P0点上光照强度。光线跟踪示意图 右图显示了一个例子。连接观察点和屏幕上的一个像素,即形成一条视线。 视线在P0处的反射和透射 视线V在P0处产生反射和透射,所产生的反射线和透射线作为新的视线与各平面求出新的交点P1、P2(图8.13),并分别产生新的反射线和透射线这样不断深入,直至所产生的射线射出场景。由此得到视线跟踪轨迹上的一系列交点P0,P1,P2,Pn。这个过程可以表示为一棵光线跟踪树光线跟踪树光线跟踪树光线跟踪树。右图:与上图对应的光线跟踪树光线跟踪树光强计算
33、方法是:以后序周游的算法遍历这棵光线跟踪树。 光线跟踪树 对于树上任意一结点Pi , Pi处沿视线方向V射去的光强I为:I=IG+WPIr+TPItPi点所受到的光照 光线跟踪方法优点: 1)各各物物体体之之间间反反射射的的影影响响,因此显示效果十分逼真因此显示效果十分逼真2)有消隐功能有消隐功能3)3)有影子效果有影子效果 4)4)该算法具有并行性质该算法具有并行性质 9.4.6 光线与实体的求交 光线跟踪算法中75%以上的工作量用于求交计算 进行求交运算之前,常用包围球或包围盒的方法对物体进行是否与光线相交的预测。 包围球包围球 算法1:包围球检查算法算法 包围盒检查算法包围盒包围盒 包围
34、盒检查算法不不不不仅仅仅仅判判判判断断断断光光光光线线线线是是是是否否否否与与与与包包包包围围围围盒盒盒盒相相相相交交交交,而而而而且且且且能能能能判判判判断断断断光光光光线线线线与与与与物物物物体体体体各各各各面面面面的的的的交交交交点坐标点坐标点坐标点坐标。此外,包围盒比包围球更可靠更可靠更可靠更可靠。 包含性检查算法包含性检查算法 包含性检查是检查P(x, y, z)是否在多边形V(V1, V2, , Vn)之内。Vi是多边形的顶点,坐标为(xi, yi, zi),1in。包含性检查的算法思想如下: P与V在xOy内的投影为P与V,设Vi所含的一个顶点。则P、Vi的坐标为P=(x, y)
35、,Vi=(xi, yi)水平线交点的奇偶记数 由P向水平方向做一条射线与V各边相交,如果交点为奇数个,说明P在多边形之内;如果交点为偶数个,说明P在多边形之外。如图7.24光线跟踪算法光线跟踪算法 光线跟踪算法中的数据结构 光线跟踪算法中的每一条光线要与场景中的各个物体所含的各个面求交。有必要对数据进行管理 对于多面体,常采取链表构成的树形结构对数据进行分层表达与管理。 9.4.7 整体光照模型整体光照模型 简单光照模型(亦称局部光照模型)不考虑周围环境对当前景物表面的光照明影响,忽略了光在环境景物之间的传递,很难表现自然界复杂场景的高质量真实感图形。为了增加图形的真实感,必须考虑环境的漫射、
36、镜面反射和规则投射对景物表面产生的整体照明效果。 表现场景整体照明效果的一个重要方面是透明现象的模拟 。整体光照明模型还要模拟光在景物之间的多重反射 。Whitted 光照明模型是一种整体光照明模型 ,这一模型能很好地模拟光能在光滑物体表面之间的镜面反射和通过理想透明体产生的规则透射 Witted光照模型Whitted光照模型基于如下假设:物体表面向视点方向V辐射的光亮度Il由三部分组成:(1)光源直接照射引起的反射光亮度Ill。(2)来自V的镜面反射方向R的其它物体反射或折射来的光的亮度Isl。(3)来自V的透射方向T的其它物体反射或折射来的光的亮度ItlWitted光照模型Witted光照
37、模型: 或oIs为镜面反射方向的入射光强度;Ks为镜面反射系数,为01之间的一个常数oIt为折射方向光强,Kt为透射系数,是0 1之间的常数oIc的计算可采用Phong模型因此,关键是Is和It的计算。如何计算呢? 由于Is和It是来自V V的镜面反射方向r r和规则透射方向t t的环境光亮度,因而首先必须确定r r和t t Witted光照模型-反射、折射方向计算已知视线方向V,求其反射方向R与折射方向T(N是表面的法向方向)视线V的反射方向r折射方向t其中:1 2 t ItNVi1=sin(i2)=1/2sin() 9.5 物体的纹理显示物体的纹理显示 表面图案表面图案凹凸纹理9.5 物体
38、的纹理显示物体的纹理显示 将一幅平面图案描绘到物体表面上的过程如下: 将平面图案上的各点(x, y)映射到物体表面的各点(x, y, z)。 求出点(x, y, z)处新的反射系数。 用光照模型计算物体表面点(x, y, z)的色彩明暗。9.5.1 表面图案表面图案两个凸多边形中的点的映射 对于目的四边形S内的任一点P,与在S内的对应点P的映射关系为:凸四边形S和S之间的位置映射算法如下: 求S中的边的交点F、E,以及S中的边的交点F、E的位置。 对于目的多边形S中的每一个元素P,寻找S中对应位置P。 求PF与AB的交点P1,由P1得f1/f2;求PE与BC的交点P2,由P2得e1/e2。 由
39、f1/f2=f1/f2得P1的位置,由e1/e2=e1/e2得P2的位置。 求P1 F 与P2E的交点,即为点P的位置。 取P的色彩,求得P点新的反射系数。 凹多边形划分为多个凸四边形分别进行映射 对于边数大于4的多边形,可以用网格的办法将目的多边形S和源多边形S相互对应地划分为凸四边形网格。对于网格中的每个四边形施行上述变换。9.5.2 凹凸纹理凹凸纹理 Blinn在1978年提出,用扰动物体表面法线方向的方法来模拟表面凹凸纹理的真实感显示效果。 物体的新表面S(u, v)定义为 S(u, v)=Q(u, v)+P(u, v)式(8.16)对u、v分别求偏导函数,得 上式中第三项皆可忽略,即
40、得记NS为S(u, v)的法向量。法向量可以表示为两个偏导向量Su和Sv的叉积,即NS = Su Sv=绘制:不同灯光效果的几何体 9.6 真实感表现真实感表现用用OpenGLOpenGL实现实现9.6.1 什么是OpenGL?开放图形库(OpenGL),一个开放的三维图形软件包,独立于操作系统。SGI公司企业标准,业界中的事实标准。是真实感图形表现主流标准 。支持平台:Visual C+、GLUT( = OpenGL Utility Toolkit)等;主要功能:图形建模图形变换光照、材质、纹理、像素操作融合、反走样、雾化设备上下文 (DC)应 用 程 序Application图形设备接口(
41、GDI)设备驱动程序硬件显示器渲染上下文 (RC) 9.6.2 OpenGL绘图方式 是一个与平台无关的三维图形接口,操作系统必须提供像素格式管理和渲染环境管理。9.6.3 VC中搭建OpenGL绘图程序框架Step 1Step 1Step 1Step 1添加OpenGL库函数(gl.h、glu.h、glaux.h )Step 2Step 2Step 2Step 2添加MFC类中有用消息响应函数OnSize() /关联RC与DC,设置屏幕尺寸OnCreate() /初始化某些形体,如设计显示列表OnTimer() /设计计时器,用于产生动画效果OnDestroy() /关闭程序时,消除动画、关
42、闭设备上下文等 Step 3Step 3Step 3Step 3以下三个自定义成员函数,用户必须手工添加:void CMyentityView:MyDraw() / 绘图在此中进行/ 像素格式管理和渲染环境管理BOOL CMyentityView:MyPixelFormat() / 与与OpenGL接口关联之必须函数之一接口关联之必须函数之一 void CMyentityView:MySetPixelFormat() / 与与OpenGL接口关联之必须函数接口关联之必须函数Step 4Step 4Step 4Step 4 将OpenGL相关库文件(“Opengl32.lib”、“Glu.lib
43、”、“Glaux.lib” )加入到本工程 Step 5Step 5Step 5Step 5 编译连接生成exe文件。特别注意未添加有关OpenGL的LIB库文件,编译连接将会出现如下的连接错误。 如果把程序移动到其它地方下运行,重新编译,可能出现以下LIB库文件路径出错信息。解决方法:将当前的几个LIB文件从工程文件中删除,重新添加该LIB文件。删除后重删除后重新添加新添加本章小结三维形体表示方法图形对象包括规则对象,能用数据模型描述,非规则对象,用过程模型描述基本粒子系统、分形造型真实感表现技术光照、阴影、表面图案与纹理等简单光照模型的基本原理:表面明暗光滑化两种方法:Gourand方法和Phong方法。用OpenGL进行三维形体设计