ImageVerifierCode 换一换
格式:DOC , 页数:38 ,大小:829KB ,
资源ID:2591677      下载积分:10 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/2591677.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     留言反馈    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【胜****】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【胜****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(基于粒子系统的喷泉模拟-本科毕业论文.doc)为本站上传会员【胜****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

基于粒子系统的喷泉模拟-本科毕业论文.doc

1、毕业论文论文题目: 基于粒子系统的喷泉模拟 系 别: 计算机系 专业年级: 学 号: 姓名: 指导教师、职称: 年 月 日IIIFountain simulation based on particle system College: Specialty and Grade: Number: Name: Advisor: Submitted time: 目录摘 要1Abstract21 绪 论31.1 研究背景、意义31.2 国内外研究现状41.3 本论文的技术路线52 基于OpenGLMFC的建模基础62.1 OpenGL概述62.2 OpenGL渲染管道62.2.1 求值器62.2.2 基

2、于顶点的操作72.2.3 图元装配72.2.4 像素操作72.2.5 纹理装配72.2.6 光棚化72.2.7 片断操作72.3 MFC概述82.3.1 封装82.3.2 继承92.3.3 虚拟函数和动态约束92.3.4 MFC的宏观框架体系92.4 MFC编程框架102.4.1 构成应用程序对象102.4.2 构成应用程序的对象之间的关系112.4.3 构成应用程序的文件112.5 基于OpenGL+MFC的三维模拟的编程环境配置133 粒子系统的原理和关键技术163.1 计算机图形学原理163.2 粒子系统的理论163.3 粒子系统的基本模型163.3.1 粒子的生成173.3.2 粒子属

3、性初始化173.3.3 粒子的运动状态183.3.4 粒子的消亡193.3.5 粒子的绘制194 系统的设计与实现204.1 系统的关键技术分析204.1.1 喷泉现象的运动规律204.1.2 喷泉现象特征214.2 系统的设计和实现214.2.1 喷泉粒子系统的逻辑视图214.2.2 喷泉粒子系统实现的关键代码234.3 模拟结果285 结论与展望295.1 全文总结295.2 进一步展望29参考文献30致 谢33摘 要自然景物的模拟在视景仿真系统、计算机游戏、三维动画中等有着广泛的运用。自然景物的模拟也一直是计算机图形学中的热门研究课题。然而,大多数自然景物的外形是随机变化的,如:火焰、浪

4、花、河流、瀑布、雨雪、烟雾等,很难用常规的建模方法及模拟技术来描述,因此自然景物的模拟也是具有挑战性的课题。 本文在认真分析和总结目前国内外喷泉模拟的基础上,以实时性和逼真性为目标,提出一种基于粒子系统的虚拟喷泉的模拟方法。结合OpenGL和MFC编程,运用物理原理模拟实现喷泉粒子的运动轨迹时,结合等加速运动来简化粒子运动状态,并采用纹理融合技术实现对粒子的绘制。实验证明该方法实现简单,模拟的喷泉效果满足实时性和逼真性的要求。关键词:粒子系统;喷泉模拟;虚拟现实;0penGLAbstractThe natural scenery in visual simulation system is s

5、imulated, the computer games, 3d animation medium have extensive use of. The natural scenery of simulation has been computer graphics.a hot research topic. However, most of the natural scenery have random change shape, such as flame, spray, rivers, waterfalls, snow, smoke, etc. It is difficult to us

6、e conventional modeling method and simulation technology to describe the natural scenery, so the simulation of natural scenery is a challenging task.Based on the analysis and summary fountain at home and abroad on the basis of simulation, real-time and lifelike, particle system was proposed. Combine

7、d with OpenGL and physical principle, using MFC programming simulation of particle trajectories fountain, combined acceleration motion to simplify particle movement, and the realization of particle texture fusion technology. Experiment results show that the method is simple, the fountain of simulati

8、on results meet requirement of real-time and lifelike.Key words:particle systems, Fountain simulation, Virtual reality, 0penGL 1 绪 论计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器栅格形式的科学。简单地说,计算机图形学就是研究如何在计算机中表示图形、利用计算机进行图形计算、处理和显示的相关原理与算法。1982年,国际标准化组织IS0给出计算机图形学的定义:研究用计算机进行数据与图形之间相互转换的方法和

