毕业设计(论文)基于OpenGL的下肢运动的虚拟现实仿真的设计与实现.doc

上传人:laozhun 文档编号:3979511 上传时间:2023-03-30 格式:DOC 页数:39 大小:313KB
返回 下载 相关 举报
毕业设计(论文)基于OpenGL的下肢运动的虚拟现实仿真的设计与实现.doc_第1页
第1页 / 共39页
毕业设计(论文)基于OpenGL的下肢运动的虚拟现实仿真的设计与实现.doc_第2页
第2页 / 共39页
毕业设计(论文)基于OpenGL的下肢运动的虚拟现实仿真的设计与实现.doc_第3页
第3页 / 共39页
毕业设计(论文)基于OpenGL的下肢运动的虚拟现实仿真的设计与实现.doc_第4页
第4页 / 共39页
毕业设计(论文)基于OpenGL的下肢运动的虚拟现实仿真的设计与实现.doc_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《毕业设计(论文)基于OpenGL的下肢运动的虚拟现实仿真的设计与实现.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于OpenGL的下肢运动的虚拟现实仿真的设计与实现.doc(39页珍藏版)》请在三一办公上搜索。

1、毕业设计(论文)基于OpenGL的下肢运动的虚拟现实仿真的设计与实现学院(系): 信息工程学院 专业班级: 学生姓名: 指导教师: 学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包括任何其他个人或集体已经发表或撰写的成果作品。本人完全意识到本声明的法律后果由本人承担。作者签名: 年 月 日学位论文版权使用授权书本学位论文作者完全了解学校有关保障、使用学位论文的规定,同意学校保留并向有关学位论文管理部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权省级优秀学士论文评选机构将本学位论文的全部或

2、部分内容编入有关数据进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。本学位论文属于1、保密囗,在 年解密后适用本授权书2、不保密囗 。(请在以上相应方框内打“”)作者签名: 年 月 日导师签名: 年 月 日本科生毕业设计(论文)任务书学生姓名: 专业班级: 指导教师: 工作单位: 设计(论文)题目: 基于OpenGL的下肢运动的虚拟现实仿真的设计与实现设计(论文)主要内容:本文主要研究了一个模拟下肢运动的虚拟环境的设计方法。阐述了在Vc+ 6.0的环境下,用OpenGL语言导入人体下肢三维图形并显示的方法,在此基础上进一步研究对下肢运动的控制,最后通过键盘输入相应的信号使其具

3、有六自由度的运动功能,实现人体下肢运动的仿真。要求完成的主要任务:1. 查阅相关文献资料15篇以上(其中英文文献不少于2篇),完成开题报告。2. 研究在Vc+ 6.0环境下三维图形的显示和运动的控制方法,用OpenGL语言编程实现下肢模型的显示和运动的控制。3. 完成不少于15000字的论文的撰写并完成答辩的相关工作。4. 在设计中完成不少于3张12#图纸的描绘。5. 完成不低于5000汉字(20000英文印刷符)的教师指定的相关文献的英译汉翻译。必读参考资料:1 李清玲,李爽. 基于OpenGL的三维人体运动仿真.计算机仿真,2011年04期.2(美国)施瑞奈尔(Dave Shreiner)

4、.OpenGL编程指南.北京:机械工业出版社,2010.3Cohoon,Davidson. C+ Program DesignAn Introduction to Programming and Object-Oriented Design 3rd Edition,2002.指导教师签名: 系主任签名: 院长签名(章)本科生毕业设计(论文)开题报告1、目的及意义(含国内外的研究现状分析)1.1 研究目的及意义古往今来,疾病一直是伴随着人类的一个重大问题,也倍受全人类的关注,随着科学技术的发展,医疗器械层出不穷,很多人患者可以进行康复训练慢慢痊愈而不用再受着某些疾病的困扰,然而康复训练过程的单一

5、和乏味让很多患者在进行训练时无法继续坚持,而且在训练过程中无法仔细观察自己的状态,缺乏安全感和信心,虚拟现实恰恰弥补了医疗器械的这个缺陷,它可以为患者的康复运动起到激励作用,同时也可提供用户一些简单的机器控制功能。 三维虚拟仿真环境即虚拟现实,就是用计算机生成的一个逼真的虚拟环境,用户可以通过其自然技能通过各种传感设备同虚拟环境中的实体相互作用的一种技术。在虚拟环境中我们可以建立一个三维人体模型,即虚拟人,可以通过各种手段将人在医疗器械作用下的状态实时地反映到虚拟环境中。在虚拟环境中,患者可以更加清晰地观察到自己的运动状况,以便于进行适当的调整以更适合于康复,同时让患者沉浸于一个虚拟的世界中,

6、可以减轻身体的痛苦和康复训练带来的乏味感,具有极大的激励作用。随着虚拟现实技术的发展,使研究者可以直接以人为研究对象,开展各种有意义的人类活动的研究。简单归纳下,它有两方面的优点,一方面,它可以模拟现实环境,模拟真人的运动,以便于研究者能够更加清晰直观地观察研究;另一方面,虚拟环境提供了一个便于测量计算的平台,能够给研究者提供准确的数据信息,给研究者的研究提供了方便。虚拟显示已经成为现阶段国内外计算机科学中的主要研究方向之一,它具有广阔的应用前景,除了用于医疗方面,还可以用于机械工程、军事、教育和空间探索等领域中,在未来的教育、生活和科研中必将发挥重要的作用,虽然本文只研究下肢运动的虚拟环境,

7、但它是研究虚拟人的基础,是不可或缺的一部分。1.2 国内外研究现状国内在虚拟环境的建模和虚拟人的运动控制方面,北京航空航天大学、中国科学院、哈尔滨工业大学以及浙江大学等学校都做了大量的理论研究及实践工作,北京航空航天大学的袁修干等人主要在人机系统仿真中的三维人体建模的方面做了研究;而在人体建模方面,中国科学院计算机技术研究所CAD开放实验室的詹永照等人,给出了以多面体组合建立粗略的人体,用多面体细分割来逼近真实人体曲面的方法,并在建模中考虑了人体的动态特征,为建立人体动画模型创造了条件;在虚拟人的实时运动控制方面,哈尔滨工业大学的贺怀清等人致力于研究虚拟人的实时运动控制,并实现了虚拟人的步行与

8、跑步运动方式;中国科学院的王兆其等人在人体运动生成和控制、人体行为交互方面做了大量的研究,并且利用虚拟人合成技术实现了人体行为交互的主要工作,并将其研究成果应用于聋哑人手语交互,人体行走等方面;浙江大学的庄越挺等人在人体动画方面,提出了一种基于紧身衣和相机定标的新的人体动画技术,在基于视频的运动捕获技术方面有所研究和突破。在国外研究虚拟人运动控制的众多团体中,由蒙特利尔大学Thalmann所带领的LIG实验室是其中比较著名的一支。LIG实验室主要从事人体建模及变形的研究,人的行走、抓取等动作的研究,以及运动控制系统、运动捕获、人体动画工具的开发、人体平衡控制的研究、碰撞检测技术和基于网络的虚拟

9、人的研究等。另一个比较著名的研究团体是宾夕法尼亚大学由Badler领导的人体建模与仿真中心。他们的研究包括参数化的关键帧技术在基于关节虚拟人的模型中的应用、逆向运动学的应用、人体的平衡研究、脊骨的建模、行走模型的建立、运动捕获的研究等。2、基本内容和技术方案OpenGL是一个强大的三维图形开发接口,OpenGL中提供了大量的图形绘制、渲染、修改、显示、运动控制等函数,本次设计需要完成的任务就是在Vc+6.0的开发环境下,利用OpenGL导入人体下肢模型的3DS文件,显示下肢模型并使其在输入信号下做左转、右转、向上抬脚掌、向下压脚掌、脚掌外翻、脚掌外翻这六个动作。本文的主要内容包括:下肢模型建模

10、,OpenGL语言中OpenGL图形库、工作结构、工作过程及动画技术等的简单介绍,基于OpenGL可视化编程,肢模型的导入方法的研究,下肢模型运动学控制策略研究,仿真环境的调试等。利用OpenGL显示下肢模型并控制其运动的方法有很多,有关键帧的方法,但是关键帧需要保存大量的顶点及面片信息,通常要进行大量的计算,比较复杂,不易懂,所以本文提供一种分块运动控制方法,通过改变输入模型各个部分的顶点坐标的方法来改变下肢模型各部分的方向,从而实现各个动作。以下是本文采用的技术方案的大致流程: 3D模型准备:利用3DS MAX这个软件构建一个人体下肢模型,由于本设计主要针对于脚踝康复,只要构建膝盖以下的下

