you know there are a lots of class ,I can show you the main function code .
#include “main.h”
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
int i;
#define Maxnumber 100
box box1;
boid boid_fish[Maxnumber];
flock flock_test;
obstacle obs[MaxObstacles];
vector temp_vector;
vector temp_velocity;
vector temp_angle;
scene::ISceneNode fishnode[Maxnumber] ;
//scene::ISceneNode obsnode[MaxObstacles];
scene::IAnimatedMeshSceneNode obsnode[MaxObstacles];
scene::IAnimatedMeshSceneNode node;
scene::IAnimatedMeshSceneNode* earthnode;
scene::ICameraSceneNode* camera;
//core::vector3df temp_vector ;
#pragma comment(lib, “Irrlicht.lib”)
void initboid()
{
box1 = new box(50.0,50.0,50.0);
boid_fish[0] = new boid(0);
for(i = 0; i < Maxnumber; i++)
{
boid_fish[i] = new boid(i);
}
flock_test = new flock();
for (i = 0; i < Maxnumber; i++)
{
flock_test->AddTo(boid_fish[i]);
}
}
void initobstacle()
{
for(i = 0 ; i < MaxObstacles ; i ++)
{
obs[i] = new obstacle(20.0);
//obs[i] ->Draw();
}
}
void boidupdate()
{
/*for(i = 0; i < Maxnumber ; i++)
{
boid_fish[i]->flockit(i,boid_fish[0]);
temp_vector = boid_fish[i]->boid_position;
fishnode[i] ->setPosition(core::vector3df(temp_vector.x ,
temp_vector.y ,
temp_vector.z ));
//printf("temp_vector.x = %f
" ,temp_vector.x );
}*/
for (i = 0; i < flock::FlockCount; i++)
{
flock::ListOfFlocks[i]->Update();
}
for (i = 0; i < Maxnumber; i++)
{
temp_angle = boid_fish[i]->boid_angle;
temp_vector = boid_fish[i]->boid_position;
fishnode[i] ->setPosition(core::vector3df(temp_vector.x ,
temp_vector.y ,
temp_vector.z ));
fishnode[i] ->setRotation(core::vector3df(temp_angle.x 180/3.14,
temp_angle.y180/3.14 ,
temp_angle.z*180/3.14 ));
}
}
void deleteboid()
{
for (i = 0; i < Maxnumber; i++)
{
delete boid_fish[i];
}
}
void deleteonstacle()
{
for (i = 0; i < MaxObstacles; i++)
{
delete obs[i];
}
}
int main()
{
//引擎初始化
IrrlichtDevice *device =
createDevice(EDT_DIRECTX8, dimension2d<s32>(640, 480), 16,
false, false, false, 0);
device->setWindowCaption(L"flocking Demo");
IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager();
IGUIEnvironment* guienv = device->getGUIEnvironment();
//guienv->addStaticText(L"Hello World! This is the Irrlicht Software renderer!",
// rect<int>(10,10,200,22), true);
//场景初始化
initboid();
initobstacle();
video::SMaterial material_xiaoliyu;
video::SMaterial material_earth;
//material_xiaoliyu.Texture1 = driver->getTexture(“image/xiaoliyu-an.jpg”);
//material_xiaoliyu.Lighting = false;
//material_xiaoliyu.FogEnable = true;
//node->setMaterialTexture(0, driver->getTexture(“image/xiaoliyu-an.jpg”));
//material_earth.Texture1 = driver->getTexture(“image/xiaoliyu-an.jpg”);
//node->setMaterialTexture(0, driver->getTexture(“image/xiaoliyu-an.jpg”));
//node->setMaterialTexture(0, driver->getTexture(“image/earth.bmp”));
material_earth.Texture1 = driver->getTexture(“model/earth.bmp”);
material_earth.Lighting = false;
//material_earth.Wireframe = true;
scene::IAnimatedMesh* earth= smgr->getMesh(“model/earth.x”);
if(earth)
{
for (i = 0; i < MaxObstacles; i++)
{
temp_vector = obs[i]->GetPosition();
//earthnode = smgr->addAnimatedMeshSceneNode( earth , obsnode[i]);
obsnode[i] = smgr->addAnimatedMeshSceneNode(earth);
//obsnode[i] = smgr->addTestSceneNode(20);
obsnode[i]->setPosition(core::vector3df(temp_vector.x ,
temp_vector.y ,
temp_vector.z ));
obsnode[i]->setScale(core::vector3df(150.0 ,
150.0 ,
150.0 ));
}
}
//scene::IAnimatedMesh* xiaoliyu= smgr->getMesh(“model/xiaoliyu-an-sm.x”);
//if (xiaoliyu)
// {
for (i = 0; i < Maxnumber; i++)
{
temp_vector = boid_fish[i]->boid_position;
temp_velocity =boid_fish[i]->boid_velocity;
//node = smgr->addAnimatedMeshSceneNode( xiaoliyu , fishnode[i]);
//node->setMaterialTexture(0, driver->getTexture(“image/xiaoliyu-an.jpg”));
//node->setScale(core::vector3df(3.0f,3.0f,3.0f));
//node->setFrameLoop(0, 6000);
//node->setAnimationSpeed(2000 + boid_fish[i]->boid_id* 50 );
fishnode[i] = smgr->addTestSceneNode();
//fishnode[i] = smgr->addEmptySceneNode();
fishnode[i] ->setScale(core::vector3df(1.0,1.0,3.0 ));
fishnode[i] ->setPosition(core::vector3df(temp_vector.x ,
temp_vector.y ,
temp_vector.z ));
}
// }
//相机设置
camera= smgr->addCameraSceneNodeFPS();
camera->setPosition(core::vector3df(-700,-700,-700));
camera->setTarget(core::vector3df(0,0,0));
camera->setFarValue(40000.0f);
device->getCursorControl()->setVisible(false);
//smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0));
while(device->run())
{
driver->beginScene(true, true, SColor(0,100,100,100));
//printf (“aa” );
boidupdate();
smgr->drawAll();
guienv->drawAll();
driver->endScene();
}
deleteboid();
deleteonstacle();
device->drop();
return 0;
}