9、技术。计算机图形学是运用计算机产生、存储、构建物体模型的一门学科1。近年来,诸如云彩、瀑布、雨、雪等不规则模糊物体的模拟越来越成为计算机图形学中最具挑战性的研究方向之一,它们的模拟在计算机游戏、影视、广告、视景仿真等各种领域得到了越来越广泛的应用。具有不规则的几何外形和内在不确定性的不规则模糊物体,不能用通常的三维建模方法来制作,不同于静态景物,它具有产生、发展和消灭的过程。粒子系统(particle system)是迄今为止模拟不规则模糊物体最为成功的一种图形生成算法。喷泉模拟过程是一种非常复杂的不规则模糊物体的模拟过程,本文在运用物理学原理模拟实现喷泉粒子的运动轨迹时,结合等加速运动来简化

10、粒子运动状态,并利用OpenGL的纹理映射和融合该技术绘制粒子。结果表明等加速运动方法使粒子运动路径更加简单,可以获得好的实时性,利用融合渲染粒子的方法也使喷泉模拟效果满足了虚拟现实、计算机仿真中真实感的要求。1.1 研究背景、意义虚拟现实技术在当今计算机信息科学领域中研究的热门方向之一,虚拟场景是虚拟现实系统中重要的组成部分,在虚拟场景中模拟生活中的自然景物一直是计算机图形学领域中研究的内容。随着计算机科技的不断发展进步,计算机图形学己成为一个具有巨大潜力的新兴产业,对于人们的学习、生活以及学习领域都产生了重大的影响和推动作用。尤其是图形学领域中的计算机动画目前广泛应用于航空航天、影视广告、

11、行为模拟、装演设计、虚拟场景等各种领域。可以预见,在未来的信息工业和产业中,计算机动画将更进一步发挥巨大的作用,占据重要的地位。近年来,对于自然景物的生成与模拟一直是计算机图形学和动画研究中的热门课题。其中的烟火爆炸、云雾闪电、瀑布浪花、飞沙尘埃、花草树木等景物的模拟更具有挑战性。这些自然景物因其形状、形态随时间的推移而动态地、随机地发生变化,很难用常规的建模方法及模拟技术来生成。随机模型是处理这类问题的一种先进的方法,在随机模型中首推Fournier的分形算法和Reeves的粒子系统方法2。其中粒子系统方法具有良好的随机性和动态性,能逼真地模拟动态景物。因此,研究利用粒子系统方法模拟自然景物

12、,有着重要的科学意义和广泛的应用前景。喷泉是这些景物中具有代表性的动态景物,在风景园林、学校、广场、生活小区、公园等工作及休闲娱乐场所皆可看到各种不同的喷泉3。因此,在虚拟风景园林、虚拟校园、虚拟城市、虚拟公园等大的虚拟场景中,喷泉是一个风景点。粒子系统是最合适在虚拟场景中建立喷泉模型的选择。论文研究的意义在于粒子系统方法在模拟不规则动态自然景物的研究领域开辟了很大的发展空间,自然景物的模拟是计算机图形学理论研究与实际应用的重点与难点;在构造这类复杂物体的几何模型时需要大量的有效数据,而且这些数据都是随机性,计算量相当大,如何以粒子系统基本算法来构造复杂物体并逼真的对其进行实时渲染是虚拟现实技

13、术研究的新课题。虚拟喷泉技术在房地产开发、建筑设计、影视制作、游戏设计,风景园林等方面具有非常广阔的应用前景。在虚拟场景中水的效果对增强场景真实感有十分重要的作用,其中喷泉效果是虚拟场景中常见的画面,例如风景园林的动态喷泉水景,将计算机产生的许多奇妙喷泉水景图像添加到虚拟漫游系统或影视作品中可以大大提高作品的观赏效果。虚拟喷泉的沉浸性、真实性以及实时性效果是传统平面效果图和动画播放所无法达到的,而应用粒子系统实现喷泉的模拟具有较强的真实感,能达到人们对虚拟现实系统沉浸感的要求,使人能在虚拟场景中有身临其境的感觉,更具有实时性。因此虚拟喷泉技术在一定程度上会得到广泛的应用,利用粒子系统实现喷泉的

14、三维效果在虚拟现实领域具有一定的研究意义。1.2 国内外研究现状在对于仿真喷泉、瀑布、火焰、树木、雨、雪、雾等这些生活中常见的自然景物过程中,由于这些景物具有不规则性,动态性和随机性,模拟起来十分的困难,同时也是虚拟场景中不可缺少的部分。而自然景物的模拟一直是虚拟现实领域的重要研究内容,如何在虚拟场景中真实的再现生活中的自然景物是极具挑战性的课题之一。自然景物的模拟一般有两种方法4:一种是基于物理建模技术的方法。基于物理建模技术的方法主要是通过对Navier-Stokes(纳维埃一斯托克斯,简称NS方程)方程求解,求出流体过断面时的平均流速5。在基于物理的真实水流模拟方面,Anderson6等

15、人从工程需要出发,基于Navier-Stokes方程准确描述了水流的形态;而Kass 7等人则以动画中快速模拟为目标,通过简化Navier-Stokes方程较好地模拟了水波:Foster 8等人运用Navier-Stokes方程分别实现了液体、气体、流体的模拟。我国的徐迎庆9等人从水力学方程出发,提出了一个基于物理模型的模拟流水和波浪的方法;陈前华10等人基于物理建模方法与隐式曲面造型技术,实现了滴水涟漪的模拟。这些方法的共同特点是要求解Navier-Stokes方程,或者是简化后的Navier-Stokes方程,但由于Navicr-Stokes方程组是非线性方程组,很多情况下都难以精确地求出

16、解析解,即使能求出其特解也往往因为求解计算量太大而难以达到实时的要求。另一种是基于粒子系统的方法。自然景物与规则的几何物体不同,它们的表面往往包含有丰富的细节或具有随机变化的形状,这些细节与随机变化的形状很难用传统的解析曲面来描述。比如说对喷泉、水流、云、雾、烟、雪、火花等自然景物的模拟上,传统的造型方法具有局限性,而粒子系统的出现却较好的解决了这一难题。粒子系统能充分体现模糊物体的动态性和随机性,能很好地模拟风中飘摇的树枝、天空中的流云、水面上的浪花、山中的薄雾、雨和雪花、园林中的喷泉等三维复杂自然景物。粒子系统的优点就是用简单的粒子图元来构造出传统计算机图形学难以构造的复杂物体,而且具有很

17、强的真实感和实时性,粒子系统在对自然景物的模拟方面得到了广泛的应用。1992年Loke11等人提出了应用粒子系统绘制焰火的算法,采用链表数据结构存储粒子,设计了粒子系统绘制引擎(Particle System Rendering Engine),并用粒子衍生的方法表现焰火粒子的轨迹实现了多种焰火的特殊效果。从1983年由Reeves提出粒子系统训以来,许多的研究者对粒子系统进行了研究与发展。Reeves WT用粒子系统模型模拟了火焰、爆炸等效果,他还成功模拟了电影Star Trek II:The warth of Khan中行星被撞击后所产生的爆炸及火焰等一系列特殊效果。1955年Reeves

18、 WT和Blau12发展了粒子系统他们用“Vo1ume Filling”基本单元法生成随时间改变形状但又基本保持不变的实体,如随风飘动的花草树叶; Stam和Flume13用“元球”来描述火焰等气态现象,并给出了一种扭曲“元球”的算法,使模拟的气态景物的外形更加不规则,从而更加真实;Karl Sims14研究了粒子的动画及绘制算法,他利用粒子系统的并行特点,提出了一个并行的粒子绘制系统,该系统能绘制不同形状、大小、颜色、透明度的粒子;wong15使用粒子系统实现了一个简单的瀑布模型,在该模型中设置了瀑布下落过程中的障碍(如岩石等);Fournier A16等在研究海浪模型中利用粒子系统模拟了浪

