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
Hors ligne
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
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...
Hors ligne
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
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é ...
Dernière modification par firnafin (03-04-2007 15:02:43)
Hors ligne
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)
Hors ligne
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
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
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)
Hors ligne
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 ?
Dernière modification par firnafin (03-04-2007 20:44:30)
Hors ligne
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+
Hors ligne
Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
---|---|---|---|---|
Corrections |
|
xhtml 1.0 css 2.1 Propulsé par FluxBB Traduit par FluxBB.fr |
882 membres 1429 sujets 11119 messages |
Dernier membre inscrit: LiseBuisson96 52 invités en ligne Aucun membre connecté RSS Feed |