#include <iostream>
#include <IRR/irrlicht.h>
using namespace irr;
using namespace std;
int main(int argc, char *argv[])
{
//Cette ligne va créer un contexte d'affichage OpenGL
IrrlichtDevice *device = createDevice (video::EDT_OPENGL,
core::dimension2d<s32>(800,600),32,false,true,false,0);
//On associe un driver à la fenêtre
video::IVideoDriver* driver = device->getVideoDriver ();
//Et on crée un gestionnaire de scène (scenegraph)
scene::ISceneManager *scenegraph = device->getSceneManager ();
//on cache le curseur
//device->getCursorControl()->setVisible(false);
// // // // La caméra // // // //
scene::ICameraSceneNode *camera = scenegraph->addCameraSceneNode ();
camera->setPosition(core::vector3df(150.0, 75.0, -100.0));
// // // // la salle // // // //
scene::IAnimatedMesh *room = scenegraph->getMesh("room.3ds");
scene::IMeshSceneNode *Nroom = scenegraph->addMeshSceneNode(room->getMesh(0));
Nroom->setMaterialFlag(video::EMF_LIGHTING, true);
//On applique une texture à la salle.
scenegraph->getMeshManipulator()->makePlanarTextureMapping(room->getMesh(0), 0.01f);
Nroom->setMaterialTexture( 0, driver->getTexture("rockwall.bmp"));
Nroom->setScale(core::vector3df(0.5,0.5,0.5));
// // // // la lumière // // // //
scene::ISceneNode* lumiere;
lumiere = scenegraph->addLightSceneNode(Nroom, core::vector3df(0,0,0),
video::SColorf(0.2f, .2f, .2f, 1.0f), 10.0f);
scene::ISceneNodeAnimator *aim = scenegraph->createFlyCircleAnimator(
core::vector3df(0,150,0),250.0f);
lumiere->addAnimator(aim);
lumiere = scenegraph->addBillboardSceneNode(lumiere,
core::dimension2d<f32>(50, 50));
lumiere->setMaterialFlag(video::EMF_LIGHTING, false);
//on rend la couleur noire transparente
lumiere->setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR);
lumiere->setMaterialTexture(0, driver->getTexture("particlewhite.bmp"));
// // // // //Systeme a particules // // // // //
scene::IParticleSystemSceneNode *ps = scenegraph->addParticleSystemSceneNode(false);
ps->setPosition(core::vector3df(-35,30,25));
ps->setScale(core::vector3df(2,2,2));
ps->setParticleSize(core::dimension2d<f32>(20.0f, 10.0f));
scene::IParticleEmitter* em = ps->createBoxEmitter(
core::aabbox3d<f32>(-7,0,-7,7,1,7),
core::vector3df(0.0f,0.03f,0.0f),
80,100,
video::SColor(0,255,255,255), video::SColor(0,255,255,255),
800,2000);
ps->setEmitter(em);
scene::IParticleAffector* paf = ps->createFadeOutParticleAffector();
ps->addAffector(paf);
ps->setMaterialFlag(video::EMF_LIGHTING, false);
ps->setMaterialTexture(0, driver->getTexture("particle.bmp"));
ps->setMaterialType(video::EMT_TRANSPARENT_VERTEX_ALPHA);
//La boucle de rendu
while (device->run ())
{
//On indique qu'on démarre la scène
driver->beginScene (true, true, video::SColor (255,255,255,255));
//On calcule le rendu
scenegraph->drawAll ();
//On affiche le rendu à l'écran
driver->endScene ();
}
//On libère la mémoire en détruisant le device
device->drop ();
}