19、花,并提出了浪花所产生的条件;Teng-see Loke11等人基于粒子系统,使用牛顿运动定律来描述烟火,对烟火的运动、颜色、形状、亮度、尾迹等进行仿真,取得了很好的效果。MEGoss17使用粒子系统模拟了船行驶时产生的尾迹,主要是从外形上模拟船的尾迹。MatthiasUnbescheiden和Andrzej Trembilski18运用粒子系统,从云的物理原理出发,结合纹理映射技术建立了云的模型,其核心是采用具有纹理的多面体顶点集代替粒子群,该模型大大减少了粒子系统中粒子的数量,从而使粒子系统的实时仿真得以实现。国内对粒子系统的研究也开始深入,一些研究人员利用粒子系统实现了火焰、烟、云、导弹

20、尾气等复杂景物的效果,如谢剑斌,郝建新19等运用粒子系统模拟了雨点和雪花的降落;彭群生和管宇20实现了瀑布的模拟;张芹、吴慧中21等模拟了火焰、烟等所具有的动态性和随机性;王润杰、田景全22等人在分析粒子系统的基础上,提出了模拟雨雪的实时算法;王静秋23等通过对焰火细节和特点的分析,给出了模拟焰火的数据结构,用粒子系统实现了焰火的动态模拟,其中主要介绍了焰火的颜色、亮度、透明度、形状、大小、尾迹和生命周期等特性及旋转、星状等特殊显示效果的模拟。在基于粒子系统模拟喷泉上,国内朱加勇,周波等24设计了一个基于VC+6O和OpenGL的喷泉模拟系统,结合凹凸纹理映射技术对粒子进入水池真实水波的产生、

21、扩散、衰减以及多个水波的交迭过程的计算机模拟,采用了OpenGL显示列表(DisplayLists)方法绘图,优化了程序性能,效果逼真实现了真正的三维实时绘制。马骏和朱衡君25基于动态纹理和粒子系统实现了对喷泉的模拟,其方法是渲染一定量的图像作为贴图纹理,采用公告板技术和动态纹理技术来实现纹理喷泉的绘制,但缺乏一定的灵活性;赵静谧,张慧3等提出了用基于粒子系统与Particle System API的景物模拟方法,并采用Line方式渲染粒子,结合纹理映射方法对喷泉进行了模拟;张从辉,万华根26从物理建模技术出发构建了音乐喷泉模型。1.3 本论文的技术路线 本文主要根据国内外模拟喷泉的研究现状进

22、行了分析和借鉴。对粒子系统进行了研究。结合粒子系统和流体动力学原理,对喷泉粒子系统的原有模型进行了进一步的分析和研究通过对喷泉运动的分析,利用随机粒子在系统中不规则运动来模拟喷泉粒子运动,从而使喷泉粒子的运动更加灵活。并针对于喷泉模拟效果上进行了改进。本论文主要从下面几章阐述利用粒子系统实现喷泉的模拟:第一章:主要综述了课题的国内外研究现状。对本文的研究内容、研究目标、研究方法和预期研究结果进行了概述,多层次反应了本课题的科学意义和实用价值。第二章:提出基于OpenGL+MFC的建模基础,分析了OpenGL渲染管道,MFC编程框架,陈述了基于OpenGL+MFC的三维模拟的编程环境配置。第三章

23、:主要介绍粒子系统的原理和关键技术包括了粒子的发射,初始状态,生命周期等的控制。第四章:通过喷泉粒子的运动规律,特征,轨迹的分析研究来实现系统的设计。并对设计的过程,实现的原理,关键技术和实验结果进行详细陈述。第五章:总结本文方法并给出进一步的研究展望。2 基于OpenGLMFC的建模基础2.1 OpenGL概述OpenGL是个定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图象(二维的亦可)。OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。1992年7月,SGI公司发布了OpenGL的1.0版本,随后又与微软公司共同开发了Windows NT版本的OpenG

24、L。1995年OpenGL的1.1版本面市。 2003年的7月28日,SGI和ARB公布了OpenGL 1.5。2004年8月,OpenGL2.0版本发布OpenGL 2.0标准的主要制订者并非原来的SGI,而是逐渐在ARB中占据主动地位的3Dlabs。2008年8月初Khronos工作组在Siggraph 2008大会上宣布了OpenGL 3.0图形接口规范,GLSL1.30 shader语言和其他新增功能将再次未来开放3D接口发展指明方向。OpenGL 3.0 API开发代号为Longs Peak,和以往一样,OpenGL 3.0仍然作为一个开放性和跨平台的3D图形接口标准,在Shader

