IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

3D Java Discussion :

[JAVA3D] centrer la vue sur un objet


Sujet :

3D Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 18
    Par défaut [JAVA3D] centrer la vue sur un objet
    Bonjour tout le monde
    J'ai créer un environnement java3d avec plusieurs sphère et j'aimerais pouvoir centrer la vue sur une de ces sphère. J'ai donc créer une classe ViewGraph qui me permet premièrement de créer la vue et deuxièmement de centrer la vue sur un point (le centre d'une de mes spheres).
    Voilà le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    import javax.media.j3d.BoundingLeaf;
    import javax.media.j3d.BoundingSphere;
    import javax.media.j3d.BranchGroup;
    import javax.media.j3d.Canvas3D;
    import javax.media.j3d.PhysicalBody;
    import javax.media.j3d.PhysicalEnvironment;
    import javax.media.j3d.Transform3D;
    import javax.media.j3d.TransformGroup;
    import javax.media.j3d.View;
    import javax.media.j3d.ViewPlatform;
    import javax.vecmath.Point3d;
    import javax.vecmath.Vector3f;
     
    import com.sun.j3d.utils.behaviors.keyboard.KeyNavigatorBehavior;
     
    public class ViewGraph{
     
    		private BranchGroup viewBranch ;
    		private TransformGroup viewXfmGroup;
     
    		public ViewGraph (Canvas3D c){
    		viewBranch = new BranchGroup();
    		Transform3D viewXfm=new Transform3D();
    		viewXfm.set(new Vector3f(0.0f,0.0f,10.0f));
    		viewXfmGroup =new TransformGroup(viewXfm);
    		viewXfmGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
    		viewXfmGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
     
    		BoundingSphere movingBounds=new BoundingSphere(new Point3d(0.0,0.0,0.0),100.0);
    		BoundingLeaf boundLeaf = new BoundingLeaf(movingBounds);
     
    		ViewPlatform myViewPlatform=new ViewPlatform();
    		viewXfmGroup.addChild(boundLeaf);
    		PhysicalBody myBody=new PhysicalBody();
    		PhysicalEnvironment myEnvironment = new PhysicalEnvironment();
    		viewXfmGroup.addChild(myViewPlatform);
    		viewBranch.addChild(viewXfmGroup);
    		View myView=new View();
    		myView.addCanvas3D(c);
    		myView.attachViewPlatform(myViewPlatform);
    		myView.setPhysicalBody(myBody);
    		myView.setPhysicalEnvironment(myEnvironment);
     
    		KeyNavigatorBehavior keyNav=new KeyNavigatorBehavior(viewXfmGroup);
    		keyNav.setSchedulingBounds(movingBounds);
    		viewBranch.addChild(keyNav);
    		}
     
    		public BranchGroup getViewBranch(){
    			return viewBranch;
    		}
     
    		public void centerViewOn(Point3d Pt){
    			BoundingSphere mybounds =(BoundingSphere)viewBranch.getBounds();
    			double t[]=new double[3];
    			mybounds.getCenter(Pt);
    			Pt.get(t);
     
    			/* we center the camera on the point */
    			TransformGroup cameraPosition=viewXfmGroup;
     
    			Transform3D trans =new Transform3D();
    			trans.setTranslation(new Vector3f((float)t[0],(float)t[1],(float)t[2]+(float) mybounds.getRadius()*3));
    			cameraPosition.setTransform(trans);
     
    		}
    }

    Le problème est que sa ne fait absolument pas ce que je veux...
    Si quelqu'un pouvait m'aider se serait super.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 18
    Par défaut
    J'ai tenté une autre méthode mais sa ne marche toujours pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public void centerViewOn(Point3d Pt){
     
    			/* we take the current position of camera */
    			TransformGroup cameraPosition=viewXfmGroup;
     
    			Transform3D trans =new Transform3D();
    			cameraPosition.getTransform(trans);
    Vector3f curr_position=new Vector3f();
    trans.get(curr_position);
     
    trans.lookAt(new Point3d(Pt.x+curr_position.x,Pt.y+curr_position.y,Pt.z+curr_position.z),Pt,new Vector3d(0,1,0));
     
    cameraPosition.setTransform(trans);
     
    		}
    Cela centre bien sur le point que je passe en argument.
    Le seul problème qu'il me reste à résoudre est de récupérer la position courante de ma sphere car celle -ci est en rotation par rapport à la sphere centrale.

Discussions similaires

  1. Réponses: 13
    Dernier message: 04/05/2009, 00h43
  2. Problème d'actionListener sur un objet java3D
    Par Hipopopol dans le forum Débuter
    Réponses: 0
    Dernier message: 11/12/2008, 16h23
  3. [Java3D] Cumuler les Appearance sur un objet?
    Par themoye dans le forum 3D
    Réponses: 0
    Dernier message: 22/09/2008, 20h08
  4. [JTable] centrer la vue sur une ligne
    Par vanhel dans le forum Composants
    Réponses: 1
    Dernier message: 20/08/2008, 12h12
  5. [Java3D] Textures sur un objet
    Par vero55 dans le forum 3D
    Réponses: 3
    Dernier message: 18/04/2007, 17h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo