Attacher un objet à la plate-forme de vue dans Java3D


Dans mon application Java3D, j'ai une plate-forme de visualisation mobile (grâce aux comportements "OrbitBehavior" et "KeyNavigatorBehavior" par exemple) afin que je puisse changer mon point de vue sur la scène. Maintenant, je voudrais ajouter un objet qui est "statique" sur ma vue, c'est-à-dire toujours vu de la même manière lorsque je déplace ma vue (par exemple, comme le pistolet du joueur dans un FPS). À l'heure actuelle, j'ai essayé les 2 approches suivantes de ce problème, mais aucune d'entre elles n'a fonctionné.

1/ Joindre directement un objet à la plate-forme ViewingPlatform (via un BranchGroup dédié plus un TransformGroup). Dans ce cas, mon objet n'est tout simplement pas affiché (je ne suis absolument pas sûr qu'il soit autorisé à effectuer une telle opération...). Voici cette partie de mon code:

Code: (avec view la plate-forme de visualisation)

BranchGroup fixedBG = new BranchGroup();
TransformGroup fixedTG = new TransformGroup();
fixedTG.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
fixedTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
Transform3D transfo = new Transform3D();
transfo.setTranslation(new Vector3f(0.2f, 0.0f, -1.0f));
fixedTG.setTransform(transfo);
ColorCube fixedCube = new ColorCube(0.2);
fixedTG.addChild(fixedCube);
view.addChild(fixedBG);

2/ Appliquer à mon objet la même transformation ( rotation + translation; récupéré via getTransform () sur getViewPlatformTransform () - J'ai également essayé quelque chose de plus complexe ici, avec des opérations entre ces transformations et les positions initiales de la vue PF et de l'objet) comme celle de la plate-forme de visualisation. Je fais tout cela en temps réel, avec un comportement dédié (mêmes conditions de réveil que les comportements modifiant l'emplacement de la vue). Ici, mon objet disparaît lorsque je déplace la vue, puis réapparaît parfois, lorsque j'utilise l'action zoom/dézoom du KeyNavigator (mais d'une manière vraiment instable).

Je suis sûr que ce que j'essaie de faire est faisable et probablement tout à fait simple, mais maintenant, je n'ai aucune idée...

Merci d'avance pour votre aide

(PS: Comme l'anglais n'est pas ma langue maternelle, je peux être assez désordonné pour expliquer mon problème: n'hésitez pas à me demander d'écrire à nouveau des parties non compréhensibles)

Author: PhiLho, 2009-10-08

1 answers

Je ne suis pas sûr à 100% si cela fonctionnerait, mais j'ai examiné de la documentation - (http://graphcomp.com/info/specs/java3d/j3dguide/Intro.doc.html#47470) par exemple, et je pense que vous devez inverser l'ordre dans le graphique de scène. Donc, normalement, votre plate-forme de vue se bloque d'un groupe de transformation qui se bloque d'un groupe de branche qui se bloque des paramètres régionaux. Le groupe de transformation est ce qui oriente la vue. Si vous attachez votre ColorCube à ce groupe de transformation, votre plate-forme de vue à cette couleur cube, puis la vue et le cube doivent se déplacer ensemble. Vous pouvez interposer un autre groupe de transformation, je pense, pour décaler le cube de la vue. L'utilisateur contrôlant la caméra manipule le groupe de transformation plus haut dans la branche.

 2
Author: Mikeb, 2009-10-08 13:59:34