Après tout ce que j'ai lu,
j'aimerais bien savoir comment on fait tourner une caméra FPS selon ses trois axes propres.
Certains citent l'usage de nodeCamera->bindTargetAndRotation( false); pour pouvoir utiliser setRotation comme pour un ISceneNode.
Mais désolé, ça ne marche pas.
Pour la rotation autour de l'axe Z, "setUpVector fonctionne bien :
nodeCamera->setUpVector( irr::core::vector3df( sin(vRad.Z), cos(vRad.Z), 0)); // avec vRad.z en radian
Mais pour les rotation sur les axes X et Y, il n'y a rien.
Certains passent par la modification de la target.
Mais si l'on fait se déplacer la position, la target restant fixe, l'objet s'incline de plus en plus lorsqu'on se rapproche de la "target".
Il faut que le vecteur position/ target soit toujours de même taille, et parallèle à son vecteur initial.
Alors, comment faire tourner sa caméra FPS autour de ses axe X et Y ?
Cordialement.
Hors ligne
tu peut faire tourner ta camera avec un simple "camera->setRotation(vector3df(10,0,0));" ça, sa marche. mais le problème c'est que tu ne voit rien du tout bouger puisqu'elle regarde toujours au même endroit
Il faut donc faire faire une rotation a ta camera ET mettre a jour la target (qui se calcule en par rapport a la rotation et la position de ta camera ).
J'ai un petit bout de code qui fait ça a merveille, essaye de voir ce que tu trouve déjà avec cette piste, si tu galère trop, klaxonne en passant je te mettrais ma petite fonction qui fait ça
Dernière modification par nabouill (08-04-2010 14:03:01)
Hors ligne
Bonjour,
Galérer est déjà un mot faible.
Je suis preneur d'une bouée sous forme de ligne de code.
Tu me confirmes donc qu'il N'est PAS possible d'avoir une caméra "avec le regard dans le vague", c'est à dire une position, un vecteur de direction, et PAS de target ?
Dans ce cas, comment calculer, à partir de la position et de la rotation (ou direction), une TARGET "infinie", c'est à dire une target dont on ne peut jamais s'approcher ni risquer de modifier l'angle d'inclinaison (plus l'objet porté par la caméra se rapproche de la target, plus il s'incline) ?
Merci pour ton aide passé et futur...
Cordialement.
Hors ligne
salut, comme je te le disais, la target se calcule par rapport a la rotation ET la position de la camera. Plutôt que te te faire tout un discours,
voila une petite fonction qui fait ça bien avec son exemple d'utilisation, et tu va tout comprendre:
Bon courage
Dernière modification par nabouill (09-04-2010 08:03:52)
Hors ligne
Un grand merci.
Ca fonctionne à merveille, et combiné à setUpVector() pour l'inclinaison de tangage, c'est parfait.
Je passe en paramètre la distance par rapport "à mon nez",
parce que comme je survole des plans de plus de 20.000 de coté, je veux être sûr de pointer sur l'infini....
Il ne me reste plus qu'à corriger mes translations qui se font dans l'axe x et y absolus, alors que je voudrais un déplacement en x et y pour l'orientation de ma caméra.
On n'est jamais content...
Cordialement
Hors ligne
si tu attend 2-3 jours, je mettrais une cameraFPS personnaliser très simple dans la section routine. Cette camera utilise la fonction que je tes mis pour la target et une du même genre pour la translation. L'avantage aussi elle a une parfaite maitrise de la vitesse de translation (on peut par exemple utiliser différente vitesse pour aller en avant, arrière, coté). Aussi, tu peut aussi lui modifier les axe de translation très facilement.
Je te bip si tu veux des que j'ai posté ça.
A+
Hors ligne
jette un oeil par là si tu veut:
http://irrlicht-fr.org/viewtopic.php?pid=8197#p8197
Hors ligne