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
08-04-2010 12:02:24
- nabouill
- Membres

- 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 ![]()
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 ![]()
Hors ligne
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
09-04-2010 05:58:50
- nabouill
- Membres

- 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
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
10-04-2010 07:01:40
- nabouill
- Membres

- 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
15-04-2010 05:35:22
- nabouill
- Membres

- Date d'inscription:
- Messages: 242
- IP: 79.92.237.64
- Courriel
jette un oeil par là si tu veut:
http://irrlicht-fr.org/viewtopic.php?pid=8197#p8197
Hors ligne



