#0 

02-04-2007 18:24:33

maitrelame12545
Membre
Date d'inscription: 28-11-2006
Messages: 51

Bonjour je suis entrain de travailler sur une demo de mon mmorpg, mais je n'arrive pas a faire une camera 3eme personne. Je fais setParent() avec ma camera FPS et mon Node mais ensuite je n'arrive pas faire en sorte que ma camera soit a disons 30 derriere mon node en 20 au dessus de mon node...

Quelqu'un peut-il m'aider ?

Merci


Codeur elewendyl

Hors ligne


#1 

02-04-2007 22:29:36

firnafin
Abonné
Date d'inscription: 31-03-2007
Messages: 150

bonjour;

je ne suis pas un pro de Irrlicht ( commencé il y a 3 jours ) mais pas besoin de l'etre pour trouver illogique la creation d'une camera 3ieme personne a partir d'une camera 1er personne.
A mon avis une camera (nonFPS non maya , normale ) en enfant du node de ton perso et un setPosition(0,20,30) ( ou 30,20,0 selon l'orientation du perso : devant en z ou en x , voir meme en y ... ) devrait suffir.
Quand on  utilise setPosition c'est avec des coords du repere parent ( ici le perso)  c'est ds la doc , comme  apres le perso bouge son repere bouge ac --> ta camera reste bien accrochée la ou tu le veux.

si tu ne veux pas mettre en parent tu positione ta cam tu utilise la matrix4 de transformation que tu mutlipie au vecteur 0,20,30 et ds chaque boucle du met ta cam en le resultat de cette multiplication.Methode plus gourmande , mon pro , plustot math moins ds l'esprit d'une scene avec ca structure enfant parent coords locals  .

Hors ligne


#2 

03-04-2007 04:45:31

maitrelame12545
Membre
Date d'inscription: 28-11-2006
Messages: 51

Je serais pas venu demander si c'etait si simple.
C'est pas pour rien que certain prefere meme faire leur camera en OpenGL pur...
Donc j'aimerais savoir comment faire une lib ou si quelqu'un en a une simple d'utilisation...


Codeur elewendyl

Hors ligne


#3 

03-04-2007 09:38:06

khayyam
Membre
Date d'inscription: 04-03-2007
Messages: 25
Site web

maitrelame12545 :

Je serais pas venu demander si c'etait si simple.


c'est pourtant une très bonne solution. Attacher la caméra au node à surveiller, ça reproduit bien l'idée du scenegraph.

Hors ligne


#4 

03-04-2007 14:46:11

firnafin
Abonné
Date d'inscription: 31-03-2007
Messages: 150

Comme je l'ai deja dit je suis débutant, et quand un "newbie" repond a une personne qui prepare une demo d'un mmorpg ( dc connaisseur et ds le domaine depuis longtemps vu ta page web ) il prend le tps de verifier si il ne dit pas n'importe quoi.
Je ne me serai pas permi de repondre si je n'avais pas constaté qu'une simple cam en enfant suffit , voici en deux lignes ce que ca donne:

Code:

scene::ICameraSceneNode* cam=smgr->addCameraSceneNode(perso,core::vector3df(0,20,-30),core::vector3df(0,0,0));

puis ds la boucle :

Code:

cam->SetTarget(perso->getPosition().X,perso->getPosition().Y,perso->getPosition().Z);

il n'y a pas plus simple,si besoin je peux faire un petit prog plus detaillé ...

Dernière modification par firnafin (03-04-2007 15:02:43)

Hors ligne


#5 

03-04-2007 18:49:26

maitrelame12545
Membre
Date d'inscription: 28-11-2006
Messages: 51

Je vais essayer ca.

Mais dites moi...
Pourquoi y en qui creer des lib afin de faire leur 3rd person cam alors que cette method (que je n'ai pas encore essayer) devrait marche ???
C'est interessant...

EDIT :

La camera est bien gentile mais quand je commence a essayer de faire des rotation ca ne marche plus.
Donc j'ai trouver un moyen mais apparement la doc de irrlicht est pas a jour pour la v1.3 donc j'ai des probleme au niveau de ma cam maya...

Mais je n'arrive pas a empecher la cam de partir a des kilomettre au lieu de tourner autour de mon node...
Si quelqu'un a une idee.

Merci
a+

Dernière modification par maitrelame12545 (03-04-2007 19:56:08)


Codeur elewendyl

Hors ligne


#6 

03-04-2007 19:28:17

firnafin
Abonné
Date d'inscription: 31-03-2007
Messages: 150

on a peut etre pas la meme definition de la cam 3ieme personne ou alors ils créent des libs pour avoir un truc jolie avec collision et smoothing du deplacement car la c'est vraiment collé et ca fait pas super mais ac un peut de math ca s'arrange facilement. A voir

Hors ligne


#7 

03-04-2007 20:15:09

firnafin
Abonné
Date d'inscription: 31-03-2007
Messages: 150

maitrelame12545 :

quand je commence a essayer de faire des rotation ca ne marche plus


c'est quoi que tu fais tourné pour faire que ca ne marche plus ?

si c'est la cam , je ne comprends pas trop , tu veux une cam 3ieme personne  qui a des rotations ...
ou alors tu veux peut etre une truc ds le style cam  WoW ou NWN.
Si tu expliques pas le resultat voulu on peut pas comprendre.

si c'est l'objet , ac les deux lignes ci dessus la cam ne cause pas pb quand le perso tourne.

Dernière modification par firnafin (03-04-2007 20:16:52)

Hors ligne


#8 

03-04-2007 20:18:54

maitrelame12545
Membre
Date d'inscription: 28-11-2006
Messages: 51

Moi je veux juste une camera qui suit le node.
la video sera prete d'ici 30 secs, elle est en upload sur mon hebergement.
http://lunh.kilu2.de/dossier/video.avi
A ouvrir avec wmp
En faite j'aimerais une camera qui ne peux pas s'eloigner ou se raprocher du node. En gros comme si la cam se deplace sur une sphere.
J'avais penser a un systeme de colision avec une elipse mais je pense que ca va etre galere pour rien...

Dernière modification par maitrelame12545 (03-04-2007 20:25:34)


Codeur elewendyl

Hors ligne


#9 

03-04-2007 20:35:32

firnafin
Abonné
Date d'inscription: 31-03-2007
Messages: 150

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 )

Code:

#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

Code:

 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 ?

Dernière modification par firnafin (03-04-2007 20:44:30)

Hors ligne


#10 

03-04-2007 21:31:03

maitrelame12545
Membre
Date d'inscription: 28-11-2006
Messages: 51

Whoaaaa !!!
3 jour apres avoir demarer tu es deja tres bon !!! (plus rapide que moi en tout cas)
Sinon j'ai reussi a faire mon map maker.
J'implenterais la cam dans le jeu.
Si quelqu'un veut tester le map maker (win only)
http://lunh.kilu2.de/dossier/map.zip

A+


Codeur elewendyl

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
881 membres
1427 sujets
11117 messages
Dernier membre inscrit: Bidule
25 invités en ligne
Aucun membre connecté
RSS Feed