11、肢模型便可,要求骨骼能运动,所以必须得把下肢模型分成两段,即小腿和脚三部分,便于控制。 读入3DS文件。 保存3DS文件信息并绘制3D对象。 使用分块控制的方法控制模型运动:分块载入模型后可分别改变模型的各个部分的顶点坐标,使其能实现各种运动状态 定时扫描键盘输入,实时响应对应的运动 调试运行并加以改进。 3、进度安排第13周:查阅相关文献资料,明确研究内容,了解研究所需理论基础。确定方案,完成开题报告。第45周:熟悉掌握基本理论,完成英文资料的翻译,熟悉开发环境Vc+6.0。第69周:学习OpenGL语言。第1012周:编程实现要求功能,并进行仿真调试。第1315周:完成并修改毕业论文。第1

12、6周:准备论文答辩。4、指导教师意见指导教师签名: 年 月 日目录摘要1Abstract21 绪论31.1 研究背景和意义31.2国内外研究成果31.3研究内容42 系统相关理论研究42.1 虚拟现实概况42.2 Visual C+ 6.0中MFC概况62.2.1 MFC基础62.2.2 MFC程序结构72.2.3 MFC应用程序运行机制112.3 OpenGL概况112.3.1 OpenGL特点和功能112.3.2 OpenGL图形库122.3.3 3DS文件格式122.3.4 基于OpenGL的图形变换技术122.3.5 VC+调用OpenGL简介143 系统方案规划143.1 下肢模型建

13、模方法143.2运动控制方法154 系统实现174.1 下肢模型建模174.2 创建一MFC单文档工程174.3 3DS文件的读入194.4 3D对象的绘制204.5 运动控制214.6 系统设计总流程234.7 仿真结果245 总结与展望275.1 总结275.2展望27参考文献29致 谢30摘要为创造一个具有良好沉浸感和真实感的虚拟现实环境,给进行脚踝康复训练的患者提供动力和信心,让患者减轻康复训练时身体带来的痛苦和训练本身的无聊乏味。本文对虚拟现实的设计方法进行了深入的研究,实现了六自由度下肢的运动仿真,使得虚拟现实中的模型能够根据外界输入的信息而做相应的运动。本文主要利用3DS MAX

14、软件实现下肢模型的建模及其修饰,在Visual C+ 6.0的平台下创建一个MFC单文档工程,构建了一个可视化窗口,在分析了虚拟现实和OpenGL技术的基础上,采用OpenGL技术分层次导入模型,通过OpenGL函数来逐个改变下肢模型各个模块的顶点坐标实现各种运动,即下肢左转、下肢右转、脚掌向上抬起、脚掌向下压、脚掌内翻、脚掌外翻这六个动作,并采用定时扫描的方式检测键盘输入信号,实时地完成相应的运动并提供初始状态恢复功能,最终实现了模型在虚拟现实中的显示和实时运动控制。本文采用3DS MAX和OpenGL相结合设计的三维虚拟仿真环境具有快捷、方便和通用性好等优点,采用的运动控制策略简单易懂,程

15、序结构性强,便于二次开发。关键词:虚拟现实;OpenGL;Visual C+ 6.0;模型;运动控制AbstractCreating a good sense of immersion and realism of the Virtual Reality environment to afford power and confidence to patients who are doing the rehabilitation training can reduce physical suffering and their boring of the training. In this pap

16、erwe studied the method of designing Virtual Reality .We have realized 6DOF motion simulation of lower limb to let the the model in the Virtual Reality move according to the external input information.This article mainly uses the3DS MAX software to build and modify the lower limb model,and then crea

17、te a MFC single document engineering in Visual C + + 6.0 platform to construct a visualization window.After studying the Virtual Reality and OpenGL technology,we import models hierarchically by OpenGL technology,and then we change each module of the vertex coordinates of the lower limb model to real

18、ize all kinds of sports through the OpenGL function . These six movements are left turning, right turning,pitching up, pitching down, ectropion and varus. Detecting of keyboard input signal by the timing scanning mode so that the system can complete such movement timely. This paper finally achieve t

19、he goal that the model displays in the Virtual Reality and have the fuction of real-time motion control.This paper combins the 3DS MAX and OpenGL technology so that it makes the process fast, convenient and good versatility . The method of motion control strategy is simple and easy to understand, th

