#1 

02-04-2007 16:24:33

maitrelame12545
Membres
Avatar de maitrelame12545
Date d'inscription:
Messages: 51
IP: 76.80.53.159
Courriel

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


#2 

02-04-2007 20:29:36

firnafin
Membres
Avatar de firnafin
Date d'inscription:
Messages: 150
IP: 84.4.189.42
Courriel

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


#3 

03-04-2007 02:45:31

maitrelame12545
Membres
Avatar de maitrelame12545
Date d'inscription:
Messages: 51
IP: 76.80.53.159
Courriel

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


#4 

03-04-2007 07:38:06

khayyam
Membres
Date d'inscription:
Messages: 25
IP: 130.79.72.239
Courriel  Site web

maitrelame12545 Ecris:

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


#5 

03-04-2007 12:46:11

firnafin
Membres
Avatar de firnafin
Date d'inscription:
Messages: 150
IP: 84.4.188.3
Courriel

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:

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

puis ds la boucle :

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é ...


Hors ligne


#6 

03-04-2007 16:49:26

maitrelame12545
Membres
Avatar de maitrelame12545
Date d'inscription:
Messages: 51
IP: 76.80.53.159
Courriel

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+


Codeur elewendyl

Hors ligne


#7 

03-04-2007 17:28:17

firnafin
Membres
Avatar de firnafin
Date d'inscription:
Messages: 150
IP: 84.4.188.3
Courriel

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


#8 

03-04-2007 18:15:09

firnafin
Membres
Avatar de firnafin
Date d'inscription:
Messages: 150
IP: 84.4.188.3
Courriel

maitrelame12545 Ecris:

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.


Hors ligne


#9 

03-04-2007 18:18:54

maitrelame12545
Membres
Avatar de maitrelame12545
Date d'inscription:
Messages: 51
IP: 76.80.53.159
Courriel

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...


Codeur elewendyl

Hors ligne


#10 

03-04-2007 18:35:32

firnafin
Membres
Avatar de firnafin
Date d'inscription:
Messages: 150
IP: 84.4.188.3
Courriel

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 ?


Hors ligne


#11 

03-04-2007 19:31:03

maitrelame12545
Membres
Avatar de maitrelame12545
Date d'inscription:
Messages: 51
IP: 76.80.53.159
Courriel

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é
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
121 invités en ligne
membre en ligne: -
RSS Feed