25、语言盛行的今天,OGL3.0增加了新版本的shader语言:GLSL 1.30,可以充分发挥当前可编程图形硬件的潜能。2009年3月又公布了升级版新规范OpenGL 3.1,也是这套跨平台免费API有史以来的第九次更新。2009年8月Khronos小组发布了OpenGL 3.2,这是一年以来OpenGL进行的第三次重要升级。Khronos旗下的OpenGL ARB(Architecture Review Board)工作组推出了GLSL 1.5OpenGLShading Language(OpenGL着色语言)的升级版,以及在OpenGL3.2框架下推出了两个新功能,可以让开发者在开发新程序时

26、能够在使用流水线内核特性或兼容性特性之间做出选择,其中兼容性特性会提供与旧版OpenGL之间的兼容性。2.2 OpenGL渲染管道 绝大多数OpenGL的实现都有一个的相类似的操作顺序,一系列处理阶段称为OpenGL渲染管道。如图1 显示了OpenGL处理数据的过程。几何数据(顶点、线、多边形)跟随着这些路径通过这些代表求值程序和每一个顶点操作的盒子,而像素数据(像素、图像、位图)的部分加工处理过程有些不同。在将最后的像素数据写到帧缓存前,两种类型的数据都要经过最后相同的步骤(光栅化和片段操作)。图1 OpenGL渲染管道 下面我们更为详细的介绍OpenGL渲染管道的一些关键阶段。2.2.1

27、求值器 所有的几何图元最终都要通过顶点来描述。参数化曲线和表面最初可能是通过控制点以及成为基函数(Basic function)的多项式函数进行描述的。求职器提供了一种方法。根据控制点计算表示表面的顶点。这种方法是一种多项式映射,它可以根据控制点产生表面法线、纹理坐标、颜色以及空间坐标。2.2.2 基于顶点的操作 对于顶点数据,接下来的一个步骤就是基于顶点的操作,就是把顶点变换为图元。有些类型的顶点数据(例如空间坐标)是通过一个4*4的浮点矩阵进行变换的。空间坐标从3D世界的一个位置投影到屏幕上的一个位置。如果启用了高级特性,这个阶段将更为忙碌。如果使用了纹理,这个阶段还将生成并变换纹理坐标。

28、如果启用了光照,就需要综合变换后的顶点,表面法线,光源位置,材料属性以及其他光照信息进行光照计算,产生最终的颜色值。2.2.3 图元装配 图元装配的一个主要内容就是剪裁,它的任务是消除位于半空间(half-space)之外的那部分几何图元,而这个半空间是由一个平面所定义的。点剪裁就是简单地接受或拒绝顶点,直线或多边形剪裁则可能需要添加额外的顶点,具体取决于直线或多边形是如何进行剪裁的。在有些情况下,接下来需要执行一个称为透视除法(perspective division)的步骤。它使远处的物体看起来比近处的物体更小一些。接下来所进行的是视口(viewport)和深度(z坐标)操作。如果启用了剔

29、除功能(culling)并且该图元是个多边形,那么它就有可能被剔除测试所拒绝。取决于多边形模式,多边形可能被画成点的形式或者直线的形式。这个阶段所产生的结果就是完整的几何图元,也就是根据相关的颜色,深度(有时还有纹理坐标值以及和光棚化处理有关的一些指导信息)进行了变换和剪裁的顶点。2.2.4 像素操作 在OpenGL的渲染管线中,和单路径的几何数据相比,像素数据所经历的流程有所不同。首先,来自系统内存的一个数组中的像素进行解包,从某种格式(像素的原始格式可能有多种)解包为适当数量的数据成分。接着,这些数据被缩放、偏移,并根据一副像素图进行处理。处理结果先进行截取,然后或者写入到纹理内存,或者发

30、送到光棚化阶段。如果像素数据时从帧缓冲区读取的,就对他们执行像素转换操作(缩放、偏移、映射和截取)。然后,这些结果被包装为一种适当的格式,并返回到系统内存的一个数组中。OpenGL有一种特殊的像素复制操作,可以把数据从帧缓冲区复制到帧缓冲区的其他位置或纹理内存中。这样,在数据写入到纹理内存或者写回到帧缓冲区之前,只需要进行一道像素转换就可以了。2.2.5 纹理装配 OpenGL应用程序可以在几何物体上应用纹理图像,使它们看上去更为逼真。如果需要使用多幅纹理图像,把它们放在纹理对象中是一种明智的做法。这样,就可以很方便地在他们之间进行切换。有些OpenGL实现拥有一些特殊的资源,可以加速纹理的处

31、理。这种资源可能是专用的,高性能的纹理内存。如果确实拥有这种内存,纹理对象可能会优先进行处理,以控制这种有限和宝贵的资源的使用。2.2.6 光棚化 光棚化就是把几何数据和像素数据转换为片断(fragment)的过程。每个片断方块对应用于帧缓冲区中的一个像素。把顶点连接起来形成直线或者计算填充多边形的内部像素时,需要考虑直线和多边形的点画模式,直线的宽度,点的大小,着色模型以及用于支持抗锯齿处理的覆盖计算。每个片断方块都将具有各自的颜色和深度值。2.2.7 片断操作 在数据实际存储到帧缓冲区之前, 将要执行一系列的操作。这些操作可能会修改甚至丢弃这些片断。所有这些操作都可以被启用或禁用。第一个可

32、能遇到的操作是纹理化。在纹理内存中为每个片断生成一个纹理单元(texel,也就是纹理元素),并应用到这个片断上。接着可能进行的是雾计算,然后是剪裁测试,alpha测试,模板测试和深度缓冲区测试(深度缓冲区用于消除被隐藏的表面)。如果一个片断无法通过一个启用的测试,它的连续处理过程可能会被中断。随后,将要执行的可能是混合,抖动,逻辑操作以及根据一个位掩码的屏蔽操作。最后,经过完整处理的片断就被绘制到适当的缓冲区,最终成为一个像素并到达它的最终归宿。2.3 MFC概述MFC,微软基础类(Microsoft Foundation Classes), 用于在C+环境下编写应用程序的一个框架和引擎。该类

33、库提供一组通用的可重用的类库供开发人员使用。大部分类均从CObject 直接或间接派生,只有少部分类例外。MFC类库作为C+与Windows的接口,建立在Win32应用程序编程接口API之上,封装了大多数的API函数,主要是API中与程序结构相关的部分和最常用的部分。MFC还封装了重要的Windows扩展,如COM,ActiveX,ODBC和Internet APIs,为这些难以编程实现的功能提供了简便方法。MFC中的各种类结合起来构成了一个应用程序框架,让程序员在此基础上来建立Windows下的应用程序。MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预

34、定义的接口把具体应用程序特有的东西填入这个轮廓。Visual C+提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于直观地设计用户界面;ClassWizard用来协助添加代码到框架文件;最后进行编译,则通过类库实现了应用程序特定的逻辑。在MFC编程中,入口函数WinMain()被封装在MFC的应用程序框架内,已经不用也不可以再定义为另一个WinMain()函数。MFC编程最好的办法是使用MFC的应用程序向导工具AppWizard。AppWizard为程序员提供了一种快捷方便的工具来定制基于MFC的应用程序框架,程序员只需以此为基础,添加

35、与修改程序代码来实现所需功能。MFC是一个编程框架,MFC中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。Microsoft Visual C+提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应

36、用程序特定的逻辑。MFC编程框架具有如下特点:2.3.1 封装 构成MFC框架的是MFC类库。MFC类库是C+类库。这些类或者封装了Win32应用程序编程接口,或者封装了应用程序的概念,或者封装了OLE特性,或者封装了ODBC和DAO数据访问的功能,等等,分述如下。(1)对Win32应用程序编程接口的封装用一个C+ Object来包装一个Windows Object。例如:class CWnd是一个C+ window object,它把Windows window(HWND)和Windows window有关的API函数封装在C+ window object的成员函数内,后者的成员变量m_hW

