Bonjour,
j'essaye de faire depuis quelques temps une caméra un peu spéciale qui consiste à la lier a un mesh qu'on verrais de dos, qui suivrais le target de la camera (camera fps) .
J'ai testé dans la boucle de rendu
while (device->run())
{
mesh->setPosition(camera->getPosition());
mesh->setRotation(camera->getTarget());
}
mais la camera se retrouve entre les jambes du mesh et au lieu de se tourner sur lui-même selon le target de la camera, le mesh se tourne complètement (en clair sur tout les axes, le mesh se retrouve la tête en bas...).
Je cherche un peux sur les forums et autres mais je ne trouve rien qui ressemble à ce que je cherche à faire.
Quelqu'un à une solution ?
Hors ligne
Salut,
Plusieurs problèmes dans ton code :
- mesh->setPosition(camera->getPosition());
Tu dis que ton mesh est exactement au même endroit que ta caméra. Don c 'est normal que la caméra soit entre les jambes. Il faut que tu fasse plutot
mesh->setPosition(camera->getPosition() + irr::vector3df(x,y,z));
avec un vecteur de distance (pour que ton mesh soit plus devant la caméra.
Dans l'idéal même, je mettrais le mesh carrément à l'endroit que regarde la caméra (getTarget au lieu de getPosition)
- mesh->setRotation(camera->getTarget());
Au lieu de donner un vecteur angulaire (une direction), tu donne une position. Il faut que tu calcule un angle à partir de la direction de vue de ta caméra ( camera->getTarget() - camera->getPosition() ). Là j'ai pas trop les formules en tête pour récupérer les angles à partir de la direction, c'est des maths.
Bon courage.
Hors ligne
un peut de doc ? http://irrlicht.sourceforge.net/docu/cl … e0ca5eb276 ...
setParent(irr::scene::ISceneNode*);
en claire tu mais la la camera parent du mesh ce qui permait de positionner la camera relativement au mesh
camera->setParent(mesh);
camera->setPostion(irr::core::vector3df(0,5,-10);
et ça ce fait automatiquement ...
a la rigeur un petit camera->setTarget(mesh->getPostion()); pour que la camera point le mesh
Hors ligne
En fait je voudrais juste setRotation de l'axe Y de mon mesh, pas X et Z.
Et Magun justement, j'aimerais que la camera ne pointe pas le mesh, mais que l'axe Y du mesh pointe le Target.
Hors ligne
fallait le dire je croyais que tu voulais faire un genre de camera rpg
enfin bon ... sa doit être un truc dans le genre ... (de tête, a tester)
[Code=cp]
core::vector3df toTarget = Target - node->getAbsolutePosition();
core::vector3df rot = node->getRotation();
rot.Y = toTarget.getHorizontalAngle().Y;
node->setRotation(rot);[/Code]
sinon ben c'est de la trigo, mais j'ai pas le temps...
ps: je devait être bien creuver quand j'ai écris, désoler
Hors ligne
Finalement j'ai eu une bonne idée et je vais arrêter cette camera spéciale pour un une autre plus... RPG :)
Dernière modification par Lagiol (07-12-2011 14:38:53)
Hors ligne