CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Modelisation 3D et quaternions.

JeanYvesYves
JeanYvesYves
Niveau 10
22 septembre 2005 à 10:34:55

Bonjour, je me poses quelques questions sur ces bebetes la que sont les quaternions.
Mes profs de fac ne nous en ont pas parlé (les salauds) : forcément, quand on fait le meme cours depuis 6 ans, dans des domaines tel que la 3D, on n´est pas tout a fait a la pointe...
Bref, je me suis renseigné sur l´arithmétique des quaternions, ça n´a pas l´air monstrueux.
Cependant, au niveau application, ça m´échappe :

je prend un exemple :
j´ai un mec modelisé en 3D fait de 2 frames :
1ere frame : il a les 2 jambes au sol
2eme frame : il a une jambe en l´air

Mon but est de faire l´animation intermédiaire de la montée réaliste du pied.
Je considere qu´un seul point : le bout du pied.
Soit P1 ce point a la position frame1, déterminé par le quaternion Q1
Soit P2 ce point a la position frame2, déterminé par le quaternion Q1

Pour l´instant, passons le fait de savoir "comment remplir le quaternion", j´admet qu´il est déja remplit, que je n´ai plus qu´a lire.

Je voudrais programmer une fonction :

Quaternion GetPoint(Quaternion P1,Quaternion P2,double t);

qui me prendre les 2 entrées, et également un double entre 0 et 1 : c´est un pourcentage entre P1 et P2
(0.5 = le mec a la jambe au milieu)
(0.9 = le mec a la jambe presque arrivée)
(0.1 = le mec vient juste de commencer a lever la jambe)

Le résultat est un quaternion dont je ne lirai que les coordonnées x,y,z pour poser le bout du pied au bon endroit.

Comment implémenter un truc pareil ? (je recherche juste les formules de maths théoriques dans un premier temps)

Lapintade
Lapintade
Niveau 30
22 septembre 2005 à 10:44:12

Le quaternion ne represente que la rotation me semble il.

Son grand avantage c´est que tu peux interpoler linearement deux orientations.

MrZu
MrZu
Niveau 1
22 septembre 2005 à 16:27:06

En effet, comme le signale Lapintade, les quaternions sont utilisés en générale pour les rotations uniquement – ce n’est pas une limitation des quats, simplement on ne retient que la simplicité d’interpolation qu’ils offrent pour les rotations et leur compacité pour stocker des animations. Par conséquent, ta fonction ne peut pas marcher telle que tu l’as écrite. Il te faut au moins la position et l’orientation de départ et la rotation de fin. Je crois qu’il te familiariser un peu davantage avec les quats.

