#1 

07-04-2010 22:34:19

pedefetoll
Membres
Date d'inscription:
Messages: 8
IP: 82.229.239.176
Courriel

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


#2 

08-04-2010 12:02:24

nabouill
Membres
Avatar de nabouill
Date d'inscription:
Messages: 242
IP: 82.127.58.127
Courriel

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 sad
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 wink

Hors ligne


#3 

08-04-2010 15:02:17

pedefetoll
Membres
Date d'inscription:
Messages: 8
IP: 188.130.70.12
Courriel

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


#4 

09-04-2010 05:58:50

nabouill
Membres
Avatar de nabouill
Date d'inscription:
Messages: 242
IP: 79.92.237.64
Courriel

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:

Code c++ :


void targetCamera(ICameraSceneNode* camera)
{
    vector3df rotCam = camera->getRotation();
    vector3df vel(0.0f,0.0f,1000.0f);//pour regarder à 1000 unité devant son nez
    irr::core::matrix4 mat;
    mat.setRotationDegrees(rotCam);
    mat.transformVect(vel);
    camera->setTarget(camera->getAbsolutePosition() + vel);
}

int main()
{
   //bla bla bla......on declare tout et tout

   ICameraSceneNode* myCamera = sceneMgr->addCameraSceneNode();

   while(device->run())
   {
        //bla bla bla... tu fait faire des rotation a ta camera et tout
       
        //apelle de la fonction qui va mettre a jour la target
        targetCamera(myCamera);

       //bla bla bla...mise a jour de l'afichage et tou
   }
  
   device->drop();

    return 0;
}


Bon courage

Hors ligne


#5 

09-04-2010 22:26:50

pedefetoll
Membres
Date d'inscription:
Messages: 8
IP: 82.229.239.176
Courriel

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


#6 

10-04-2010 07:01:40

nabouill
Membres
Avatar de nabouill
Date d'inscription:
Messages: 242
IP: 79.92.237.64
Courriel

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


#7 

15-04-2010 05:35:22

nabouill
Membres
Avatar de nabouill
Date d'inscription:
Messages: 242
IP: 79.92.237.64
Courriel

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