37、nd就是前者的窗口句柄。(2)对应用程序概念的封装使用SDK编写Windows应用程序时,总要定义窗口过程,登记Windows Class,创建窗口,等等。MFC把许多类似的处理封装起来,替程序员完成这些工作。另外,MFC提出了以文档-视图为中心的编程模式,MFC类库封装了对它的支持。文档是用户操作的数据对象,视图是数据操作的窗口,用户通过它处理、查看数据。(3)对COM/OLE特性的封装OLE建立在COM模型之上,由于支持OLE的应用程序必须实现一系列的接口(Interface),因而相当繁琐。MFC的OLE类封装了OLE API大量的复杂工作,这些类提供了实现OLE的更高级接口。(4)对O

38、DBC功能的封装以少量的能提供与ODBC之间更高级接口的C+类,封装了ODBC API的大量的复杂的工作,提供了一种数据库编程模式。2.3.2 继承 首先,MFC抽象出众多类的共同特性,设计出一些基类作为实现其他类的基础。这些类中,最重要的类是CObject和CCmdTarget。CObject是MFC的根类,绝大多数MFC类是其派生的,包括CCmdTarget。CObject 实现了一些重要的特性,包括动态类信息、动态创建、对象序列化、对程序调试的支持,等等。所有从CObject派生的类都将具备或者可以具备CObject所拥有的特性。CCmdTarget通过封装一些属性和方法,提供了消息处理

39、的架构。MFC中,任何可以处理消息的类都从CCmdTarget派生。针对每种不同的对象,MFC都设计了一组类对这些对象进行封装,每一组类都有一个基类,从基类派生出众多更具体的类。这些对象包括以下种类:窗口对象,基类是CWnd,派生了CView类;应用程序对象,基类是CwinThread;文档对象,基类是Cdocument,等等。程序员将结合自己的实际,从适当的MFC类中派生出自己的类,实现特定的功能,达到自己的编程目的。2.3.3 虚拟函数和动态约束 MFC以“C+”为基础,自然支持虚拟函数和动态约束。但是作为一个编程框架,有一个问题必须解决:如果仅仅通过虚拟函数来支持动态约束,必然导致虚拟函

40、数表过于臃肿,消耗内存,效率低下。例如,CWnd封装 Windows窗口对象时,每一条Windows消息对应一个成员函数,这些成员函数为派生类所继承。如果这些函数都设计成虚拟函数,由于数量太多,实现起来不现实。于是,MFC建立了消息映射机制,以一种富有效率、便于使用的手段解决消息处理函数的动态约束问题。这样,通过虚拟函数和消息映射,MFC类提供了丰富的编程接口。程序员继承基类的同时,把自己实现的虚拟函数和消息处理函数嵌入MFC的编程框架。MFC编程框架将在适当的时候、适当的地方来调用程序的代码。本书将充分的展示MFC调用虚拟函数和消息处理函数的内幕,让读者对MFC的编程接口有清晰的理解。2.3

41、.4 MFC的宏观框架体系 如前所述,MFC实现了对应用程序概念的封装,把类、类的继承、动态约束、类的关系和相互作用等封装起来。这样封装的结果对程序员来说,是一套开发模板(或者说模式)。针对不同的应用和目的,程序员采用不同的模板。例如,SDI应用程序的模板,MDI应用程序的模板,规则DLL应用程序的模板,扩展DLL应用程序的模板,OLE/ACTIVEX应用程序的模板,等等。这些模板都采用了以文档-视为中心的思想,每一个模板都包含一组特定的类。典型的MDI应用程序的构成将在下一节具体讨论。为了支持对应用程序概念的封装,MFC内部必须作大量的工作。例如,为了实现消息映射机制,MFC编程框架必须要保

42、证首先得到消息,然后按既定的方法进行处理。又如,为了实现对DLL编程的支持和多线程编程的支持,MFC内部使用了特别的处理方法,使用模块状态、线程状态等来管理一些重要信息。虽然,这些内部处理对程序员来说是透明的,但是,懂得和理解MFC内部机制有助于写出功能灵活而强大的程序。总之,MFC封装了Win32 API,OLE API,ODBC API等底层函数的功能,并提供更高一层的接口,简化了Windows编程。同时,MFC支持对底层API的直接调用。MFC提供了一个Windows应用程序开发模式,对程序的控制主要是由MFC框架完成的,而且MFC也完成了大部分的功能,预定义或实现了许多事件和消息处理,

