OVH Cloud OVH Cloud

[Java3D] Animer un changement de hauteur d'une Box

5 réponses
Avatar
Cedric.Olmanst
Bonjour,

Je cr=E9e une barre avec une Box, et j'aimerais que sa tailler augmente
jusqu'=E0 une certaine valeur. L'utilisation d'un ScaleInterpolator,
bien que facile, n'est pas appropri=E9, =E9tant donn=E9 que je ne veux
changer QUE le hauteur.

J'ai donc cherch=E9 dans le tutoriel de Sun, et visiblement, il n'y a
rien d'autre qui peut me permettre de la faire. J'ai vaguement pens=E9
au Morph, mais visiblement, pour utiliser un Morph, il faut un tableau
de GeometryArrays, mais j'utilise une Box et je ne vois pas comment je
pourrais r=E9cup=E9rer sa Geometry.

Enfin voil=E0, je suis assez perdu. Je ne vois m=EAme pas un moyen de
changer simplement la taille apr=E8s la construction, d'ailleurs.

Est-ce que l'un d'entre vous aurait une piste pour me guider ?

5 réponses

Avatar
Ploc
wrote:
Bonjour,

Je crée une barre avec une Box, et j'aimerais que sa tailler augmente
jusqu'à une certaine valeur. L'utilisation d'un ScaleInterpolator,
bien que facile, n'est pas approprié, étant donné que je ne veux
changer QUE le hauteur.


Pas certain de la reponse, mais, il y'a un constructeur de
ScaleInterpolator qui prend un axe de transformation. Ca m'a l'air de
convenir, non?

"
ScaleInterpolator(Alpha alpha, TransformGroup target, Transform3D
axisOfTransform, float minimumScale, float maximumScale)
Constructs a new scaleInterpolator object that varies its
target TransformGroup node's scale component between two scale values
(minimumScale and maximumScale).
"

Avatar
Cedric.Olmanst
Pas certain de la reponse, mais, il y'a un constructeur de
ScaleInterpolator qui prend un axe de transformation. Ca m'a l'air de
convenir, non?


Merci, je vais voir ça :)

Avatar
Cedric.Olmanst
Salut, je vais encore t'embêter un peu :p

En fait, je met l'axe de transformation dans mon ScaleInterpolator,
soit via son constructeur, soit via un setTransformAxis(Transform3D)...
et ça ne change strictement rien... je peux mettre les lignes en
commentaire, ça ne change rien. Via un simple setScale(Vector3D) ça
marche très bien (donc pas animé ein) mais pour animer ce changement
d'échelle, j'y arrive vraiment pas... Quoique je tente (méthode ou
nombres), j'ai toujours le même résultat, un bidule qui grandit
suivant tous les axes et dans les mêmes proportions.

Pour un ScaleInterpolator, il ne faut pas affecter le Transform3D au
TransformGroup, mais j'ai essayé en désespoir de cause, et ça ne
change rien.

Ah, et mes barres sont légèrement transparentes :p

Si tu vois une petite erreur dans ces quelques lignes de code, ça
pourrait m'aider, si t'as le temps :) Il y a un constructeur de
ScaleInterpolator plus complet, mais ça ne change rien :)

//===== L'ANIMATION =====

// groupe
TransformGroup animGroup = new TransformGroup();
animGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

// interpolateur
Alpha myAlpha = new Alpha(-1, 5000);
ScaleInterpolator interpol = new ScaleInterpolator(myAlpha, animGroup);
BoundingSphere bounds = new BoundingSphere();
interpol.setSchedulingBounds(bounds);

// transformation
transform3D anim = new Transform3D();
anim.setScale(new Vector3d(1, 20, 1));
interpol.setTransformAxis(anim);
animGroup.addChild(interpol);

//===== RETOUR =====
animGroup.addChild(bar);
objRoot.addChild(animGroup);
objRoot.compile();
return objRoot;
Avatar
Ploc
wrote:
Salut, je vais encore t'embêter un peu :p

En fait, je met l'axe de transformation dans mon ScaleInterpolator,
soit via son constructeur, soit via un setTransformAxis(Transform3D)...
et ça ne change strictement rien... je peux mettre les lignes en
commentaire, ça ne change rien. Via un simple setScale(Vector3D) ça
marche très bien (donc pas animé ein) mais pour animer ce changement
d'échelle, j'y arrive vraiment pas... Quoique je tente (méthode ou
nombres), j'ai toujours le même résultat, un bidule qui grandit
suivant tous les axes et dans les mêmes proportions.

Pour un ScaleInterpolator, il ne faut pas affecter le Transform3D au
TransformGroup, mais j'ai essayé en désespoir de cause, et ça ne
change rien.


Exact, j'ai un peu mieux regarde le javadoc et on peut y lire:
"Scale interpolation behavior. This class defines a behavior that
modifies the uniform scale component of its target TransformGroup by
linearly interpolating".

Bref, il va falloir le faire a la main en etendant
javax.media.j3d.TransformInterpolator ou en utilisant un Morph.

Avatar
Ced
Je viens de le faire, ça fonctionne à merveille. Merci :)