2023年虚拟现实与仿真实验报告.pdf
《2023年虚拟现实与仿真实验报告.pdf》由会员分享,可在线阅读,更多相关《2023年虚拟现实与仿真实验报告.pdf(32页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、合 肥 工 业 大 学计 算 机 与 信 息 学 院实 验 报 告课 程:虚拟现实与仿真技术专业班级:计算机科学与技术112 班学 号:202324 9 7姓 名:谢云飞实验一一.实验名称从 3Dm a x 8 中导出m esh并添加me s h 到场景。二.实验过程或实验程序(增长的代码及代码注解)2.1 启动 3D max1.在安装有3Dma x 8 的计算机上,可以使用两种不同的方法来启动3Dma x 8:(1)在桌面上双击“3Dmax8”图标(2)点 击“开始”菜单,在“程序”中的选择“3Dm ax8”2.观测3D m ax8主窗口的布局。3Dma x 8 重要由若干元素组成:菜单栏、
2、工具栏、以及停靠在右边的命令面板和底部的各种工具窗口2.2使用3 D ma x 8建模并导出mes h2.2.1 导出m e s h 的环节如下:1.启动 3 D max82.在停靠在右边的命令面板中,点击几何体按钮93.选择标准几何体4.在对象类型中选择对象(如:长方体),在“前”视口中,通过单击鼠标左键,创建出模型5.在工具栏中单击“材质编辑器”按钮数,通过上步操作,可 启 动“材质编辑器”对话框6.在“材质编辑器”对话框中,点击漫反射旁方形按钮I,进 入 到“材质/贴图浏览器”7.在“材质/贴图浏览器”中选择位图,鼠标左键双击位图8.弹出选择位图图像文献对话框,从本地电脑中选择一张图片9
3、.选择好图片,在材质编辑器对话框中,点击将材质指令给选定对象%10.点击菜单栏上的oFusion按钮小臼。n,在弹出的菜单栏中选择Export Scene1 1.选择文献夹并输入文献名q iu,点击保存,在弹出的对话框中勾选Copy Textures,点击Export按钮,此时mes h 文献已成功导出2.3导出的mesh文献放入到指定位置1.找至!mes h 文献,把 mesh文献放到当前电脑的Ogre S D K 的 models中,以我的电脑为例,OgerSDK放在C 盘中2.打开C 盘,找至ij Og r e SDK,打开OgreS D K,找到media,打开media文献夹,找到m
4、 o del s,打开mo d els文献夹,将mesh文献复制到此文献夹中3 .将导 出 m esh文献附带的材质 文 献 qiu.mate r i a 1放 到 Og re S D K 的 sc r ipts(C:OgreSDKme d i a m a t erialssc r i p ts)中4.将导出me s n 文献时同时导出的图片放到Og r eSDK的 t extu r es(C:0greSDKm e dia mate r ialst e x tures)中2.4 mesh文献导入到场景中2.4.1 me s h 文献导入到场景中环节:1.启动 vs 2 0 232.在“文献”菜
5、单中选择“打开”,然后单击“项目/解决方案”3.找到项目MFCOgre 1 ,选择MFC Ogre 1.s In,点击打开按钮4.打开MFC0 gr e 1 View,h,创建节点变量,S c eneNode*nodel(MFCOg r el View.h 中的第55行),创建实体变量E n t i t y*e n t 1(MFC Ogre 1 V iew.h中的第57行);5.打开MFCOg r e IV i ew.c p p,在M FCO g r e IVi e w.cpp的构造函数中对创建的节点和实体对象初始化 nod e 1 (NULL)、e n t l(NULL)(在 MFCOgre
6、IVi e w.c pp 的第 37行和第39行)6.获取根节点的子节点,并将其赋值给节点n od e I(MFCOgrel V ie w.c p p 的 第 22 5行)7.给创建的实体对象en t 1赋 值(M FCOg re 1 View,c p p 的第2 2 4 行)8.设立节点的位置(MFCOg r e IVie w.c p p 的第226行)9.将实体附在节点上(M FC O grel View,c p p 的第2 2 7 行)voi d CMFCOgr e 1 View::Creat e E n ti t y(void)entl=m_pSceneMan a ge r creat
7、eEnti t y(”S p hereH,nq i u.mes h“);/获取实体对象,第一个参数是实体的名字,第二个参数是要导入的mesh文献no d e 1 =m_ p See n eMa n a g e r-getR o o t Sc e neNode()createC h ildS ceneN od e();/创建结点n o del transla t e(Vec t or 3(20,0,30);设立实体的位置n o del-attachO b j e ct(e n tl);/将实体附在节点上e n t l-s e t M a teria 1 Name(E x a m p 1 e s/
8、C hromel 0);/设立实体的材质2.5生成项目使用“生成项目 功能可以将程序的源代码文献编译为可执行的二进制文献,方法十分简朴:在“生成”菜单中选择“生成解决方案在项目生成过程中,“输出”窗口会实时显示生成的进度和结果。假如源代码中不包含语法错误,会在最后提醒生成成功,如下图所示:1 正在编译奥源1 M icrosoft(R)Windows(R)Resource Compiler Version 6.0.5724.0iX opyright(C)M icrosoft Corporation.All rights reserved.1 正在链接.1 正在嵌入清单 生成日志俣存在“fi 生:
9、e:MFC。gr e 1 MFC。gr e 1 D ebugBui 1 dL。m.htm”lMFCOgrel-0个错误,8个警告=全部重新生成:成 功1个,失 败。个,跳 过0个=假如源代码中存在语法错误,输出”窗口会输出相应的错误信息(涉及错误所在文献的途径,错误在文献中的位置,以及错误因素),并在最后提醒生成失败。此时在“输出”窗口中双击错误信息所在的行,OS L a b会使用源代码编辑器打开错误所在的文献,并自动定位到错误相应的代码行。可以在源代码文献中故意输入一些错误的代码(例如删除一个代码行结尾的分号),然后再次生成项目,然后在“输出”窗口中双击错误信息来定位存在错误的代码行,将代码
10、修改对的后再生成项目。2.6执行项目在MFCOg r e l中选择“调试”菜单中的“开始执行(不调试)”,可以执行刚刚生成的程序,运营出实验规定的结果。三.实验结果(涉及必要的截图)3 d m a x中创建实体球模 型:添 加m es h到场景中后:注释:由于增长了九个球体,所 以 相 应 代 码 有 所 改 变。具体如下(两例,其它七个相同):e n t 3 =m _ p S c e n e Ma n a g e r-c r e a t e E n t i t y (Z/S p h e r e l/z,H q i u.m e s h);/获取实体对象,第一个参数是实体的名字,第二个参数是要导
11、入的m e s h文献n o d e 3 =m p S c e n e M a n a g e r-g e t Ro o t S e e n e N o d e()-c r e a t e C h i 1 d S c e n e N o de ();/创建结点n o d e 3 -t r a n s 1 a t e(V e c t o r 3 (2 0,2 0,3 0);设立实体的位置n o d e 3-a t t a c h O b j e c t (e n t 3);将实体附在节点上e n t 3-s e t Ma t e r i a l N a m e(z,E x a m p l e s
12、 /C h r o m e l );设立实体的材质e n t 4=m _ p S c e n e M a n a g e r c r e a t e E n t i t y (S p h e r e 4Z,,,zq i u .m e s h);/获取实体对象,第一个参数是实体的名字,第二个参数是要导入的m e s h文献n o d e 4 =m p S c e n e Ma n a g e r g e t Ro o t S c e n e N o d e ()-c r e a t e C h i l d S c e ne N o d e ();/创建结点n o d e 4 t r a n s
13、l a t e (V e c t o r 3 (-2 0,4 0,3 0);设立实体的位置n o d e 4-a t t a c h 0 b j e c t (e n t 4);/将实体附在节点上e n t 4 -s e t Ma t e r i a l N a m e (E x a m p 1 e s /C h r o m e 1 );设立实体的材质四.实验体会通过本次实验,不仅复习了 3dm a x 模型的创建过程,我还知道了对模型的导出,以及添加到ogre模型库中,并能通过看代码,自己添加实体模型到场景中,更改模型的材质。此外,我对。rge也有了一定的了解,知道了在V S里面配置库目录,
14、可以把场景转到o r g e里面展示。这只是实验的开始,我希望随着后面的学习可以对其有进一步的掌握。实验二实验名称键盘输入控制摄像机的移动。二.实验过程或实验程序(增长的代码及代码注解)2.1添加按键消息响应1 .在菜单栏中选择视图2 .点击视图,在弹出的菜单窗口中,选择类视图3.在类视图中,选择类MFC Og relView4 .再次选择菜单栏中的视图,在菜单的菜单窗口中,选择其他窗口5.在其他窗口中,选择属性窗口6.在属性窗口中,点击消息按钮7.找至ij WM_KEYD0WN,添加OnKeyDown()消息响应函数2.2在 On KeyDown()消息响应函数中,添加按键控制1.找 至(I
15、 MFC O g re 1 Vi e w.cpp 的 o n K e y D own()(MFCO g r e 1 Vie w.cpp 的第 296行)2.创建一个 3 维变量 V ecto r3 t rans-V ector 3:ZERO;3.使用s wit c h 语句,判断用户按下的按键4.假如用户按下的是A键,将变量t ran s 的 x 坐标减1 0,然后将摄像机移动到当前的Iran s坐标处(注:按键消息获取的都是大写字母),则摄像机向左移动,代码如下:c a seA:tra n s.x-1 0;m_pC a m e ra-moveRela t ive(tr a n s);b r
16、e a k;5.假如用户按下的是D 键,将变量t ra n s 的 x 坐 标 加 1 0,然后将摄像机移动到当前的trans坐标处(注:按键消息获取的都是大写字母),则摄像机向左移动c aseD:trans,x+=1 0;m_ pC a mer a-mo v eRe 1 at i ve(t ra n s);br e ak;6.实现其它移动和旋转的代码如下:caseG:trans.y-=10;m_ p C a mera-mo v e R e 1 at i ve(t r an s);向下移动bre a k;ca s e T:t r a ns.y+=10;mpCam e ra -moveR e l
17、ative(t r ans);向上移动c as e z W :trans.z-=1 0;mpCam e ra-m o veRelative(t ran s);向前移动bre a k;caseS*:tran s.z+=1 0;m_pCam e ra-moveRelat i ve(tr a ns);/向后移动bre a k;c a seM1:C reateA n imatio n(M y An i m a tio n );/模型曲线移动b reak;cas e Q:*pdegr e e=0.1 ;m_pCame r ayaw(*pde g ree);/Y 旋转br e ak;ca s e E:*p
18、 d egree=0.1;m_p C amera-pit c h(*p degr e e);/X 旋转b reak;case R*pdegr e e=0.1;m_ p Camer a r oll(*pdegree);/Z 旋转b r eak;2.3生成项目使用“生成项目 功能可以将程序的源代码文献编译为可执行的二进制文献,方法十分简朴:在“生成”菜单中选择“生成解决方案在项目生成过程中,“输出”窗口会实时显示生成的进度和结果。假如源代码中不包含语法错误,会在最后提醒生成成功,如下图所示:1 正在编译奥源1 M icrosoft(R)Windows(R)Resource Compiler Ver
19、sion 6.0.5724.0iX opyright(C)M icrosoft Corporation.All rights reserved.1 正在链接.1 正在嵌入清单 生成日志俣存在“fi 生:e:MFC。gr e 1 MFC。gr e 1 D ebugBui 1 dL。m.htm”lMFCOgrel-0个错误,8个警告=全部重新生成:成 功1个,失 败。个,跳 过0个=假如源代码中存在语法错误,输出”窗口会输出相应的错误信息(涉及错误所在文献的途径,错误在文献中的位置,以及错误因素),并在最后提醒生成失败。此时在“输出”窗口中双击错误信息所在的行,OS L a b 会使用源代码编辑器
20、打开错误所在的文献,并自动定位到错误相应的代码行。可以在源代码文献中故意输入一些错误的代码(例如删除一个代码行结尾的分号),然后再次生成项目,然后在“输出”窗口中双击错误信息来定位存在错误的代码行,将代码修改对的后再生成项目。2.4执行项目在MFCOgre 1 中选择“调试”菜单中的“开始执行(不调试)”,可以执行刚刚生成的程序,运营出实验规定的结果三.实 验 结 果(涉及必要的截图)通过控制相应的按键。可以按规定实现摄像机的视角的转变。四.实验体会本次实验重要是通过修改代码改变摄像机的视角,使之可以左右移动。一方面需要对其坐标的情况掌握,这是基础。然后才干修改代码。由于左右移动实现起来比较简
21、朴,后面又做了上下前后一起围绕三个坐标的旋转移动。通过本次实验我对o g re以及其下的编程有了更进一步的把握,顿感收获颇丰。实验三实验名称按 下 M 键,控制实体球沿着一条直线运动。二.实验过程或实验程序(增长的代码及代码注解)2.1 添加动画1.在 MFCOgreVi e w l.h 中创建 void Crea t e Anima t ion(Ogre::S t r ing MyAn ima t i o n);(MFCOgreViewl 中第 77 行)2.创建一个全局变量 AnimationSta t e*as(MFCOgreView 1.cpp 中第 17 行)3.实现 v o id
22、C reate A nim a ti o n(Ogre:St r i n g My A n i m a t i on);(MFCOgrel View,cp p 中第 3 19 行)4.判断动画是否存在,假如动画存在,删除己有的动画5.使用sceneManage r 来创建一个a nima t i on,同时指定动画的名字和帧的长度6.设立该段动画的关键帧间帧的插值方式,这里使用线性7 .使 用 animation创建为每个要驱动的node创建一个tra c k,比如这里我们只想让一个结点(n o d e,比如它上面挂着摄像机)运动,就只为他创建一个tr a c k 就行了,第一个参数是这个 t
23、rack的编号8.对于每个track创建它的每个关键帧9.设立该帧的时间点1 0.设立该帧处这个结点的位置和其他几何状态11.设立动画运动状态12.在项目解决方案资源管理器中,找到MFCOgre 113.右击MFC Ogre 1 ,在弹出的界面中,选择添加类1 4.选择M FC类,点击添加,在类名中输入MyF r a meListener15.在 MyFrameList e n e r.h 中类MyFrameLi s tener 继承 F r am e List e ne r1 6.在 MyFrame L i st e ner.h 中添加 virtual b ool f r a meS t a
24、 r t ed(c o n s t FrameEvent&evt);(在 MyF r ameLi s t ener.h 的第 1 2 行)1 7.在 MyFrameLi s tene r.cpp 中重写 frame S tart()函数(在 MyFrameListene r.cpp 第 14行),代码如下:boo 1 MyFrameL i s tener:f rame S t ar t ed(c o n s t F rame E ven t&evt)(if(N U LL!=as)(as-ad d Tim e(e v t.timeSin c e L as t F ra m e);)ret u r
25、 n true;)1 8.在MFC Ogre 1 View.c p p的构造函数中创建关联监听类对象(m_p Roo t-ad dFrameLi s te n e r(new MyFrameLis t en e r();)(在 MFC 0 grel Vi e w.cp p 第 5 0 行)1 9.找到M FC O gr e 1 Vie w.c p p o nKe y D o wn()(MFCOgre 1 Vie w.cpp 的第 2 96 行)使 用s witch语句,判断用户按下的按键,代码如下:c a s e M:CreateAnim a tion(MyA n imation);break
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 虚拟现实 仿真 实验 报告
限制150内