#0 

29-11-2011 12:53:03

Lagiol
Membre
Date d'inscription: 17-11-2011
Messages: 24

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


#1 

01-12-2011 17:13:38

Hawk
Membre
Lieu: Wissous
Date d'inscription: 08-11-2008
Messages: 91
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


#2 

01-12-2011 17:50:51

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 908
Corrections: 2
Site web

un peut de doc ? http://irrlicht.sourceforge.net/docu/cl … e0ca5eb276 ... 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


#3 

05-12-2011 12:35:31

Lagiol
Membre
Date d'inscription: 17-11-2011
Messages: 24

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


#4 

06-12-2011 21:37:09

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 908
Corrections: 2
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);[/Code]

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


#5 

07-12-2011 14:38:13

Lagiol
Membre
Date d'inscription: 17-11-2011
Messages: 24

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


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
881 membres
1427 sujets
11117 messages
Dernier membre inscrit: Bidule
30 invités en ligne
Aucun membre connecté
RSS Feed