29-11-2011 11:53:03
- Lagiol
- Membres

- Date d'inscription:
- Messages: 24
- IP: 194.199.75.138
- Courriel
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
01-12-2011 16:13:38
- Hawk
- Membres
- Date d'inscription:
- Messages: 91
- IP: 91.103.40.50
- Courriel Site web
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
01-12-2011 16:50:51
- Magun
- Administrateurs

- Date d'inscription:
- Messages: 910
- IP: 188.93.45.30
- Courriel Site web
un peut de doc ? http://irrlicht.sourceforge.net/docu/classirr_1_1scene_1_1_i_scene_node.html#a59e7f36cb5c9c4895e06fce0ca5eb276 ... ![]()
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
05-12-2011 11:35:31
- Lagiol
- Membres

- Date d'inscription:
- Messages: 24
- IP: 194.199.75.138
- Courriel
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
06-12-2011 20:37:09
- Magun
- Administrateurs

- Date d'inscription:
- Messages: 910
- IP: 188.93.45.30
- Courriel Site web
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);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
07-12-2011 13:38:13
- Lagiol
- Membres

- Date d'inscription:
- Messages: 24
- IP: 88.163.115.125
- Courriel
Finalement j'ai eu une bonne idée et je vais arrêter cette camera spéciale pour un une autre plus... RPG ![]()
Hors ligne