La méthode d’interpolation des quats est appelée la Spherical Linear Intepolation, SLERP pour les intimes (proposée par Ken Shoemaker en 85 dans « Animating Rotation with Quaternion Curves » http://www.cs.bilkent.edu.tr/~gudukbay/cs465/p245-shoemake.pdf ). Les maths sont simples une fois que tu as eu le déclic, avant, hum, c’est un peu imbuvable. Tu trouveras un foultitude d’implantations en différents langages de programmation sur le net.

Il est assez difficile de répondre rapidement sur un forum à ta question. Puisque je ne connais pas ton agilité en math (surtout en algèbre linéaire), comme point de depart je t’invite à considérer le quat comme s’il s’agissait d’une matrice de rotation et de chercher des infos sur les systèmes d’animations (par exemple « Formations sur les mathématiques liés (sic) à la 3D » de David Lanier : http://dl3d.free.fr/docs/maths3D.pdf ).

Il y a une page qui ressemble pas mal à ta question ici : http://www.irit.fr/recherches/SIRV/Personnel/gaildrat/PagesEnseignement/PagesInfographie/Quaternions/

Bonne recherche

JeanYvesYves
JeanYvesYves
Niveau 10
22 septembre 2005 à 16:34:29

merci pour vos réponses !

MrZu > "je ne connais pas ton agilité en math "
--> tu peux y aller sur l´algebre linéaire,
j´ai un DEUG de maths, un DESS d´informatique graphique, et beaucoup de recherche en maths personnelle pour diverses choses (je suis devenu un expert en courbes de Bézier, Hermitiennes, Nurbs, etc...)
Donc si tu as des trucs a proposer en algebre linéaire, tu peux y aller :-)

MrZu
MrZu
Niveau 1
23 septembre 2005 à 16:05:47

Bon je rappelle des infos de base, pour s´entendre sur le lexique.

On représente habituellement l’ossature d’un personnage animé par une hiérarchies d’« os » où chacun possède une position relative à son précédent dans la hiérarchie. Souvent le point de départ de la hiérarchie est le bassin. D’un point de vue math, on représente chaque articulation par deux informations : d’une part la distance par rapport à l’articulation précédente (par exemple, le coude est à L centimètres de l’épaule) et d’une rotation. La première est usuellement constante (le squelette ne se déforme pas, les os ne s’allongent pas) et est représentée par une matrice de translation (la longueur L est placée dans la composante x, tandis que y et z sont laissés à zéro). La rotation est elle aussi représentée par une matrice de rotation et c’est elle qui sera animée.
(J’ai un peu simplifié, il y a mille petites règles, habitudes et astuces : par exemple on incorpore un facteur d’échelle et la translation n’est pas nécessairement alignée exactement sur un axe)

Pour passer des coordonnées « locales » de chaque articulation à une position dans le monde, tu composes les matrices de translations et de rotation depuis la racine de la hiérarchie jusqu’au point que tu veux calculer. Par exemple, en prenant la notation « a gauche » tu obtiens pour le poignet quelque chose comme :

M_poignet = T_poignet * R_poignet * T_coude * R_coude …. * T_bassin * R_bassin

(avec chaque T_ et R_ correspondant respectivement à une matrice de translation ou de rotation)

Maintenant les quaternions apportent une autre représentation de la rotation. Dans la plupart des cas il ne servent qu’au stockage des animations et à l’interpolation, en revanche pour les autres calculs 3D ils sont convertis en matrice. Il y a une quasi-équivalence entre matrice de rotation et quat (« quasi » : c’est-à-dire que d’un point de vue pratique c’est équivalent, mais il y a des détails sur le plan math qui diffèrent).

Tout cela pour dire que bien que ta question mathématiquement correcte (je détaille ci-après), on utilise plus fréquemment les matrices, même lorsque la source de données était basée sur des quats.

Dans ton exemple, si tu veux connaître la position d’un vecteur après une rotation comprise entre Q1 et Q2, tu peux le faire ainsi :

Vector3 BlendRotation ( Quat Q1, Quat Q2, float inter, Vector3 v )

Quat Q = Slerp( Q1, Q2, t )
Quat Qv ( v.x, v.y, v.z, 0 )

Quat Qr = Q * Qv * ~Q

Return Vector3( Qr.x, Qr.y, Qr.z )

Note: ~Q pour le conjugué de Q
La rotation d’un vecteur par un quat est donnée par : Q * Qv * ~Q

En espérant que ce soit plus limpide qu’un fog Londonien.

A02halo  well, je connais cette impression  Ce qui est intéressant toutefois c’est qu’en fait on comprend tous les question posées par ce genre de problème math, c’est la formulation qui devant être précise, univoque qui rend la lecture difficile.

sangohan42
sangohan42
Niveau 9
23 septembre 2005 à 18:21:56

lol c´est vrai qu´on s´y perd ac toute ses phrases bizrre

je parle a a02halo

Fenix[74]
Fenix[74]
Niveau 10
23 septembre 2005 à 21:08:54

Cherchez pas les gars; c´est mort pour vous, c´est pas le meme monde :)
En revanche, un jour peut etre, vous parviendrez a comprendre ;)

dnob700
dnob700
Niveau 10
23 septembre 2005 à 21:18:57

Je n´ais peut-être pas tout compris, masi JY tu veux juste uen translattion entre les position décrite par les quaternions Q1 et Q2 ?

Si oui, c´est une combinaisons linéaires des deux qui suffit je suppose (avec des mots pour être humains on doit appeler ça une moyenne pondérée).

Par contre je ne vois pas l´interet du quaternions qui est exactement identique à un vecteur de R^4. Il y a juste une arithmétique dérrière, mais je ne vois pas à quoi elle peut servir ici. Si quelqu´un peut m´éclairer sur le sujet.

jejej
jejej
Niveau 9
23 septembre 2005 à 23:39:19

Je sais pas si il y a un rapport , mais j´avais lu que les matrices causaient un bug dont j´ai oublie le nom , lorsque par exemple le joueur tournait autour de deux axes differents ( axe x et z par exemple ) ...
Je crois que ça fait un effet bizarre .
enfin , c´est un bug courant , qu´evitent les quaternions . J´essayerais de retrouver le nom ...

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware