Bonjour,
Dans mon application Java3D, je dispose d'une viewing platform "mobile" (via les behaviors "OrbitBehavior" et "KeyNavigatorBehavior" notamment) qui me permet de changer de point de vue par rapport à ma scène.
Je souhaiterais maintenant afficher un objet fixe par rapport à ma vue, c'est-à-dire toujours visible de la même façon quelque soit sa position et son orientation (par exemple, un peu comme le fusil du joueur dans un jeu de tir à la première personne). J'ai tenté les 2 approches suivantes, mais pour l'instant, aucune n'a fonctionné :
1/ Attacher l'objet directement à la ViewingPlatform (via un BranchGroup + un TransformGroup) : dans ce cas, l'objet n'est manifestement pas affiché (je ne suis pas persuadé qu'on ait le "droit" de faire ceci en Java3D...).
Code : (avec view la ViewingPlatform)
2/ Appliquer à l'objet la même transformation (rotation + translation, récupérées via getTransform() sur getViewPlatformTransform()) que celle de la ViewingPlatform (en temps réel, via une behavior dédiée, avec les mêmes wakeupConditions que pour les comportements modifiant la vue). Dans cet essai, l'objet disparait, puis réapparait de façon instable (et uniquement lorsque j'utilise le zoom/de-zoom du KeyNavigator).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 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);
Je suis persuadé que ce que je souhaite faire est bien faisable et probablement assez facilement, mais là, j'avoue que je ne trouve pas d'autres pistes...
Merci d'avance
Partager