#1 

29-11-2011 11:53:03

Lagiol
Membres
Avatar de Lagiol
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


#2 

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


#3 

01-12-2011 16:50:51

Magun
Administrateurs
Avatar de Magun
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 ... smile
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

wink

Hors ligne


#4 

05-12-2011 11:35:31

Lagiol
Membres
Avatar de Lagiol
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


#5 

06-12-2011 20:37:09

Magun
Administrateurs
Avatar de Magun
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... wink
ps: je devait être bien creuver quand j'ai écris, désoler

Hors ligne


#6 

07-12-2011 13:38:13

Lagiol
Membres
Avatar de Lagiol
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 smile


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