20、e structure of the program is clear,it is convenient for two times development in the future.Key Words:Virtual Reality;OpenGL;Visual C + + 6.0;model;motion control1 绪论1.1 研究背景和意义古往今来,疾病一直是伴随着人类的一个重大问题,近年来,人口老龄化,交通工具的发展及交通状况的日益拥挤造成的交通事故频发和日常的跌打损伤等原因导致越来越多的人面临着下肢运动障碍所带来的痛苦和不便,因此,健康问题备受人类关注。随着科学技术的发展,各

21、种运动器械和医疗康复器械层出不穷,大量患者可以利用机器进行康复训练慢慢痊愈而不用再受着某些疾病的困扰,然而康复训练过程的单一和乏味让很多患者在进行训练时无法继续坚持,在训练过程中无法详细了解到自己的状态,缺乏安全感和信心,虚拟现实恰恰弥补了医疗器械的这个缺陷。虚拟现实是存在于计算机系统中的逻辑环境,通过输出设备模拟显示现实世界中的三维物体和它们的运动规律和方式,使参与者获得与现实一样的感觉的一个虚拟的境界。在虚拟现实中我们可以建立一个三维人体模型,即虚拟人,可以通过各种手段将人的运动状态实时地反映到虚拟环境中。患者通过虚拟环境可以清晰得看到自己的运动过程以便及时调整运动幅度以更合适康复,它让患

22、者完全沉浸于一个虚拟的世界中,从而淡化了患者的身体痛苦和康复训练带来的乏味,同时也可提供用户一些简单的机器控制功能调整不同阶段训练的难易程度。总之,虚拟现实为患者的康复运动起到了激励的作用。 虚拟现实技术的发展,使研究者可以直接以人为研究对象,开展各种有意义的人类活动的研究。一方面,它可以作为真人的替代者对计算机设计的车辆、工作区域、机器工具等在实际构造前进行人类工效学的评估;在真人无法到达的环境中进行各种精密的、甚至危险的试验;在军事上代替真人接受各种训练;在航空航天上代替真人接受各种训练;在医学上代替真人接受一些矫形手术等等;另一方面,它可以作为我们自身或者其它实际参与者在虚拟环境中的实时

23、表示,在游戏、电影、广告等领域有广泛的用途【1】。虚拟现实具有多感知性、浸没感、交互性和构想性等特点,已经成为现阶段国内外计算机科学中的主要研究方向之一,虽然本文只对虚拟现实模型的控制进行了研究,但它是研究虚拟现实不可或缺的一部分,具有重大的研究意义。1.2国内外研究成果早在60年代初,随着CAD技术的发展,人们就开始研究立体声与三维立体显示相结合的计算机系统。80年代,Jaron Lanier提出了虚拟现实VR(Virtual Reality)的观点,目的在于建立一种新的用户界面,使用户可以置身于计算机所表示的三维空间资料库环境中,并可以通过眼、手、耳或特殊的空间三维装置在这个环境中环游,创

24、造出一种亲临其境的感觉。国内在虚拟现实中人体的建模与运动控制方面,科研人员都做了大量的研究工作。在人体建模方面,任静丽等人对虚拟现实中人体建模的几何建模方法做了详细的探讨2;之后徐桂敏等人做了相应的研究,研究并实现了人体静态建模和人体运动行为建模,其中包括物理建模和几何建模等方法3;在虚拟人的实时运动控制方面,哈尔滨工业大学的贺怀清,洪炳熔等人致力于研究虚拟人的实时运动控制,并实现了虚拟人的步行与跑步运动方式4;中国科学院的王兆其等人在人体运动生成和控制、人体行为交互方面做了大量的研究,并且应用虚拟人合成技术实现了人体行为交互的主要工作,并将其研究成果应用在聋哑人手语交互,人体行走等方面5,6

25、;浙江大学的庄越挺、罗忠祥等人在人体动画方面,提出了一种基于紧身衣和相机定标的新的人体动画技术,在基于视频的运动捕获技术方面有所研究和突破7。在虚拟人的面部行为方面,中国科学院的高文等主要研究与意识行为有关的虚拟人面部图像合成技术。在国外研究虚拟显示中人体运动控制的众多团体中,由蒙特利尔大学Thalmann所带领的LIG实验室是其中比较著名的一支。LIG实验室主要从事人体建模及变形的研究8,人的行走、抓取等动作的研究【9】,以及运动控制系统、运动捕获、人体动画工具的开发、人体平衡控制的研究、碰撞检测技术和基于网络的虚拟人的研究等。另一个比较著名的研究团体是宾夕法尼亚大学由Badler领导的人体

