Bonjour je suis en train de faire un petit programme de visualisation de scènes en 3D et je voudrais qu'on puisse m'indiquer la position de la caméra (ça c'est ok) ainsi que le point vers lequel elle regarde.
Et depuis ces points j'aimerais pouvoir trouver les angles (x, y et z) de rotation qui correspondent, mais je n'y arrive pas
Je fais mes rotations avec des matrices, en commençant par la rotation en x, puis y et enfin z.
Jusqu'à maintenant j'ai fait plusieurs essais mais je n'ai jamais réussi à trouver parfaitement les angles qui me permettent de regarder le point que je veux depuis la position que je veux.
Pour infos une rotation de 0 pour chaque axe me fait regarder le long de l'axe X. J'ai donc le X devant moi, le Y qui va vers ma droite et le Z qui va vers le haut.
Mon dernier essai était avec des coordonnées sphériques mais ça ne marche toujours pas, je regarde ailleurs.
Est-ce que vous pourriez me mettre sur la piste s'il vous plait?
Merci d'avance.
salut
je ne sais pas trop ce que tu veux dire mais peut-être en calculant le produit scalaire et le produit vectoriel de tes vecteurs tu peux avoir qq chose...
Eh bien faire le produit scalaire va en effet me donner un angle, celui entre les 2 vecteurs, mais le probleme c'est qu'il me faudrait l'angle en x, en y et en z. En fait j'aimerais a partir d'une position, et d'un point qu'on regarde trouver la rotation euclidienne (en s'aidant des matrices) qui va faire que ma caméra va regarder mon point. Mais le probleme c'est que je ne vois plus trop comment faire
Je ne sais pas si je suis clair donc je vais essayer d'expliquer ça plus clairement:
- J'ai un point qui est ma position (celle de la caméra).
- J'ai un point qui est le point qu'on veut regarder (vers lequel la caméra doit se tourner).
Je fais dans mon programme des rotations euclidiennes avec des matrices que voicies:
Matrice pour la rotation suivant l'axe des x:
| 1 0 0 |
| 0 cos(a) -sin(a) |
| 0 sin(a) cos(a) |
Matrice pour la rotation suivant l'axe des y:
| cos(a) 0 0 |
| 0 cos(a) -sin(a) |
| 0 sin(a) cos(a) |
Désolé mais j'ai eu un petit probleme et j'ai posté plus tot que prévu, je reprends donc au moment ou je parlais de la rotation suivant l'axe de y:
Matrice pour la rotation suivant l'axe des y:
| cos(a) 0 sin(a) |
| 0 1 0 |
| -sin(a) 0 cos(a) |
Matrice pour la rotation suivant l'axe des z:
| cos(a) -sin(a) 0 |
| sin(a) cos(a) 0 |
| 0 0 1 |
Et donc je que je voudrais c'est trouver chaqu'un des 3 angles x, y et z qui me permettrez de regarder mon point.
Merci de vos reponses.
avec ton repère et en notant i, j et k les vecteurs d'une base associée à ton repère alors si je comprends bien ta caméra est pointée dans la direction u et tu veux la pointer dans la direction v alors u^v (produit vectoriel) te donne un vecteur normal au plan (u,v) et te donne l'axe de rotation outour duquel ta caméra tourne et u.v (produit scalaire) te donne l'angle de la rotation à effectuer
traduis cela dans la base pout avoir ton résultat et la matrice de rotation faisant passer de u à v en tournant autour de u^v
Merci de ta réponse.
Donc si je comprends bien, u est le vecteur par lequel je regarde en ce moment, et v est celui par lequel je veux regarder.
Ensuite faire u^v revient t'il à faire que le vecteur final sera:
w :
| Ux * Vx
| Uy * Vy
| Uz * Vz
?
Pour le produit scalaire il va falloir que je fasse pour trouver l'angle:
angle = acos( ( Ux * Vx + Uy * Vy + Uz * Vz ) / ( ||u|| * ||v|| ) )
?
Par contre à la fin comment est-ce que je dois m'y prendre pour faire une rotation suivant un axe autre que x, y ou z?
Merci d'avance
soit u(a,b,c) et v(e,f,g) dans la base donnée
alors uv(bg-cf,ce-ag,af-be) pour le produit vectoriel
sinon pour l'angle c'est bon
il reste une chose c'est de savoir aussi dans quel sens tu tournes autour de uv
par contre pour les formules de la rotation autour d'un vecteur j'ai plus les formules mais tu dois trouver ça sur le oueb
Merci beaucoup pour ta réponse, par contre je suis en train de me dire que au final ça ne me donne pas l'angle sur les axes x, y et z séparément dont j'ai besoin
Donc est-ce qu'il y aurait moyen à partir de la rotation que j'ai là de la transformer en rotation euclidienne?
Je crois savoir (dites moi si je me trompe) que la rotation par rapport
Aie désolé un appuie sur TAB prématuré
Je disais donc que une rotation autour d'un axe comme on a ici ressemble à un Quaternion non?
Et donc je crois qu'il existe une facon pour passer des quaternions aux rotation matricielles avec des angles euclidiens, et donc est-ce qu'il faudrait que j'utilise cette méthode?
Merci d'avance
effectivement tu dois pouvoir décomposer ta rotation autour de u en prduit de 3 rotations autour de x, de y et de z
ce me semble-t-il
... mais pour retrouver les formules...
Je viens de trouver ce lien pour transformer des quaternions en rotations: http://jeux.developpez.com/faq/matquat/?page=quaternions#Q54
Je vais donc essayer de voir ce que ça donne.
Merci beaucoup pou ton aide.
Par contre j'aurais une dernière question (normalement):
Y a t'il un moyen simple de savoir dans quel sens je dois faire ma rotation autour de l'axe?
le produit scalaire te donne un angle non oirenté car il est symétrique en tes deux vecteurs
mais le produit vectoriel n'est pas symétrique (si tu permutes les 2 vecteurs tu obtiens un résultat opposé)
et tu as ||u^v||=||u|| ||v||sin (u,v) donc tu peux déterminer ton angle précisément grace à son sinus et son cosinus et savoir dans quel sens tourner
J'avoue ne pas comprendre entièrement ce raisonnement
Je comprends que le produit scalaire donne un angle non orienté, et je comprends que le produit vectoriel n'est pas symétrique, par contre je ne comprends pas tout à fait la formule ni comment je peux en tirer profit dans mon cas.
Est-ce que tu pourrais me la détailler plus?
Merci d'avance
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :