2009-10-08 5 views
3

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, j'aimerais ajouter un objet qui est "statique" sur ma vue, c'est-à-dire toujours vu de la même manière lorsque je bouge ma vue (par exemple, comme le pistolet du joueur dans un FPS). Maintenant, j'ai essayé les 2 approches suivantes à ce problème, mais aucun d'eux n'a fonctionné. Attachez directement mon objet à 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 en fait ...). C'est cette partie de mon code:Joindre un objet à la plate-forme de vue en Java3D

code: (avec view le ViewingPlatform)

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 aussi essayé quelque chose de plus complexe ici, avec des opérations entre ces transformations et les positions initiales de vue PF et object) comme plateforme 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 de manière très instable).

Je suis sûr que ce que je suis en train de faire est faisable et probablement assez simple, mais maintenant, je n'ai pas la moindre idée ...

Merci par avance pour votre aide

(PS: Comme l'anglais n'est pas ma langue maternelle, je peux être assez en désordre dans l'explication de mon problème: n'hésitez pas à me demander d'écrire à nouveau des parties incompréhensibles)

+0

Je ne l'ai pas essayé, mais que se passe-t-il si vous attachez juste ceci après que vous ayez fait toutes les transformations, afin qu'elles ne soient pas affectées. –

+0

Je n'ai pas regardé Java3d dans quelques années, mais attacher un objet à la plate-forme de visualisation me semble correct. Essayez de le traduire autour pour vous assurer que vous ne l'avez pas localisé derrière la caméra? – Mikeb

+0

@James Black: le problème est que mes transformations sur vue sont effectuées par l'utilisateur, lors de l'exécution. @Mikeb: J'ai essayé plusieurs traductions (+ z/-z - dans les deux cas) sur un exemple vraiment basique (un seul ColorCube): ce n'était pas ça. – Sobe

Répondre

2

Je ne suis pas sûr à 100% si cela fonctionnerait, mais j'ai passé en revue une certaine documentation - (http://graphcomp.com/info/specs/java3d/j3dguide/Intro.doc.html#47470) par exemple, et je pense que vous devez inverser la commande dans le graphe de scène. Ainsi, normalement, votre plate-forme de vue dépend d'un groupe de transformation qui dépend d'un groupe de branches qui suspend les paramètres régionaux. Le groupe de transformation est ce qui oriente la vue. Si vous attachez votre ColorCube à ce groupe de transformation, puis votre plate-forme d'affichage à ce cube de couleur, la vue et le cube doivent se déplacer ensemble. Vous pourriez interposer un autre groupe de transformation, je pense, pour compenser le cube de la vue. L'utilisateur contrôlant la caméra manipule le groupe de transformation plus haut dans la branche.

+0

Oui! C'est exactement cela: en fait, ViewPlatform est un enfant du nœud ViewPlatformTransform, donc en attachant mon objet (cube) à ce groupe de transformation, cela fonctionne très bien. Merci beaucoup pour votre aide. – Sobe

Questions connexes