26、建模与仿真中心。他们的研究包括参数化的关键帧技术在基于关节虚拟人的模型中的应用、逆向运动学的应用、人体的平衡研究、脊骨的建模、行走模型的建立、运动捕获的研究、人的冲突检测和纠正以及智能运动规划问题的研究等。加尼福尼亚大学的San Diego 和Jin-Su Kim等人主要从事逆向运动学等虚拟人运动控制方面的研究【10,11】。另外,Wang and Chen最早提出了一种解决逆向运动学CCD(cycliccoordinate descent)算法来解决IK问题,Jeff Lander等人发展了这种算法12。1.3研究内容本文主要利用OpenGL技术在Visual C+ 6.0平台下完成膝盖以下

27、下肢模型的运动仿真的虚拟现实设计,通过输入控制信号使模型能够完成六种运动,主要研究下肢三维模型的建模方法,在 Visual C+ 6.0平台下利用OpenGL技术导入模型的方法以及模型的运动控制策略。本文主要从3DS MAX建模,OpenGL各种相关技术,MFC工程介绍,各模块设计和实现等方面进行阐述。2 系统相关理论研究2.1 虚拟现实概况虚拟现实(Virtual Reality,简称VR,又译作灵境、幻真)是近年来出现的高新技术,也称灵境技术或人工环境。VR是一项综合集成技术,涉及计算机图形学、人机交互技术、传感技术、人工智能等领域,它用计算机生成逼真的三维视、听、嗅觉等感觉,使人作为参与

28、者通过适当装置,自然地对虚拟世界进行体验和交互作用。使用者进行位置移动时,电脑可以立即进行复杂的运算,将精确的3D世界影像传回产生临场感。该技术集成了计算机图形(CG)技术、计算机仿真技术、人工智能、传感技术、显示技术、网络并行处理等技术的最新发展成果,是一种由计算机技术辅助生成的高技术模拟系统。虚拟现实首先是一种可视化界面技术,可以有效地建立虚拟环境,这主要集中在两个方面,一是虚拟环境能够精确表示物体的状态模型,二是环境的可视化及渲染,但它仅是计算机系统设置的一个近似客观存在的环境,是硬件、软件和外围设备的有机组合,为用户提供逼真的三维视感、听感、触感和嗅感的感受,用户可通过自身的技能以6个

29、自由度在这个仿真环境里进行交互操作。虚拟现实的关键技术是传感技术,同时它也离不开视觉和听觉的新型可感知动态数据库技术,可感知动态数据库技术与文字识别、图像理解、语音识别和匹配技术关系密切,并需结合高速的动态数据库检索技术,不仅是利用计算机图形学或计算机成像生成的一幅画面,更重要的是人们可以通过计算机和各种人机界面与机交互,并在精神感觉上进入环境。此外虚拟现实还需结合人工智能,模糊逻辑和神经元技术。虚拟现实的基本特征有以下几点:1)多感知性(Multi-Sensory) 所谓多感知是指除了一般计算机技术所具有的视觉感知之外,还有听觉感知、力觉感知、触觉感知、运动感知,甚至包括味觉感知、嗅觉感知等

30、。理想的虚拟现实技术应该具有一切人所具有的感知功能。由于相关技术,特别是传感技术的限制,目前虚拟现实技术所具有的感知功能仅限于视觉、听觉、力觉、触觉、运动等几种。本文主要针对视觉感知和运动感知。2)浸没感(Immersion)又称临场感,指用户感到作为主角存在于模拟环境中的真实程度。理想的模拟环境应该使用户难以分辨真假,使用户全身心地投入到计算机创建的三维虚拟环境中,该环境中的一切看上去是真的,听上去是真的,动起来是真的,甚至闻起来、尝起来等一切感觉都是真的,如同在现实世界中的感觉一样。本文所设计的虚拟现实系统正是利用浸没感使康复训练患者完全沉浸在虚拟的环境当中,对患者的训练起着激励的作用。3

