虚拟现实与仿真技术-实验报告20

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验一一.实验名称Ogre部分仿真实验二.实验过程或实验程序(增加的代码及代码注解)1.从3Dmax8中导出mesh并添加mesh到场景1.1启动3Dmax1.在安装有3Dmax8的计算机上,可以使用两种不同的方法来启动3Dmax8:(1)在桌面上双击“3Dmax8”图标(2)点击“开始”菜单,在“程序”中的选择“3Dmax8”2.观察3Dmax8主窗口的布局。3Dmax8主要由若干元素组成:菜单栏、工具栏、以及停靠在右边的命令面板和底部的各种工具窗口。1.2使用3Dmax8建模并导出mesh1.2.1导出mesh的步骤如下:1.启动3Dmax82.在停靠在右边的命令面板中,点击几何体按钮3.选择标准几何体4.在对象类型中选择对象(如:长方体),在“前”视口中,通过单击鼠标左键,创建出模型5.在工具栏中单击“材质编辑器”按钮,通过上步操作,可开启“材质编辑器”对话框6.在“材质编辑器”对话框中,点击漫反射旁方形按钮,进入到“材质/贴图浏览器”7.在“材质/贴图浏览器”中选择位图,鼠标左键双击位图8.弹出选择位图图像文件对话框,从本地电脑中选择一张图片9.选择好图片,在材质编辑器对话框中,点击将材质指令给选定对象10.点击菜单栏上的oFusion按钮,在弹出的菜单栏中选择ExportScene11.选择文件夹并输入文件名qiu,点击保存,在弹出的对话框中勾选CopyTextures,点击Export按钮,此时mesh文件已成功导出1.3导出的mesh文件放入到指定位置1.找到mesh文件,把mesh文件放到当前电脑的OgreSDK的models中,以我的电脑为例,OgerSDK放在C盘中;2.打开C盘,找到OgreSDK,打开OgreSDK,找到media,打开media文件夹,找到models,打开models文件夹,将mesh文件复制到此文件夹中;3.将导出mesh文件附带的材质文件qiu.material放到OgreSDK的scripts(C:\OgreSDK\media\materials\scripts)中;4.将导出mesn文件时同时导出的图片放到OgreSDK的textures(C:\OgreSDK\media\materials\textures)中。1.4mesh文件导入到场景中1.4.1mesh文件导入到场景中步骤:1.启动vs20082.在“文件”菜单中选择“打开”,然后单击“项目/解决方案”3.找到项目MFCOgre1,选择MFCOgre1.sln,点击打开按钮4.打开MFCOgre1View.h,创建节点变量,SceneNode*node1(MFCOgre1View.h中的第55行),创建实体变量Entity*ent1(MFCOgre1View.h中的第57行);5.打开MFCOgre1View.cpp,在MFCOgre1View.cpp的构造函数中对创建的节点和实体对象初始化node1(NULL)、ent1(NULL)(在MFCOgre1View.cpp的第37行和第39行)6.获取根节点的子节点,并将其赋值给节点node1(MFCOgre1View.cpp的第225行)7.给创建的实体对象ent1赋值(MFCOgre1View.cpp的第224行)8.设置节点的位置(MFCOgre1View.cpp的第226行)9.将实体附在节点上(MFCOgre1View.cpp的第227行)1.5生成项目使用“生成项目”功能可以将程序的源代码文件编译为可执行的二进制文件,方法十分简单:在“生成”菜单中选择“生成解决方案”。在项目生成过程中,“输出”窗口会实时显示生成的进度和结果。如果源代码中不包含语法错误,会在最后提示生成成功,如下图所示:1.6执行项目在MFCOgre1中选择“调试”菜单中的“开始执行(不调试)”,可以执行刚刚生成的程序,运行出实验要求的结果。2.键盘输入控制摄像机的移动2.1添加按键消息响应1.在菜单栏中选择视图2.点击视图,在弹出的菜单窗口中,选择类视图3.在类视图中,选择类MFCOgre1View4.再次选择菜单栏中的视图,在菜单的菜单窗口中,选择其他窗口5.在其他窗口中,选择属性窗口6.在属性窗口中,点击消息按钮7.找到WM_KEYDOWN,添加OnKeyDown()消息响应函数2.2在OnKeyDown()消息响应函数中,添加按键控制1.找到MFCOgre1View.cpp的onKeyDown()(MFCOgre1View.cpp的第296行)2.创建一个3维变量Vector3trans=Vector3::ZERO;2.使用switch语句,判断用户按下的按键3.如果用户按下的是A键,将变量trans的x坐标减10,然后将摄像机移动到当前的trans坐标处(注:按键消息获取的都是大写字母),则摄像机向左移动,代码如下:case'A':trans.x-=10;m_pCamera-moveRelative(trans);break;4.如果用户按下的是D键,将变量trans的x坐标加10,然后将摄像机移动到当前的trans坐标处(注:按键消息获取的都是大写字母),则摄像机向左移动case‘D':trans.x+=10;m_pCamera-moveRelative(trans);break;2.3生成项目使用“生成项目”功能可以将程序的源代码文件编译为可执行的二进制文件,方法十分简单:在“生成”菜单中选择“生成解决方案”。在项目生成过程中,“输出”窗口会实时显示生成的进度和结果。如果源代码中不包含语法错误,会在最后提示生成成功,如下图所示:2.4执行项目在MFCOgre1中选择“调试”菜单中的“开始执行(不调试)”,可以执行刚刚生成的程序,运行出实验要求的结果。3.添加动画3.1添加动画1.在MFCOgreView1.h中创建voidCreateAnimation(Ogre::StringMyAnimation);(MFCOgreView1中第77行)2.创建一个全局变量AnimationState*as(MFCOgreView1.cpp中第17行)3.实现voidCreateAnimation(Ogre::StringMyAnimation);(MFCOgre1View.cpp中第319行)4.判断动画是否存在,如果动画存在,删除已有的动画5.使用sceneManager来创建一个animation,同时指定动画的名字和帧的长度6.设置该段动画的关键帧间帧的插值方式,这里使用线性7.使用animation创建为每个要驱动的node创建一个track,比如这里我们只想让一个结点(node,比如它上面挂着摄像机)运动,就只为他创建一个track就行了,第一个参数是这个track的编号8.对于每个track创建它的每个关键帧9.设置该帧的时间点10.设置该帧处这个结点的位置和其他几何状态11.设置动画运动状态12.在项目解决方案资源管理器中,找到MFCOgre113.右击MFCOgre1,在弹出的界面中,选择添加类14.选择MFC类,点击添加,在类名中输入MyFrameListener15.在MyFrameListener.h中类MyFrameListener继承FrameListener16.在MyFrameListener.h中添加virtualboolframeStarted(constFrameEvent&evt);(在MyFrameListener.h的第12行)17.在MyFrameListener.cpp中重写frameStart()函数(在MyFrameListener.cpp第14行),代码如下:boolMyFrameListener::frameStarted(constFrameEvent&evt){if(NULL!=as){as-addTime(evt.timeSinceLastFrame);}returntrue;}18.在MFCOgre1View.cpp的构造函数中创建关联监听类对象(m_pRoot-addFrameListener(newMyFrameListener());)(在MFCOgre1View.cpp第50行)19.找到MFCOgre1View.cpp的onKeyDown()(MFCOgre1View.cpp的第296行)使用switch语句,判断用户按下的按键,代码如下:case'M':CreateAnimation(MyAnimation);break;三.实验结果(包括必要的截图)根据前面的实验步骤,最终得到下面的截图:1.将桌子这个实体模型导入到Ogre中,如下图所示:该截图说明mesh文件添加到场景中成功。2.将场景分别绕X轴、Y轴和Z轴旋转,如下图所示(1)绕X轴旋转:(2)绕Y轴旋转:(2)绕Z轴旋转:同样可以通过添加如下代码控制摄像机的移动:case'A':trans.x-=10;m_pCamera-moveRelative(trans);break;因此,在执行程序的时候,按键“A”可以实现场景的向左移动;case‘D':trans.x+=10;m_pCamera-moveRelative(trans);break;因此执行程序的时候,按键“D”可以实现场景的向右移动。四.实验体会1、思考题解答:(1)如何控制摄像机的上下移动、前后移动?解:控制摄像机的上下移动可以通过控制摄像机的Z坐标,例如要是想要向上移动,则可以使tran.z+=10,向下移动的话则可以使tran.z-=10;控制摄像机的前后移动则需要改变摄像机的Y坐标,例如要是想要向前移动,则可以使tran.y+=10,向后移动的话则可以使tran.y-=10。(2)如何控制摄像机的旋转?(函数voidpitch(constRadian&angle);//绕X轴旋转函数voidyaw(constRadian&angle);//绕Y轴旋转函数voidroll(constRadian&angle);//绕Z轴旋转)解:控制摄像机的旋转已经在程序中实现,如上面的截图所示,通过函数voidpitch(constRadian&angle),使得摄像机绕轴X旋转,具体每次旋转的角度可以在函数的参数中进行设置;通过函数voidyaw(constRadian&angle),使得摄像机绕轴Y旋转;通过函数voidroll(constRadian&angle),使得摄像机绕轴Z旋转。(3)按下M键,实体球可以沿着直线运动,通过键盘控制实体球,实体球是否可以沿着曲线运动?解:通过键盘控制实体球,实体球是可以沿着曲线运动的,只需要在相应的控制按键的开关语句中调用一个能够让实体球沿着曲线运动的函数,该实体球的运动曲线可以设置为BS曲线等等。2、实验感想通过本次实验,我初步认识和了解了Ogre这款软件,该软件能够创建三维场景,所以被用于游戏等等场合中。本次实验,我自己按照实验指导书一步步的从用3Dmax创建三维实体模型,然后生成mesh文件,将mesh文件导入到Ogre场景中,给实体模型添加材质,并且通过添加相应的代码使得实体球能够运动起来,添加相应的代码使得场景左右移动、上下移动、前后移动和绕轴旋转等等,这些所有的内容虽然做的不是很漂亮,但是让自己尝试了在Ogre中如何完整的创建简单的三维模型。实验二一.实验名称PathFinder疏散仿真实验二.实验过程或实验程序(增加的代码及代码注解)1、CreateGeometry1.OntheViewmenu,clickUnitsandselectENtodisplaymeasurementsusingtheEnglishsystem.Tospecifysnapgridspacing:1.OntheViewmenu,clickEditSnapGrid....2.IntheSpecifysnapgridspacingmenu,type2.0.Bydefault,lengthunitswillbeinfeet,however,youca

1 / 20
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功