#0 

08-04-2010 00:34:19

pedefetoll
Petit nouveau
Date d'inscription: 19-03-2010
Messages: 8

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


#1 

08-04-2010 14:02:24

nabouill
Abonné
Date d'inscription: 17-09-2009
Messages: 242
Corrections: 1

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

Dernière modification par nabouill (08-04-2010 14:03:01)


mes sites: www.manga-vf.fr et www.series-vf.fr

Hors ligne


#2 

08-04-2010 17:02:17

pedefetoll
Petit nouveau
Date d'inscription: 19-03-2010
Messages: 8

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


#3 

09-04-2010 07:58:50

nabouill
Abonné
Date d'inscription: 17-09-2009
Messages: 242
Corrections: 1

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

Dernière modification par nabouill (09-04-2010 08:03:52)


mes sites: www.manga-vf.fr et www.series-vf.fr

Hors ligne


#4 

10-04-2010 00:26:50

pedefetoll
Petit nouveau
Date d'inscription: 19-03-2010
Messages: 8

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


#5 

10-04-2010 09:01:40

nabouill
Abonné
Date d'inscription: 17-09-2009
Messages: 242
Corrections: 1

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+


mes sites: www.manga-vf.fr et www.series-vf.fr

Hors ligne


#6 

15-04-2010 07:35:22

nabouill
Abonné
Date d'inscription: 17-09-2009
Messages: 242
Corrections: 1

jette un oeil par là si tu veut:
http://irrlicht-fr.org/viewtopic.php?pid=8197#p8197


mes sites: www.manga-vf.fr et www.series-vf.fr

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
1426 sujets
11116 messages
Dernier membre inscrit: Bidule
14 invités en ligne
Aucun membre connecté
RSS Feed