Historique des modifications - Message

Message #1920

Sujet: camera 3eme personne comment faire ?


Type Date Auteur Contenu
Dernière modification 03-04-2007 18:44:30 firnafin
ok je vois enfin , c'est pas tt a fait une cam 3iem personne
ca c'est une cam 3ieme personne ( le cube bouge et tourne )

#include <irrlicht.h>
#pragma comment(lib, "Irrlicht.lib")


using namespace irr;



// 2 fonctions toutes nulles pour tester que le perso bouge , tourne et avance
void moveISceneNode(scene::ISceneNode* node,core::vector3df  vector)
{
     node->getRelativeTransformation().rotateVect(vector); 
     node->setPosition(  node->getPosition()+vector);
     
}
void turnISceneNode(scene::ISceneNode* node,core::vector3df vector)
{
     node->setRotation( node->getRotation()+vector);    
}     


int main()
{

   IrrlichtDevice* device=createDevice( video::EDT_OPENGL,core::dimension2d<s32>(800,600) ,16,false,false,true,0);
   

   video::IVideoDriver* driver = device->getVideoDriver();
   scene::ISceneManager* smgr = device->getSceneManager();


   device->setWindowCaption(L"test CAM 3ieme personne");

   // creation du perso ici un cube
   scene::ISceneNode * cube=smgr->addCubeSceneNode();     
     
   // creation de la cam , rien de mystique
   scene::ICameraSceneNode * cam=smgr->addCameraSceneNode(cube,core::vector3df(0,0,0),core::vector3df(0,0,0)); 
   // on place la cam en 0,20,-30 qui sont des coords locals mais comme le cube n'a pas bouger elles correspondent au coord global ie par rapport a 0
   cam->setPosition(core::vector3df(0,20,-30));




   while( device->run())
   {
          driver->beginScene(true,true,video::SColor(255,255,255,255));

          //la cam look le cube
          cam->setTarget(cube->getPosition());
          //on fait bouger le cube pour montrer  
          moveISceneNode(cube,core::vector3df(0,0,.1));
          // on fait tourner le cube                                             
          turnISceneNode( cube, core::vector3df(0,.1,0));
          smgr->drawAll();

          driver->endScene();

   }
   device->drop();
   return 0;   

}

Pour une cam comme ds le video mais qui ne part pas au loin il faut juste faire une fonction comme celle la : ( elle arrive .... ) et la voici

 void fonction_qui_fait_bouger_la_cam_comme_tu_le_veux(scene::ICameraSceneNode* cam,ISceneNode * node ,f32 r,f32 fi,f32 ro)
{     
              cam->setPosition(core::vector3df( cos(fi)*cos(ro)*r,sin(fi)*r,cos(fi)*sin(ro)*r )+node->getPosition()  );
              cam->setTarget( node->getPosition();





}

avec fi et ro les angles voulu , input mouse ou clavier ou n'importe quoi ,
quand le perso bouge la cam le suit , quand tu fait varié les angles la cam bouge sur la sphere.
C'est bon ?
Création du message 03-04-2007 18:35:32 firnafin
ok je vois enfin , c'est pas tt a fait une cam 3iem personne
ca c'est une cam 3ieme personne ( le cube bouge et tourne )

#include <irrlicht.h>
#pragma comment(lib, "Irrlicht.lib")


using namespace irr;



// 2 fonctions toutes nulles pour tester que le perso bouge , tourne et avance
void moveISceneNode(scene::ISceneNode* node,core::vector3df  vector)
{
     node->getRelativeTransformation().rotateVect(vector); 
     node->setPosition(  node->getPosition()+vector);
     
}
void turnISceneNode(scene::ISceneNode* node,core::vector3df vector)
{
     node->setRotation( node->getRotation()+vector);    
}     


int main()
{

   IrrlichtDevice* device=createDevice( video::EDT_OPENGL,core::dimension2d<s32>(800,600) ,16,false,false,true,0);
   

   video::IVideoDriver* driver = device->getVideoDriver();
   scene::ISceneManager* smgr = device->getSceneManager();


   device->setWindowCaption(L"test CAM 3ieme personne");

   // creation du perso ici un cube
   scene::ISceneNode * cube=smgr->addCubeSceneNode();     
     
   // creation de la cam , rien de mystique
   scene::ICameraSceneNode * cam=smgr->addCameraSceneNode(cube,core::vector3df(0,0,0),core::vector3df(0,0,0)); 
   // on place la cam en 0,20,-30 qui sont des coords locals mais comme le cube n'a pas bouger elles correspondent au coord global ie par rapport a 0
   cam->setPosition(core::vector3df(0,20,-30));




   while( device->run())
   {
          driver->beginScene(true,true,video::SColor(255,255,255,255));

          //la cam look le cube
          cam->setTarget(cube->getPosition());
          //on fait bouger le cube pour montrer  
          moveISceneNode(cube,core::vector3df(0,0,.1));
          // on fait tourner le cube                                             
          turnISceneNode( cube, core::vector3df(0,.1,0));
          smgr->drawAll();

          driver->endScene();

   }
   device->drop();
   return 0;   

}

Pour une cam comme ds le video mais qui ne part pas au loin il faut juste faire une fonction comme celle la : ( elle arrive .... ) et la voici

 void fonction_qui_fait_bouger_la_cam_comme_tu_le_veux(scene::ICameraSceneNode* cam,ISceneNode * node ,f32 r,f32 fi,f32 ro)
{     
              cam->setPosition(core::vector3df( cos(fi)*cos(ro)*r,sin(fi)*r,cos(fi)*sin(ro)*r )+node->getPosition()  );
              cam->setTarget( node->getPosition();





}

avec fi et ro les angles voulu , input mouse ou clavier ou n'importe quoi ,
quand le perso bouge la cam le suit , quand tu fait varié les angles la cam bouge sur la sphere.
C'est bon ?

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
136 invités en ligne
membre en ligne: -
RSS Feed