31、)交互性(Interactivity) 指用户对模拟环境内物体的可操作程度和从环境得到反馈的自然程度(包括实时性)。例如,康复训练的患者下肢做某种动作时,虚拟现实中的下肢模型也跟着做相应的运动。4)构想性(Imagination)强调虚拟现实技术应具有广阔的可想像空间,可拓宽人类认知范围,不仅可再现真实存在的环境,也可以随意构想客观不存在的甚至是不可能发生的环境。如可以在虚拟现实中构造另一种轻松快乐的氛围,使患者在训练时如同进入梦境一般,本文尚未对该特征进行利用。2.2 Visual C+ 6.0中MFC概况2.2.1 MFC基础MFC,微软基础类(Microsoft Foundation C

32、lasses),同VCL类似,是一种应用程序框架,随微软Visual C+ 开发工具发布。该类库提供一组通用的可重用的类库供开发人员使用【14】。MFC中的类可划分为两类:CObject派生类和非CObject派生类。CObject派生类包括基类CObject,应用程序结构类和窗口类,异常类,文件相关类,绘图相关类,打印类,数据库类,网络相关类,数组、列表和印象类。非CObject派生类包括OLE类,支持类,模板收集类,基本数据类,结构类和同步类。本系统所采用的类主要有应用程序结构和窗口类。应用程序结构类主要包括命令相关类(CCmdTarget)、窗口类(CWnd)、文档类(CDocument

33、)、视图类(CView)、框架窗口类(CFrameWnd)、文档模板类(CDocTemplate)、线程基类(CWinTHread)和窗口应用程序类(CWinAPP)等。图2-1列出了应用程序结构类的基本结构。图2-1 应用程序结构类的基本结构文档类(CDocument)用于应用程序数据的管理。文档模板类(CDocTemplate)用于创建文档、视图和框架。线程基类(CWinTHread)提供所有与线程有关的基本操作,可直接使用。窗口应用程序类(CWinAPP)是CWinTHread的间接子类,封装了应用程序初始化、运行、终止等代码。框架窗口类(CFrameWnd)是SID应用程序主框架窗口的

34、基类。视图类(CView)用于显示文档数据并接受用户输入数据,是本次设计必不可少的,也是选择用MFC编程完成本系统设计的主要原因之一。对话框类(CDialog)支持对话框的全部公共操作,其子类主要包括对话框颜色选择、文件选择、字体选择等。由于Windows操作系统自身的复杂性和Windows API所涉及领域的广泛性,面向对象语言C+的重要性得以充分体现。然而,直接针对Windows API进行程序设计有一定的难度,且工作量较大,非常多的C+用户逐渐选择了使用MFC类库,因为MFC类库的一个最重要的特点就是体现了对Windows API的封装,使得Windows应用程序开发更加简明快捷,此外,

35、MFC作为应用程序框架,为Windows应用程序提供了标准化的结构,用户只需向框架结构内添加实现特殊功能的代码,而不必担心框架程序的编写。MFC的这一特性在为用户带来了巨大方便的同时,也使基于MFC的Windows应用程序结构更为清晰,代码更为有效。2.2.2 MFC程序结构通过Visual C+ 6.0应用程序向导(Application Wizard)可以很容易地生成一个MFC应用程序基本框架,本系统只需使用MFC单文档程序即可,用户只需在此基础上添加特定的代码便可以实现预期的功能。通过AppWizard生成的类包括CExTestApp、CExTestDoc、CExTestView、CMa

36、inFrame,他们分别派生于类CWinApp、类CDocument、类CView和类CFrameWnd,又分别生成应用程序对象、文档对象、视图对象和框架窗口对象。应用程序类CExTestApp用于创建应用程序对象,基于框架的应用程序必须有且只有一个应用程序对象,它负责应用程序的初始化、运行和结束。在ExTest.cpp中用如下语句进行了实例化。CExTestApp theApp;在ExTest.h中对类CExTestApp进行了声明,如下所示。class CExTestApp:public CWinApppublic: CExTestApp();public: virtual BOOL In

37、itInstance();/为应用程序提供初始化 afx_msg void OnAppAbout(); DECLARE_MESSAGE_MAP();其中InitInstance的定义在ExTest.cpp中,以下代码是函数InitInstance创建文档模板对象并把它添加到应用程序的模板链表。CSingleDocTemplate* pDocTemplate;pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME,RUNTIME_CLASS(CMyOPGLDoc),RUNTIME_CLASS(CMainFrame), / RUNTIME_CLASS

