2023年虚拟现实与仿真实验报告

上传人:豆*** 文档编号:166067882 上传时间:2022-10-31 格式:DOC 页数:32 大小:2.46MB
收藏 版权申诉 举报 下载
2023年虚拟现实与仿真实验报告_第1页
第1页 / 共32页
2023年虚拟现实与仿真实验报告_第2页
第2页 / 共32页
2023年虚拟现实与仿真实验报告_第3页
第3页 / 共32页
资源描述:

《2023年虚拟现实与仿真实验报告》由会员分享,可在线阅读,更多相关《2023年虚拟现实与仿真实验报告(32页珍藏版)》请在装配图网上搜索。

1、合肥工业大学计算机与信息学院实验报告课 程:虚拟现实与仿真技术专业班级:计算机科学与技术11-2班 学 号:20232497姓 名: 谢云飞实验一 一. 实验名称从3Dmax8中导出mesh并添加mesh到场景。二. 实验过程或实验程序(增长的代码及代码注解)2.1启动3Dmax1.在安装有3Dmax8的计算机上,可以使用两种不同的方法来启动3Dmax8: (1)在桌面上双击“3Dmax8”图标 (2)点击“开始”菜单,在“程序”中的选择“3Dmax8”2.观测3Dmax8主窗口的布局。3Dmax8重要由若干元素组成:菜单栏、工具栏、以及停靠在右边的命令面板和底部的各种工具窗口2.2 使用3D

2、max8建模并导出mesh2.2.1导出mesh的环节如下:1.启动3Dmax82.在停靠在右边的命令面板中,点击几何体按钮3.选择标准几何体4.在对象类型中选择对象(如:长方体),在“前”视口中,通过单击鼠标左键,创建出模型5.在工具栏中单击“材质编辑器”按钮,通过上步操作,可启动“材质编辑器”对话框6.在“材质编辑器”对话框中,点击漫反射旁方形按钮,进入到“材质/贴图浏览器”7.在“材质/贴图浏览器”中选择位图,鼠标左键双击位图8.弹出选择位图图像文献对话框,从本地电脑中选择一张图片9.选择好图片,在材质编辑器对话框中,点击将材质指令给选定对象10.点击菜单栏上的oFusion按钮,在弹出

3、的菜单栏中选择Export Scene11选择文献夹并输入文献名qiu,点击保存,在弹出的对话框中勾选Copy Textures,点击Export按钮,此时mesh文献已成功导出2.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

4、:OgreSDKmediamaterialsscripts)中4.将导出mesn文献时同时导出的图片放到OgreSDK的textures(C:OgreSDKmediamaterialstextures)中2.4 mesh文献导入到场景中2.4.1 mesh文献导入到场景中环节:1.启动vs20232.在“文献”菜单中选择“打开”,然后单击“项目/解决方案”3.找到项目MFCOgre1,选择MFCOgre1.sln,点击打开按钮4.打开MFCOgre1View.h,创建节点变量,SceneNode *node1(MFCOgre1View.h 中的第55行),创建实体变量 Entity* ent1

5、(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行)

6、void CMFCOgre1View:CreateEntity(void) ent1 = m_pSceneManager-createEntity(Sphere,qiu.mesh);/获取实体对象,第一个参数是实体的名字,第二个参数是要导入的mesh文献 node1 = m_pSceneManager-getRootSceneNode()-createChildSceneNode();/创建结点 node1-translate(Vector3(-20,0,30);/设立实体的位置 node1-attachObject(ent1);/将实体附在节点上 ent1-setMaterialName(E

7、xamples/Chrome1);/设立实体的材质2.5生成项目使用“生成项目”功能可以将程序的源代码文献编译为可执行的二进制文献,方法十分简朴:在“生成”菜单中选择“生成解决方案”。 在项目生成过程中,“输出”窗口会实时显示生成的进度和结果。假如源代码中不包含语法错误,会在最后提醒生成成功,如下图所示:假如源代码中存在语法错误,“输出”窗口会输出相应的错误信息(涉及错误所在文献的途径,错误在文献中的位置,以及错误因素),并在最后提醒生成失败。此时在“输出”窗口中双击错误信息所在的行,OS Lab会使用源代码编辑器打开错误所在的文献,并自动定位到错误相应的代码行。可以在源代码文献中故意输入一些

8、错误的代码(例如删除一个代码行结尾的分号),然后再次生成项目,然后在“输出”窗口中双击错误信息来定位存在错误的代码行,将代码修改对的后再生成项目。2.6执行项目在MFCOgre1中选择“调试”菜单中的“开始执行(不调试)”,可以执行刚刚生成的程序,运营出实验规定的结果。三. 实验结果(涉及必要的截图)3dmax中创建实体球模型:添加mesh到场景中后:注释:由于增长了九个球体,所以相应代码有所改变。具体如下(两例,其它七个相同): ent3 = m_pSceneManager-createEntity(Sphere1,qiu.mesh);/获取实体对象,第一个参数是实体的名字,第二个参数是要导

9、入的mesh文献 node3 = m_pSceneManager-getRootSceneNode()-createChildSceneNode();/创建结点 node3-translate(Vector3(-20,20,30);/设立实体的位置 node3-attachObject(ent3);/将实体附在节点上 ent3-setMaterialName(Examples/Chrome1);/设立实体的材质 ent4= m_pSceneManager-createEntity(Sphere4,qiu.mesh);/获取实体对象,第一个参数是实体的名字,第二个参数是要导入的mesh文献 no

10、de4 = m_pSceneManager-getRootSceneNode()-createChildSceneNode();/创建结点 node4-translate(Vector3(-20,40,30);/设立实体的位置 node4-attachObject(ent4);/将实体附在节点上 ent4-setMaterialName(Examples/Chrome1);/设立实体的材质四. 实验体会 通过本次实验,不仅复习了3dmax模型的创建过程,我还知道了对模型的导出,以及添加到ogre模型库中,并能通过看代码,自己添加实体模型到场景中,更改模型的材质。此外,我对orge也有了一定的了

11、解,知道了在VS里面配置库目录,可以把场景转到orge里面展示。这只是实验的开始,我希望随着后面的学习可以对其有进一步的掌握。实验二 一. 实验名称 键盘输入控制摄像机的移动。二. 实验过程或实验程序(增长的代码及代码注解)2.1添加按键消息响应1.在菜单栏中选择视图2.点击视图,在弹出的菜单窗口中,选择类视图3.在类视图中,选择类MFCOgre1View4.再次选择菜单栏中的视图,在菜单的菜单窗口中,选择其他窗口5.在其他窗口中,选择属性窗口6.在属性窗口中,点击消息按钮7.找到WM_KEYDOWN,添加OnKeyDown()消息响应函数2.2在OnKeyDown()消息响应函数中,添加按键

12、控制1.找到MFCOgre1View.cpp的onKeyDown()( MFCOgre1View.cpp 的第296行)2.创建一个3维变量Vector3 trans = Vector3:ZERO;3.使用switch语句,判断用户按下的按键4.假如用户按下的是A键,将变量trans的x坐标减10,然后将摄像机移动到当前的trans坐标处(注:按键消息获取的都是大写字母),则摄像机向左移动,代码如下:caseA: trans.x -=10; m_pCamera-moveRelative(trans); break;5. 假如用户按下的是D键,将变量trans的x坐标加10,然后将摄像机移动到当

13、前的trans坐标处(注:按键消息获取的都是大写字母),则摄像机向左移动caseD: trans.x +=10; m_pCamera-moveRelative(trans); break;6.实现其它移动和旋转的代码如下:caseG: trans.y -=10; m_pCamera-moveRelative(trans);/向下移动 break; caseT: trans.y += 10; m_pCamera-moveRelative(trans);/向上移动 caseW: trans.z -=10; m_pCamera-moveRelative(trans);/向前移动 break; cas

14、eS: trans.z += 10; m_pCamera-moveRelative(trans);/向后移动 break; caseM: CreateAnimation(MyAnimation);/模型曲线移动 break; caseQ: *pdegree=0.1; m_pCamera-yaw(*pdegree);/Y旋转 break; caseE: *pdegree=0.1; m_pCamera-pitch(*pdegree);/X旋转 break; caseR: *pdegree=0.1; m_pCamera-roll(*pdegree);/Z旋转 break;2.3生成项目使用“生成项目

15、”功能可以将程序的源代码文献编译为可执行的二进制文献,方法十分简朴:在“生成”菜单中选择“生成解决方案”。 在项目生成过程中,“输出”窗口会实时显示生成的进度和结果。假如源代码中不包含语法错误,会在最后提醒生成成功,如下图所示:假如源代码中存在语法错误,“输出”窗口会输出相应的错误信息(涉及错误所在文献的途径,错误在文献中的位置,以及错误因素),并在最后提醒生成失败。此时在“输出”窗口中双击错误信息所在的行,OS Lab会使用源代码编辑器打开错误所在的文献,并自动定位到错误相应的代码行。可以在源代码文献中故意输入一些错误的代码(例如删除一个代码行结尾的分号),然后再次生成项目,然后在“输出”窗

16、口中双击错误信息来定位存在错误的代码行,将代码修改对的后再生成项目。2.4执行项目在MFCOgre1中选择“调试”菜单中的“开始执行(不调试)”,可以执行刚刚生成的程序,运营出实验规定的结果三. 实验结果(涉及必要的截图)通过控制相应的按键。可以按规定实现摄像机的视角的转变。四. 实验体会 本次实验重要是通过修改代码改变摄像机的视角,使之可以左右移动。一方面需要对其坐标的情况掌握,这是基础。然后才干修改代码。由于左右移动实现起来比较简朴,后面又做了上下前后一起围绕三个坐标的旋转移动。通过本次实验我对ogre以及其下的编程有了更进一步的把握,顿感收获颇丰。 实验三 一实验名称按下M键,控制实体球

17、沿着一条直线运动。二实验过程或实验程序(增长的代码及代码注解)2.1添加动画1.在MFCOgreView1.h中创建void CreateAnimation(Ogre:String MyAnimation);( MFCOgreView1 中第77行)2.创建一个全局变量AnimationState *as( MFCOgreView1.cpp 中第17行)3.实现void CreateAnimation(Ogre:String MyAnimation);(MFCOgre1View.cpp中第319行)4.判断动画是否存在,假如动画存在,删除已有的动画5.使用sceneManager来创建一个an

18、imation,同时指定动画的名字和帧的长度6. 设立该段动画的关键帧间帧的插值方式,这里使用线性7. 使用animation创建为每个要驱动的node创建一个track, 比如这里我们只想让一个结点(node,比如它上面挂着摄像机)运动,就只为他创建一个track就行了,第一个参数是这个track的编号8. 对于每个track创建它的每个关键帧9. 设立该帧的时间点10. 设立该帧处这个结点的位置和其他几何状态11.设立动画运动状态12.在项目解决方案资源管理器中,找到MFCOgre113.右击MFCOgre1,在弹出的界面中,选择添加类14.选择MFC类,点击添加,在类名中输入MyFram

19、eListener15.在MyFrameListener.h中类MyFrameListener继承FrameListener16.在MyFrameListener.h中添加virtual bool frameStarted(const FrameEvent &evt);( 在MyFrameListener.h的第12行 )17.在MyFrameListener.cpp中重写frameStart()函数(在MyFrameListener.cpp第14行),代码如下:bool MyFrameListener:frameStarted(const FrameEvent &evt) if(NULL !

20、= as) as-addTime(evt.timeSinceLastFrame); return true;18.在MFCOgre1View.cpp的构造函数中创建关联监听类对象(m_pRoot-addFrameListener(new MyFrameListener();)(在MFCOgre1View.cpp第50行)19. 找到MFCOgre1View.cpp的onKeyDown()( MFCOgre1View.cpp 的第296行)使用switch语句,判断用户按下的按键,代码如下:caseM: CreateAnimation(MyAnimation);break;2.2生成项目使用“生

21、成项目”功能可以将程序的源代码文献编译为可执行的二进制文献,方法十分简朴:在“生成”菜单中选择“生成解决方案”。 在项目生成过程中,“输出”窗口会实时显示生成的进度和结果。假如源代码中不包含语法错误,会在最后提醒生成成功,如下图所示:假如源代码中存在语法错误,“输出”窗口会输出相应的错误信息(涉及错误所在文献的途径,错误在文献中的位置,以及错误因素),并在最后提醒生成失败。此时在“输出”窗口中双击错误信息所在的行,OS Lab会使用源代码编辑器打开错误所在的文献,并自动定位到错误相应的代码行。可以在源代码文献中故意输入一些错误的代码(例如删除一个代码行结尾的分号),然后再次生成项目,然后在“输

22、出”窗口中双击错误信息来定位存在错误的代码行,将代码修改对的后再生成项目。2.3执行项目在MFCOgre1中选择“调试”菜单中的“开始执行(不调试)”,可以执行刚刚生成的程序,运营出实验规定的结果三 实验结果(涉及必要的截图)注释:由于实现了曲线运动,所以相应代码如下,每个球的曲线运动轨迹相同,故只实现了下面的两个球体。 /*判断动画是否存在,假如动画存在,删除已有的动画*/ if (m_pSceneManager-hasAnimation(MyAnimation) m_pSceneManager-destroyAnimation(MyAnimation); /使用sceneManager来创

23、建一个animation,同时指定动画的名字和帧的长度 Animation *pAni = m_pSceneManager-createAnimation(MyAnimation,Real(5); /设立该段动画的关键帧间帧的插值方式,这里使用线性 pAni-setInterpolationMode(Animation:IM_SPLINE); /*使用animation创建为每个要驱动的node创建一个track, 比如这里我们只想让一个结点(node,比如它上面挂着摄像机)运动, 就只为他创建一个track就行了,第一个参数是这个track的编号*/ NodeAnimationTrack *

24、pTrankOne = pAni-createNodeTrack(0,node1); NodeAnimationTrack *pTrankOne1 = pAni-createNodeTrack(1,node3); /对于每个track创建它的每个关键帧 TransformKeyFrame *pKeyFrame = NULL; TransformKeyFrame *pKeyFrame1 = NULL; /设立该帧的时间点 pKeyFrame = pTrankOne-createNodeKeyFrame(0); pKeyFrame1 = pTrankOne1-createNodeKeyFrame(

25、0); /设立该帧处这个结点的位置和其他几何状态 pKeyFrame-setTranslate(Vector3(-20,0,30);/起点坐标 pKeyFrame = pTrankOne-createNodeKeyFrame(1); pKeyFrame-setTranslate(Vector3(20,10,30); pKeyFrame = pTrankOne-createNodeKeyFrame(2); pKeyFrame-setTranslate(Vector3(20,20,-30); pKeyFrame = pTrankOne-createNodeKeyFrame(3); pKeyFram

26、e-setTranslate(Vector3(-20,30,30); pKeyFrame = pTrankOne-createNodeKeyFrame(4); pKeyFrame-setTranslate(Vector3(-20,0,30);/终点坐标 pKeyFrame1-setTranslate(Vector3(-20,20,30);/起点坐标 pKeyFrame1 = pTrankOne1-createNodeKeyFrame(1); pKeyFrame1-setTranslate(Vector3(20,30,30); pKeyFrame1 = pTrankOne1-createNode

27、KeyFrame(2); pKeyFrame1-setTranslate(Vector3(20,40,-30); pKeyFrame1 = pTrankOne1-createNodeKeyFrame(3); pKeyFrame1-setTranslate(Vector3(-20,50,30); pKeyFrame1 = pTrankOne1-createNodeKeyFrame(4); pKeyFrame1-setTranslate(Vector3(-20,20,30);/终点坐标四 实验体会 本次实验重要是控制模型的移动路线,由于规定直线运动比较简朴,所以后面改成了曲线运动。要知道的是,在o

28、gre里面没有可以直接调用的曲线函数,所以只能通过折线运动来模拟曲线运动。如上代码所示,起点和终点之间的点越多,运动越接近曲线。实验四一 实验名称 Pathfinder软件实验二 实验过程或实验程序(增长的代码及代码注解)l Create Geometry1. On the View menu, click Units and select EN to display measurements using the English system.To specify snap grid spacing:1. On the View menu, click Edit Snap Grid.2. In

29、 the Specify snap grid spacing menu, type 2.0. By default, length units will be in feet, however, you can type a value followed by a unit (e.g.: in or m) and the length will be converted to feet.3. Click OK.To define the default floor height:1. In the Floor Height box(on the above Toolbar), type 12.

30、0.To create the room:1. In the View toolbar, click Top View ( ).2. In the Tools toolbar, click Add a Rectangular Room ( ).3. In the Z Plane box, type 0.0.4. In the coordinate boxes enter the following values: X1: 0.0, Y1: 0.0, X2: 60.0, Y2: 40.0. 5. Click Create.Replicate the room to create three fl

31、oors.1. In the View toolbar, click the Selection Tool icon . 2. Select the room.3. In the Tools toolbar, click the Move Objects icon .4. Select Copy Mode. 5. In the Copies box type 2.6. In the Move Z box, type 12.0.7. Click Copy/Move.8. Click the Zoom Fit icon to rescale the view.Your model should n

32、ow look like Figure 1. Figure 1: The floors in the modelTo define the landings:1. Create the first landing at Z=6.0 ft. In the View toolbar, click Top View ( ). In the Tools toolbar, click Add a Rectangular Room ( ). In the Z Plane box, type 6.0. In the coordinate boxes enter the following values: X

33、1: -13.5, Y1: 16.0, X2: -9.5, Y2: 24.0. Click Create.2. Replicate the landing. In the View toolbar, click the Selection Tool icon . Select the landing. In the Tools toolbar, click the Move Objects icon . Select Copy Mode. In the Copies box type 1.In the Move Z box, type 12.0. Click Copy/Move.3. Repe

34、at for the landing on the opposite side. In the View toolbar, click Top View ( ). In the Tools toolbar, click Add a Rectangular Room ( ). In the Z Plane box, type 6.0. In the coordinate boxes enter the following values: X1: 69.5, Y1: 16.0, X2: 73.5, Y2: 24.0. Click Create.4. Replicate the landing. I

35、n the View toolbar, click the Selection Tool icon . Select the landing. In the Tools toolbar, click the Move Objects icon . Select Copy Mode. In the Copies box type 1. In the Move Z box, type 12.0. Click Copy/Move.Your model should now look like Figure 2. Figure 2:The floors and landings in the mode

36、lTo add the first stairway on the left side of the building:1. In the Tools toolbar, click Create Stairs between two edges ( ).2. In the Stair Width box, type 44.0 in. In the Door 1 Width box and the Door 2 Width box, type 32.0 in. 3. Click on the lower landing and position the stair towards the fro

37、nt side of the landing. Click on the lower floor to create the stairs from the landing to the lower floor, Figure 3.4. Use the Move Objects tool to make 1 copies of the stair, separated by 12 ft in the Z direction.5. Add the stairs that go up from the landing. Click on the lower landing and position

38、 the stair opposite the first stairs. Click on the second floor to create the stairs from the landing to the second floor.6. Use the Move Objects tool to make a copy of the stair, separated by 12 ft in the Z direction.7. Repeat on the other side of the model. This time, position the first stairs on

39、the back side of the landing. Figure 3 : First stairs on left side of buildingAdd the exit doors:1. Select the door tool ( ) and in the Max Width box, type 120.0 in.2. Place a door adjacent to both stairs on the lowest floor. These doors are wide enough that exit from the first floor does not affect

40、 the egress time. 3. Name the doors Right Exit and Left Exit to aid in later plotting of the exit rates through each door, Figure 4. Figure 4: The left ExitAdd OccupantsTo add occupants:1. Select the first (lowest) floor. On the Model menu click Add Occupants. For Occupant Count select By Number and

41、 type 100. Click OK.2. Repeat for each floor, selecting the corresponding profile for each floor. When finished, your model should look like Figure 5.Figure 5: Pathfinder model with occupantsRun SimulationTo run the simulation: 1. Save your document to a new folder. Use the name test.pth.1. On the t

42、oolbar, click Run Simulation ( ). By default, the problem will be solved using the Steering behavior mode.2. A summary report is provided in the analysis dialog. It provides FIRST IN and LAST OUT times for each room and door. The total time required for evacuation is approximately 89.8 seconds.View

43、ResultsWhen the simulation is finished, the 3D Pathfinder results window will display. To view results:1. Click the Play button. This will display the occupants as cylinders with their direction indicated by a triangle.2. At any time click the Pause or Stop button. You can drag the time line to cont

44、rol the animation.3. To view occupants as people, click the Stop button, on the Agents menu, click Show as People, then click the Play button, Figure 6.Figure 6: Display of results三实验结果(涉及必要的截图)建模效果如下:模拟人群疏散:通过建模以及仿真模拟,可以看出结果可以满足实验规定。四 实验体会 本次实验重要是通过构建楼层模型,添加必要的楼梯以及门和人群模型来模拟人群疏散。由于有者一定的3dmax场景建模的基础,

45、所以做起来很顺手。实验结果可以达成预定目的。我也考虑了其实现机制,并看了其代码,虽然不太懂,但还是有一定收获,至少知道了一些定义和参数的含义,希望后面可以有机会进一步进一步了解。实验五一实验名称基于OGRE的Boids算法实验二实验过程或实验程序(增长的代码及代码注解)1.1 在OGRE中实现Boids算法,将OpenGL平台的MyBoids算法移植到OGRE中进行实现;1.2 在OGRE中添加以下交互功能,通过按键或者菜单均可:l 增长/减少Boids的速度;l 启动/停止Cube的移动,观测Boids的跟随效果;case Z:bCubeMotion = !bCubeMotion;break

46、;case X: StepSpeed += 0.01;break;case C: StepSpeed -= 0.01;if(StepSpeed 0) StepSpeed=0;break;case : StepSpeed=0;bCubeMotion = !bCubeMotion;break;l 改变4个规则的权值(0-1之间),观测Boids的飞行效果;#define Separation 1.0#define Aligment 1.0#define Cohesion 1.0#define Follow 1.02.1基于OGRE的Boids算法实现1.拷贝MyBoids.h,MyBoids.cp

47、p到E:MFCOgre1MFCOgre1(相应的项目位置)2.添加MyBoids.h、MyBoids.cpp到工程中3.在MFCOgre1View.h中引入头文献MyBoids.h(#include MyBoids.h)4.在MFCOgre1View.cpp的OnInitialUpdate()函数(OnInitialUpdate()在MFCOgre1View的第115行)中,添加函数AllInit();5.打开MFCOgre1View.h,在类中创建节点变量SceneNode* node,实体变量Entity* ent,节点变量数组SceneNode* node4BoidsNum,实体变量数组

48、Entity* ent4BoidsNum,字符串数组Ogre:String NameBoidsNum。6.打开MFCOgre1View.cpp,在MFCOgre1View.cpp的构造函数中对创建的节点和实体对象以及字符串数组初始化/ TODO: 在此处添加构造代码 Name0=a; Name1=b; Name2=c; Name3=d; Name4=e; Name5=f; Name6=g; Name7=h; Name8=i; Name9=j; /Name10=k; for(int i=0;icreateEntity(cube,Box01.mesh);/获取实体对象,第一个参数是实体的名字,第二

49、个参数是要导入的mesh文献 node = m_pSceneManager-getRootSceneNode()-createChildSceneNode(node);/创建结点 node-setScale(0.01f,0.01f,0.01f);/设立实体的位置 node-setPosition(CubePosition0,CubePosition1,CubePosition2); node-attachObject(ent);/将实体附在节点上 ent-setMaterialName(Examples/Material_#25);/设立实体的材质 for(int i=0;icreateEnt

50、ity(Namei,qiu.mesh); node14i=m_pSceneManager-getRootSceneNode()-createChildSceneNode(Namei); node14i-setPosition(BoidsPositioni0,BoidsPositioni1,BoidsPositioni2); node14i-attachObject(ent14i); node14i-setScale(0.05f,0.05f,0.05f); ent14i-setMaterialName(Example/Material_#26); /8.在MFCOgre1View.cpp的OnT

51、imer消息响应函数中添加CubMotion(), 设立节点的node的位置;添加BoidsMotion(),设立节点数组node4BoidsNum的位置void CMFCOgre1View:OnTimer(UINT_PTR nIDEvent) m_pRoot-renderOneFrame(); CFormView:OnTimer(nIDEvent); CubeMotion(); node-setPosition(CubePosition0,CubePosition1,CubePosition2+40); BoidsMotion(); for(int i=0;isetPosition(Boid

52、sPositioni0,BoidsPositioni1,BoidsPositioni2+40); 2.2生成项目使用“生成项目”功能可以将程序的源代码文献编译为可执行的二进制文献,方法十分简朴:在“生成”菜单中选择“生成解决方案”。 在项目生成过程中,“输出”窗口会实时显示生成的进度和结果。假如源代码中不包含语法错误,会在最后提醒生成成功,如下图所示:2.3执行项目在MFCOgre1中选择“调试”菜单中的“开始执行(不调试)”,可以执行刚刚生成的程序,运营出实验规定的结果。三实验结果(涉及必要的截图)通过实验,可以控制cube以及boids运动,Z控制cube的停止,X、C分别加速和减速,空格是控制boids的停止。加速后:四实验体会 通过本次实验我知道了如何通过ogre来模拟鸟群,并可以通过修改代码,控制相应模型的运动与静止、加速与减速以及修改Separation 、Aligment 、Cohesion 、Follow四个参数来观测学习模型运动的变化。由于对仿真的接触不深,难免会碰到各种问题,通过实验过程中的积极提问与探讨,大多数还是成功解决了,希望后面可以对其有更深的把握。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!