Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[java 3D] translations et rotations

2 réponses
Avatar
anotherboo
Bonjour ,

Je debute sur l'api java3D et je rencontre des problemes pour
comprendre comment coder des rotations et translations.

J ai un univers ds lequel sont dispos=E9es des spheres.
je voudrais cr=E9er des cones qui ont la base sur une sphere ( ou a une
distance de 1.1R pour rendre tout cela plus joli) et dont le sommet
serait a 1.1R du centre d une autre shere.
Donc je dois realiser une tralation selon un vecteur et 2 rotations sur
les axes X et Z.
Donc mon probleme est que je ne parvient pas =E0 positionner le cone ni
au bon endroit, ni vers la bonne direction.

J ai aussi un peu de mal a apprehender une methode pour ecrire ces
transformations.
Utiliser des Transform3D pour chaque rotations/transformations ou
utiliser directement des matrices.

Cela fait qq heures que je m evertue a cela sans grands r=E9sultats.

Pour d=E9tailler un peu plus un point d incompr=E9hension :
le point pivot et de translation de mon cone se trouve :
- au centre de la base du cone
- hauteur / 2
ce qui fait que lorsque je le translate il traverse la sphere.

Losque je fait d abord une translation en Y de H/2 pour ensuite
effectuer mes rotaions et une nouvelles translation , le cone se trouve
completement perdu.

J ai du mal a comprendre dans quel ordre sont effectu=E9s les actions et
ce qu elles impliquent vraiment .

2 réponses

Avatar
Boogabi
J ai du mal a comprendre dans quel ordre sont effectués les actions et
ce qu elles impliquent vraiment .


Je ne connais pas Java3D, mais si ça doit forcément ressembler un peu à
OpenGL, en tout cas dans le principe du calcul matriciel qui est
derrière (mathématiquement, c'est forcément comme ça puisque c'est la
meilleure manière).

Donc tes rotations, translation et changements d'échelle se font à
l'envers. Enfin je parle bien entendu de la séquence de tes
transformations. Donc si tu fais une rotation puis une translation...
(dans ton code), ça fera en réalité la translation puis la rotation.
C'est un peu spécial à convevoir.

Attention au fait que tes transformations seront persistantes. Si tu fais:
//====================== // dessin du premier cube
//
rotation
translation
dessiner un cube
//====================== // dessin du second cube
//
translation
dessiner un autre cube

Il va de soi que tu auras d'abbord un cube qui aura été translaté puis
roté... et un autre cube qui aura subi une translation par rapport aus
translations déjà efectuées.

En OpengGL, pour rétablir l'ancien système de coordonnées (avant les 2
premières transalations, on ferait un PopMatrix() qui a pour effet de
poper la dernière matrice de transformations de la pile de
transformations. Evidement, il faut avoir fait un PushMatrix() juste
avant les deux transformations alors. LoadIdentity() rétablirait le
système de coordonnées de base (donc avec les x vers la droite, les y
vers le haut, les z vers toi, le centre, et un dessin se ferait alors
par défaut en plein milieu de l'écran).

Enfin, ce n'est certainement pas très clair pour toi (il faut dire que
les explications, c'est pas trop mon truc). Mais je ne pourrais
expliquer mieux que quand je me serais mis à Java3D. En fait là, je
commencer une semaine de congé, puis je fais un stage de 12 semaines
pour développer une API pour faire des graphes en 3D pour que les gars
chez qui je vais bosser puissent implémenter ce bidule dans leur appli
de comptabilité. Enfin voilà, tout ça pour dire que je vais devoir me
mettre à Java3D en vitesse et que je pourrais probablement t'aider un
peu mieux.

Avatar
anotherboo
Hello, et merci pour cet eclaircissement sur l ordre des actions,
j avance un petit peu mais cela reste flou.
Je pense que j ai besoin d un petit cours sur les matrices et vecteurs
pour me rendre compte de se que je fait.
Sachant en plus qu il y l air d avoir bcp de moyen different pour
arrivé a mes fins.
a suivre donc....