基于OGRE的Boids实验最新

基于OGRE的Boids算法实验

一、 实验内容

1.1 在OGRE中实现Boids算法,将OpenGL平台的MyBoids算法移植到OGRE中进行实现; 1.2 在OGRE中添加以下交互功能,通过按键或者菜单均可:

? 增加/减少Boids的速度;

? 启动/停止Cube的移动,观察Boids的跟随效果; ? 改变4个规则的权值(0-1之间),观察Boids的飞行效果;

二、 实验步骤

1.1实验步骤

1.拷贝MyBoids.h,MyBoids.cpp到E:\\MFCOgre1\\MFCOgre1(对应的项目位置) 2.添加MyBoids.h、MyBoids.cpp到工程中

3.在MFCOgre1View.h中引入头文件MyBoids.h(#include \

4.在MFCOgre1View.cpp的OnInitialUpdate()函数(OnInitialUpdate()在MFCOgre1View的第115行)中,添加函数AllInit();

5.打开MFCOgre1View.h,在类中创建节点变量SceneNode* node,实体变量Entity* ent,节点变量数组SceneNode* node4[BoidsNum],实体变量数组Entity* ent4[BoidsNum],字符串数组Ogre::String Name[BoidsNum]。

SceneNode* node; Entity* ent;

SceneNode* node4[BoidsNum]; Entity* ent4[BoidsNum]; Ogre::String Name[BoidsNum];

6.打开MFCOgre1View.cpp,在MFCOgre1View.cpp的构造函数中对创建的节点和实体对象以及字符串数组初始化

for(int i = 0; i< BoidsNum; i++) {

if(i == 0) {

Name[i] = \; } else {

Name[i] = Name[i-1] + \; } }

for(int i = 0; i< BoidsNum; i++ ) {

ent4[i] = NULL; }

for(int i = 0; i < BoidsNum; i++ ) {

node4[i] = NULL; }

7.在MFCOgre1View.cpp的CreateEntity函数中创建实体,并将实体绑定到节点上

ent = m_pSceneManager->createEntity(\, \);

node = m_pSceneManager->getRootSceneNode()->createChildSceneNode(\); node->setScale(0.1f,0.1f,0.1f);

node->setPosition(CubePosition[0],CubePosition[1],CubePosition[2]);

node->attachObject(ent);

ent->setMaterialName(\);

for(int i = 0; i < BoidsNum; i++) {

ent4[i] = m_pSceneManager->createEntity(Name[i],\);

node4[i] = m_pSceneManager->getRootSceneNode()->createChildSceneNode(Name[i]); node4[i]->setPosition(BoidsPosition[i][0],BoidsPosition[i][1],BoidsPosition[i][2]); node4[i]->attachObject(ent4[i]); node4[i]->setScale(0.05f,0.05f,0.05f);

ent4[i]->setMaterialName(\); }

8.在MFCOgre1View.cpp的OnTimer消息响应函数中添加CubMotion(), 设置节点的node的位置;添加

BoidsMotion(),设置节点数组node4[BoidsNum]的位置

CubeMotion();

node->setPosition(CubePosition[0],CubePosition[1],CubePosition[2]+40); BoidsMotion();

for(int i = 0;i

node4[i]->setPosition(BoidsPosition[i][0],BoidsPosition[i][1],BoidsPosition[i][2]+40);

}

9.生成项目

使用“生成项目”功能可以将程序的源代码文件编译为可执行的二进制文件,方法十分简单:在“生成”菜单中选择“生成解决方案”。

在项目生成过程中,“输出”窗口会实时显示生成的进度和结果。如果源代码中不包含语法错误,会在最后提示生成成功,如下图所示:

10执行项目

在MFCOgre1中选择“调试”菜单中的“开始执行(不调试)”,可以执行刚刚生成的程序,运行出实验要求的结果

实验结果如下截图:

最开始的结果中,一群飞翔的物体和cube表面都是白色的,没有材质显示,后来经过学姐指点,知道了是setMaterialName()函数中的材质在我的电脑的材质库中不存在,所以它不会显示。但是,我将材质名称改好后,依然不显示。后来才知道,是把材质文件名称和材质名称弄混淆了。材质的名称是在.material文件里面,并不是.material文件的名称。 1.2 实验步骤:

在OGRE中添加以下交互功能,通过按键或者菜单均可:

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4