43、等等。框架或者由其本身处理事件,不依赖程序员的代码;或者调用程序员的代码来处理应用程序特定的事件。MFC是C+类库,程序员就是通过使用、继承和扩展适当的类来实现特定的目的。例如,继承时,应用程序特定的事件由程序员的派生类来处理,不感兴趣的由基类处理。实现这种功能的基础是C+对继承的支持,对虚拟函数的支持,以及MFC实现的消息映射机制。2.4 MFC编程框架用AppWizard产生一个MDI工程t(无OLE等支持),AppWizard创建了一系列文件,构成了一个应用程序框架。这些文件分四类:头文件(.h),实现文件(.cpp),资源文件(.rc),模块定义文件(.def),等。 2.4.1 构成

44、应用程序对象下图解释了该应用程序的结构,箭头表示信息流向。 图2 MDI应用程序的构成从CWinApp、CDocument、CView、CMDIFrameWnd、CMDIChildWnd类对应地派生出CTApp、CTDoc、CTView、CMainFrame、CChildFrame五个类,这五个类的实例分别是应用程序对象、文档对象、视对象、主框架窗口对象和文档边框窗口对象。主框架窗口包含了视窗口、工具条和状态栏。对这些类或者对象解释如下。 (1)应用程序类 应用程序类派生于CWinApp。基于框架的应用程序必须有且只有一个应用程序对象,它负责应用程序的初始化、运行和结束。 (2)边框窗口类 如

45、果是SDI应用程序,从CFrameWnd类派生边框窗口类,边框窗口的客户子窗口(MDIClient)直接包含视窗口;如果是MDI应用程序,从CMDIFrameWnd类派生边框窗口类,边框窗口的客户子窗口(MDIClient)直接包含文档边框窗口。 如果要支持工具条、状态栏,则派生的边框窗口类还要添加CToolBar和CStatusBar类型的成员变量,以及在一个OnCreate消息处理函数中初始化这两个控制窗口。 边框窗口用来管理文档边框窗口、视窗口、工具条、菜单、加速键等,协调半模式状态(如上下文的帮助(SHIFT+F1模式)和打印预览)。 (3)文档边框窗口类 文档边框窗口类从CMDICh

46、ildWnd类派生,MDI应用程序使用文档边框窗口来包含视窗口。 (4)文档类 文档类从CDocument类派生,用来管理数据,数据的变化、存取都是通过文档实现的。视窗口通过文档对象来访问和更新数据。 (5)视类 视类从CView或它的派生类派生。视和文档联系在一起,在文档和用户之间起中介作用,即视在屏幕上显示文档的内容,并把用户输入转换成对文档的操作。 (6)文档模板类 文档模板类一般不需要派生。MDI应用程序使用多文档模板类CMultiDocTemplate;SDI应用程序使用单文档模板类CSingleDocTemplate。 应用程序通过文档模板类对象来管理上述对象(应用程序对象、文档对

47、象、主边框窗口对象、文档边框窗口对象、视对象)的创建。 2.4.2 构成应用程序的对象之间的关系图3 应用程序的对象之间的关系用图的形式可直观地表示所涉及的MFC类的继承或者派生关系,如图所示意。 图所示的类都是从CObject类派生出来的;所有处理消息的类都是从CCmdTarget类派生的。如果是多文档应用程序,文档模板使用CMultiDocTemplae,主框架窗口从CMdiFarmeWnd派生,它包含工具条、状态栏和文档框架窗口。文档框架窗口从CMdiChildWnd派生,文档框架窗口包含视,视从CView或其派生类派生。2.4.3 构成应用程序的文件通过上述分析,可知AppWizard产生的MDI框架程序的内容,所定义和实现的类。下面,从文件的角度来考察AppWizard生成了的源码和作用什么。表1列出了AppWizard所生成的头文件,表2列出了了AppWizard所生成的实现文件及其对头文件的包含关系。 表1 AppWizard所生成的头文件表2 AppWizard所生成的实现文件 从表2中的包

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服