38、(CMyOPGLView);AddDocTemplate(pDocTemplate);文档模板创建完毕,接着由文档模板创建文档对象、视图对象和框架窗口对象,以下代码实现了该功能。CCommandLineInfo cmdInfo;ParseCommandLine(cmdInfo);if (!ProcessShellCommand(cmdInfo)return FALSE;窗口创建完成之后,函数InitInstance通过调用函数ShowWindow和UpdateWindow来显示窗口,如下所示。m_pMainWnd-ShowWindow(SW_SHOW);m_pMainWnd-UpdateWin

39、dow();return TRUE;文档类CExTestDoc用来管理数据,数据的变化、存取都是通过文档实现的,并且,视图窗口通过文档对象来访问和更新数据,它提供的方法主要有构造方法、操作方法和虚拟方法。构造方法用于创建CExTestDoc类,函数声明如下。CExTestDoc();而操作方法和虚拟方法中OnNewDocument用于创建文档,AssertValid( )主要是通过定义自己的规则,如一些表达式,来判断对象的有效性,Dump( )主要提供一些debug信息。视图类CExTestView在文档和用户之间起中介作用,通过视图类在屏幕上显示文档的内容,并把用户输入转换成对文档的操作。C

40、ExTestView中最重要的就是OnDraw函数,主要完成文档的绘制工作,其代码如下。void CExTestView:OnDraw(CDC* pDC) CExTestDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);RenderScene();视图是将文档中的数据以某种形式向用户呈现,所以每一个文档可以有多个视图,但每个视图只能对应一个确定的文档。视图类的数据成员m_pDocument保存了指向对应文档的指针,视图就通过函数GetDocument获取m_pDocument中的文档对象指针,其代码如下。CExTestDoc*CExTestView:Ge

41、tDocument()ASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CExTestDoc);return (CExTestDoc*)m_pDocument;框架窗口类CMainFrame用于创建客户子窗口、菜单、工具栏和状态栏,为用户提供与应用程序交互的界面。类CFrameWnd提供的方法包括构造方法、初始化方法、操作方法和虚拟方法。构造方法用于创建CFrameWnd类对象,函数声明如下。CFrameWnd();实际操作中经常使用的是类的初始化方法,OnCreate函数用于创建并初始化Windows框架窗口,其代码如下int CMainFrame:OnCr

42、eate(LPCREATESTRUCT lpCreateStruct)if (CFrameWnd:OnCreate(lpCreateStruct) = -1)return -1;if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) |!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)TRACE0(Failed to create to

43、olbarn);return -1; / fail to createif (!m_wndStatusBar.Create(this) |!m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)TRACE0(Failed to create status barn);return -1; / fail to createm_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wnd

44、ToolBar);return 0;PreCreateWindow函数主要功能是注册窗口类,其代码如下。BOOL CMainFrame:PreCreateWindow(CREATESTRUCT& cs)if( !CFrameWnd:PreCreateWindow(cs) )return FALSE;return TRUE;此外,应用程序框架的建立还依靠文档模板类,应用程序通过文档模板类对象来管理应用程序对象、文档对象、视图对象和框架窗口对象的创建。综上所述,应用程序在启动之前就创建了唯一的应用程序对象,应用程序对象创建文档模板对象,文档模板对象创建文档对象和框架窗口对象,框架窗口对象创建视图对

45、象,具体流程如图2-2所示。应用程序对象包含一个文档模板列表,用于存放文档模板对象;文档模板对象包含一个打开文档列表,用于存放已经打开的文档对象;文档对象包含一个视图列表,用于存放显示该文档数据的视图对象,还包含一个指向创建该文档的文档模板对象的指针;框架窗口对象包含一个指向其当前活动的视图的指针;视图是一个子窗口,它还包含一个指向其关联文档的指针。图2-2 应用程序各对象的创建顺序2.2.3 MFC应用程序运行机制Windows程序的进入点是WinMain函数,而不是main函数,应用程序执行时,Windows自动调用应用程序框架内部的WinMain函数,WinMain函数主要完成注册窗口类

46、、建立窗口以及完成其他初始化工作;创建消息循环,根据消息类型调用相应处理函数;检索到退出消息时关闭窗口,终止程序运行。WinMain函数会查找应用程序的一个全局对象,这个对象由CWinApp派生类构造,且只有一个,之后,WinMain函数将调用这个对象的InitInstance成员函数,完成应用程序的初始化工作,接着,WinMain函数调用Run函数,运行应用程序的消息循环,最后,WinMain函数调用ExitInstance函数,退出应用程序。2.3 OpenGL概况2.3.1 OpenGL特点和功能ODenGL实际上是一个开放的三维图形软件包,它独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号