虚拟现实与仿真技术实验分析报告Word文档格式.docx
- 文档编号:20883050
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:21
- 大小:1.20MB
虚拟现实与仿真技术实验分析报告Word文档格式.docx
《虚拟现实与仿真技术实验分析报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《虚拟现实与仿真技术实验分析报告Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
10.点击菜单栏上的oFusion按钮
,在弹出的菜单栏中选择ExportScene
11.选择文件夹并输入文件名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.启动vs2008
2.在“文件”菜单中选择“打开”,然后单击“项目/解决方案”
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.在类视图中,选择类MFCOgre1View
4.再次选择菜单栏中的视图,在菜单的菜单窗口中,选择其他窗口
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;
2.3生成项目
在项目生成过程中,“输出”窗口会实时显示生成的进度和结果。
2.4执行项目
3.添加动画
3.1添加动画
1.在MFCOgreView1.h中创建voidCreateAnimation(Ogre:
StringMyAnimation);
(MFCOgreView1中第77行)
2.创建一个全局变量AnimationState*as(MFCOgreView1.cpp中第17行)
3.实现voidCreateAnimation(Ogre:
(MFCOgre1View.cpp中第319行)
4.推断动画是否存在,假如动画存在,删除已有的动画
5.使用sceneManager来创建一个animation,同时指定动画的名字和帧的长度
6.设置该段动画的关键帧间帧的插值方式,那个地点使用线性
7.使用animation创建为每个要驱动的node创建一个track,
比如那个地点我们只想让一个结点(node,比如它上面挂着摄像机)运动,
就只为他创建一个track就行了,第一个参数是那个track的编号
8.关于每个track创建它的每个关键帧
9.设置该帧的时刻点
10.设置该帧处那个结点的位置和其他几何状态
11.设置动画运动状态
12.在项目解决方案资源治理器中,找到MFCOgre1
13.右击MFCOgre1,在弹出的界面中,选择添加类
14.选择MFC类,点击添加,在类名中输入MyFrameListener
15.在MyFrameListener.h中类MyFrameListener继承FrameListener
16.在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语句,推断用户按下的按键,代码如下:
M'
CreateAnimation("
MyAnimation"
);
break;
三.实验结果(包括必要的截图)
依照前面的实验步骤,最终得到下面的截图:
1.将桌子那个实体模型导入到Ogre中,如下图所示:
该截图讲明mesh文件添加到场景中成功。
2.将场景分不绕X轴、Y轴和Z轴旋转,如下图所示
(1)绕X轴旋转:
(2)绕Y轴旋转:
(2)绕Z轴旋转:
同样能够通过添加如下代码操纵摄像机的移动:
因此,在执行程序的时候,按键“A”能够实现场景的向左移动;
因此执行程序的时候,按键“D”能够实现场景的向右移动。
四.实验体会
1、考虑题解答:
(1)如何操纵摄像机的上下移动、前后移动?
解:
操纵摄像机的上下移动能够通过操纵摄像机的Z坐标,例如要是想要向上移动,则能够使tran.z+=10,向下移动的话则能够使tran.z-=10;
操纵摄像机的前后移动则需要改变摄像机的Y坐标,例如要是想要向前移动,则能够使tran.y+=10,向后移动的话则能够使tran.y-=10。
(2)如何操纵摄像机的旋转?
(函数voidpitch(constRadian&
angle);
//绕X轴旋转
函数voidyaw(constRadian&
//绕Y轴旋转
函数voidroll(constRadian&
//绕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、CreateGeometry
1.OntheViewmenu,clickUnitsandselectENtodisplaymeasurementsusingtheEnglishsystem.
Tospecifysnapgridspacing:
1.OntheViewmenu,clickEditSnapGrid....
2.IntheSpecifysnapgridspacingmenu,type2.0.Bydefault,lengthunitswillbeinfeet,however,youcantypeavaluefollowedbyaunit(e.g.:
"
in"
or"
m"
)andthelengthwillbeconvertedtofeet.
3.ClickOK.
Todefinethedefaultfloorheight:
1.IntheFloorHeightbox(ontheaboveToolbar),type12.0.
Tocreatetheroom:
1.IntheViewtoolbar,clickTopView(
).
2.IntheToolstoolbar,clickAddaRectangularRoom(
3.IntheZPlanebox,type0.0.
4.Inthecoordinateboxesenterthefollowingvalues:
X1:
0.0,Y1:
0.0,X2:
60.0,Y2:
40.0.
5.ClickCreate.
Replicatetheroomtocreatethreefloors.
1.IntheViewtoolbar,clicktheSelectionToolicon
.
2.Selecttheroom.
3.IntheToolstoolbar,clicktheMoveObjectsicon
.
4.SelectCopyMode.
5.IntheCopiesboxtype2.
6.IntheMoveZbox,type12.0.
7.ClickCopy/Move.
8.ClicktheZoomFit
icontorescaletheview.
YourmodelshouldnowlooklikeFigure1.
Figure1:
Thefloorsinthemodel
Todefinethelandings:
1.CreatethefirstlandingatZ=6.0ft.IntheViewtoolbar,clickTopView(
).IntheToolstoolbar,clickAddaRectangularRoom(
).IntheZPlanebox,type6.0.Inthecoordinateboxesenterthefollowingvalues:
-13.5,Y1:
16.0,X2:
-9.5,Y2:
24.0.ClickCreate.
2.Replicatethelanding.IntheViewtoolbar,clicktheSelectionToolicon
.Selectthelanding.IntheToolstoolbar,clicktheMoveObjectsicon.SelectCopyMode.IntheCopiesboxtype1.IntheMoveZbox,type12.0.ClickCopy/Move.
3.Repeatforthelandingontheoppositeside.IntheViewtoolbar,clickTopView(
69.5,Y1:
73.5,Y2:
4.Replicatethelanding.IntheViewtoolbar,clicktheSelectionToolicon
.Selectthelanding.IntheToolstoolbar,clicktheMoveObjectsicon
.SelectCopyMode.IntheCopiesboxtype1.IntheMoveZbox,type12.0.ClickCopy/Move.
YourmodelshouldnowlooklikeFigure2.
Figure2:
Thefloorsandlandingsinthemodel
Toaddthefirststairwayontheleftsideofthebuilding:
1.IntheToolstoolbar,clickCreateStairsbetweentwoedges(
2.IntheStairWidthbox,type44.0in.IntheDoor1WidthboxandtheDoor2Widthbox,type32.0in.
3.Clickonthelowerlandingandpositionthestairtowardsthefrontsideofthelanding.Clickonthelowerfloortocreatethestairsfromthelandingtothelowerfloor,Figure3.
4.UsetheMoveObjectstooltomake1copiesofthestair,separatedby12ftintheZdirection.
5.Addthestairsthatgoupfromthelanding.Clickonthelowerlandingandpositionthestairoppositethefirststairs.Clickonthesecondfloortocreatethestairsfromthelandingtothesecondfloor.
6.UsetheMoveObjectstooltomakeacopyofthestair,separatedby12ftintheZdirection.
7.Repeatontheothersideofthemodel.Thistime,positionthefirststairsonthebacksideofthelanding.
Figure3:
Firststairsonleftsideofbuilding
Addtheexitdoors:
1.Selectthedoortool(
)andintheMaxWidthbox,type120.0in.
2.Placeadooradjacenttobothstairsonthelowestfloor.Thesedoorsarewideenoughthatexit
fromthefirstfloordoesnotaffecttheegresstime.
3.NamethedoorsRightExitandLeftExittoaidinlaterplottingoftheexitratesthrough
eachdoor,Figure4.
Figure4:
TheleftExit
AddOccupants
Toaddoccupants:
1.Selectthefirst(lowest)floor.OntheModelmenuclickAddOccupants.ForOccupantCountselectByNumberandtype100.ClickOK.
2.Repeatforeachfloor,selectingthecorrespondingprofileforeachfloor.Whenfinished,yourmodelshouldlooklikeFigure5
Figure5:
Pathfindermodelwithoccupants
三.实验结果(包括必要的截图)
1、实验最终结果截图显示:
2、仿真截图显示:
3、人群疏散仿真模拟截图显示:
四.实验体会
本次实验要紧确实是熟悉Pathfinder软件的使用,在本次实验的过程中,我觉得这款软件的功能依旧专门强大的,也专门有味,我们能够在那个平台上来进行人群疏散的仿真。
该平台能够专门好的将模型疏散和人群疏散显示出来。
然而我觉得这款软件有一个缺点,那确实是楼梯的边缘检测做的不够细致,直接导致人群疏散的时候下楼的人们的脚能够被看见。
实验三
一.实验名称
基于OGRE的Boids算法实验
二.实验过程或实验程序(增加的代码及代码注解)
3.1基于OGRE的Boids算法实现
1.拷贝MyBoids.h,MyBoids.cpp到E:
\MFCOgre1\MFCOgre1(对应的项目位置)
2.添加MyBoids.h、MyBoids.cpp到工程中
3.在MFCOgre1View.h中引入头文件MyBoids.h(#include"
MyBoids.h"
)
4.在MFCOgre1View.cpp的OnInitialUpdate()函数(OnInitialUpdate()在MFCOgre1View的第115行)中,添加函数AllInit();
5.打开MFCOgre1View.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 虚拟现实 仿真技术 实验 分析 报告