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] Comment gérer la souris avec les objets java3D ?


Sujet :

3D Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Par défaut [java3D] Comment gérer la souris avec les objets java3D ?
    Bonjour,

    je commence ce soir ma première immersion en java ...

    Je souhaiterai faire un projet avec de l'animation 3D (formes simples) gérée par la souris. Je voudrai donc savoir s'il est possible de gérer le déplacement des objets java3D avec la souris et de détecter les objets visés par la souris. et le cas échéant le nom de cette classe ?

    La réponse me permettra de savoir si mon projet est réalisable en java3D...

    Merci d'avance pour les réponses ou conseils.

  2. #2
    Membre éprouvé Avatar de Process Linux
    Inscrit en
    Septembre 2003
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 136
    Par défaut
    Oui , pour n'importe quel objet qui hérite une classe graphique (notamment un truc 3 D), il suffit d'implémenter la classe MouseListner pour intercépter les évévenement en réécrivant les méthode de cette classe dans ton objet graphique .
    exp
    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 class OGraphic extends ma_classe_graphique_de_base implements MouseLinstner
    {
    ......
    ......
    void mouseClicked(MouseEvent e) {....}
              //Invoked when the mouse button has been clicked (pressed and released) on a component. 
     void mouseEntered(MouseEvent e) 
              Invoked when the mouse enters a component. 
     void mouseExited(MouseEvent e) 
              Invoked when the mouse exits a component. 
     void mousePressed(MouseEvent e) 
              Invoked when a mouse button has been pressed on a component. 
     void mouseReleased(MouseEvent e) 
              Invoked when a mouse button has been released on a component. 
    }
    Maintenant pour que cela marche , il suffit que la classe de base ( de la biblituèque 3 D hérite de la classe Component.
    Voilà

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Par défaut
    Merci pour l'information.
    Je vais donc commencer à étudier cette classe .
    Connais-tu des endroits dans le forum qui traite de ce sujet ou des tutoriels ?

  4. #4
    Membre éprouvé Avatar de Process Linux
    Inscrit en
    Septembre 2003
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 136

  5. #5
    Invité
    Invité(e)
    Par défaut
    package : com.sun.j3d.utils.behaviors.mouse

    il y a plein de démos dans le jdk java3d

  6. #6
    Invité
    Invité(e)
    Par défaut
    un petit exemple :

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
     
    package net.crashtoot.testsUtils.j3d.Interaction;
     
    import java.applet.Applet;
    import java.awt.BorderLayout;
    import java.awt.Frame;
     
    import javax.media.j3d.BoundingSphere;
    import javax.media.j3d.BranchGroup;
    import javax.media.j3d.Canvas3D;
    import javax.media.j3d.TransformGroup;
     
    import com.sun.j3d.utils.applet.MainFrame;
    import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
    import com.sun.j3d.utils.behaviors.mouse.MouseTranslate;
    import com.sun.j3d.utils.behaviors.mouse.MouseZoom;
    import com.sun.j3d.utils.geometry.ColorCube;
    import com.sun.j3d.utils.universe.SimpleUniverse;
     
    //   MouseBehaviorApp renders a single, interactively rotatable,
    //   traslatable, and zoomable ColorCube object.
     
    public class MouseBehaviorApp extends Applet {
     
        public BranchGroup createSceneGraph() {
    	// Create the root of the branch graph
    	BranchGroup objRoot = new BranchGroup();
     
            TransformGroup objTransform = new TransformGroup();
            objTransform.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
            objTransform.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
     
            objRoot.addChild(objTransform);
            objTransform.addChild(new ColorCube(0.4));
            objRoot.addChild(new Axis());
     
            MouseRotate myMouseRotate = new MouseRotate();
            myMouseRotate.setTransformGroup(objTransform);
            myMouseRotate.setSchedulingBounds(new BoundingSphere());
            objRoot.addChild(myMouseRotate);
     
            MouseTranslate myMouseTranslate = new MouseTranslate();
            myMouseTranslate.setTransformGroup(objTransform);
            myMouseTranslate.setSchedulingBounds(new BoundingSphere());
            objRoot.addChild(myMouseTranslate);
     
            MouseZoom myMouseZoom = new MouseZoom();
            myMouseZoom.setTransformGroup(objTransform);
            myMouseZoom.setSchedulingBounds(new BoundingSphere());
            objRoot.addChild(myMouseZoom);
     
    	// Let Java 3D perform optimizations on this scene graph.
            objRoot.compile();
     
    	return objRoot;
        } // end of CreateSceneGraph method of MouseBehaviorApp
     
        // Create a simple scene and attach it to the virtual universe
     
        public MouseBehaviorApp() {
            setLayout(new BorderLayout());
            Canvas3D canvas3D = new Canvas3D(null);
            add("Center", canvas3D);
     
            BranchGroup scene = createSceneGraph();
     
            // SimpleUniverse is a Convenience Utility class
            SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
     
    	// This will move the ViewPlatform back a bit so the
    	// objects in the scene can be viewed.
            simpleU.getViewingPlatform().setNominalViewingTransform();
     
            simpleU.addBranchGraph(scene);
        } // end of MouseBehaviorApp (constructor)
        //  The following allows this to be run as an application
        //  as well as an applet
     
        public static void main(String[] args) {
            System.out.print("MouseBehaviorApp.java \n- a demonstration of using the mouse ");
            System.out.println("behavior utility classes to provide interaction in a Java 3D scene.");
            System.out.println("Hold the mouse button while moving the mouse to make the cube move.");
            System.out.println("     left mouse button      - rotate cube");
            System.out.println("     right mouse button     - translate cube");
            System.out.println("     Alt+left mouse button  - zoom cube");
            System.out.println("This is a simple example progam from The Java 3D API Tutorial.");
            System.out.println("The Java 3D Tutorial is available on the web at:");
            System.out.println("http://java.sun.com/products/java-media/3D/collateral");
            Frame frame = new MainFrame(new MouseBehaviorApp(), 256, 256);
        } // end of main (method of MouseBehaviorApp)
     
    } // end of class MouseBehaviorApp

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Par défaut
    Merci pour le tutoriel mais je l'ai déjà parcouru.

    Je vais tester les exemples et voir ce que je peux récupérer ou modifier pour mon projet (certainement un peu ambitieux pour mes premiers pas en java).
    A+

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    E:\Didier\CNAM\NFA019\Essais\java3D>javac MouseBehaviorApp.java
    MouseBehaviorApp.java:34: cannot find symbol
    symbol  : class Axis
    location: class net.crashtoot.testsUtils.j3d.Interaction.MouseBehaviorApp
            objRoot.addChild(new Axis());
                                 ^
    1 error
    J'ai essayé de compiler le code mais voici les messages d'erreur que j'ai....

  9. #9
    Invité
    Invité(e)
    Par défaut
    ha oui pardon, il y a une autre classe.

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
     
    /*
     * Getting Started with the Java 3D API written in Java 3D
     * 
     * This program demonstrates: 1. writing a visual object class In this program, Axis class defines a visual
     * object This particular class extends Shape3D See the text for a discussion. 2. Using LineArray to draw 3D
     * lines.
     */
    package net.crashtoot.testsUtils.j3d.Interaction;
     
    import javax.media.j3d.Geometry;
    import javax.media.j3d.GeometryArray;
    import javax.media.j3d.IndexedLineArray;
    import javax.media.j3d.Shape3D;
    import javax.vecmath.Point3f;
     
    public class Axis extends Shape3D {
     
        // //////////////////////////////////////////
        //
        // create axis visual object
        //
        public Axis() {
     
            this.setGeometry(createGeometry());
     
        }
     
        private Geometry createGeometry() {
            // create line for X axis
            IndexedLineArray axisLines = new IndexedLineArray(18, GeometryArray.COORDINATES, 30);
     
            axisLines.setCoordinate(0, new Point3f(-1.0f, 0.0f, 0.0f));
            axisLines.setCoordinate(1, new Point3f(1.0f, 0.0f, 0.0f));
            axisLines.setCoordinate(2, new Point3f(0.9f, 0.1f, 0.1f));
            axisLines.setCoordinate(3, new Point3f(0.9f, -0.1f, 0.1f));
            axisLines.setCoordinate(4, new Point3f(0.9f, 0.1f, -0.1f));
            axisLines.setCoordinate(5, new Point3f(0.9f, -0.1f, -0.1f));
            axisLines.setCoordinate(6, new Point3f(0.0f, -1.0f, 0.0f));
            axisLines.setCoordinate(7, new Point3f(0.0f, 1.0f, 0.0f));
            axisLines.setCoordinate(8, new Point3f(0.1f, 0.9f, 0.1f));
            axisLines.setCoordinate(9, new Point3f(-0.1f, 0.9f, 0.1f));
            axisLines.setCoordinate(10, new Point3f(0.1f, 0.9f, -0.1f));
            axisLines.setCoordinate(11, new Point3f(-0.1f, 0.9f, -0.1f));
            axisLines.setCoordinate(12, new Point3f(0.0f, 0.0f, -1.0f));
            axisLines.setCoordinate(13, new Point3f(0.0f, 0.0f, 1.0f));
            axisLines.setCoordinate(14, new Point3f(0.1f, 0.1f, 0.9f));
            axisLines.setCoordinate(15, new Point3f(-0.1f, 0.1f, 0.9f));
            axisLines.setCoordinate(16, new Point3f(0.1f, -0.1f, 0.9f));
            axisLines.setCoordinate(17, new Point3f(-0.1f, -0.1f, 0.9f));
     
            axisLines.setCoordinateIndex(0, 0);
            axisLines.setCoordinateIndex(1, 1);
            axisLines.setCoordinateIndex(2, 2);
            axisLines.setCoordinateIndex(3, 1);
            axisLines.setCoordinateIndex(4, 3);
            axisLines.setCoordinateIndex(5, 1);
            axisLines.setCoordinateIndex(6, 4);
            axisLines.setCoordinateIndex(7, 1);
            axisLines.setCoordinateIndex(8, 5);
            axisLines.setCoordinateIndex(9, 1);
            axisLines.setCoordinateIndex(10, 6);
            axisLines.setCoordinateIndex(11, 7);
            axisLines.setCoordinateIndex(12, 8);
            axisLines.setCoordinateIndex(13, 7);
            axisLines.setCoordinateIndex(14, 9);
            axisLines.setCoordinateIndex(15, 7);
            axisLines.setCoordinateIndex(16, 10);
            axisLines.setCoordinateIndex(17, 7);
            axisLines.setCoordinateIndex(18, 11);
            axisLines.setCoordinateIndex(19, 7);
            axisLines.setCoordinateIndex(20, 12);
            axisLines.setCoordinateIndex(21, 13);
            axisLines.setCoordinateIndex(22, 14);
            axisLines.setCoordinateIndex(23, 13);
            axisLines.setCoordinateIndex(24, 15);
            axisLines.setCoordinateIndex(25, 13);
            axisLines.setCoordinateIndex(26, 16);
            axisLines.setCoordinateIndex(27, 13);
            axisLines.setCoordinateIndex(28, 17);
            axisLines.setCoordinateIndex(29, 13);
     
            return axisLines;
     
        } // end of Axis createGeometry()
     
    } // end of class Axis
    Attention au nom de package, tu dois le changer pour que ca fonctionne dans ton projet.

    Ces classes font partie d'un tuto Sun :
    Copyright (c) 1996-1999 Sun Microsystems, Inc. All Rights Reserved.
    si tu veux je peux t'envoyer le package complet par mail.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Par défaut
    Merci Crash_TeTe J'ai mis ça dans éclipse et ca fonctionne

    Ce n'est pas très facile. Je découvre java, java3D et éclipse en même temps ...

    Je veux bien que tu m'envoies le package complet.

    Je ne sais pas si j'abuse mais tu n'aurais pas le même type d'exemple mais avec un déplacement du point de vue ou du canvas.

    En fait je voudrais savoir s'il est possible d'avoir les objets fixes dans le repère 3D et de ne déplacer que le canvas et l'observateur.

    Connais-tu des tutos qui traite de ce sujet.

    A+

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Par défaut
    Bon j'ai trouvé un tuto sur java3D intéressant sur le site d'Alain MARI : http://deven3d.free.fr/java3d/java3d.htm

    Je vais potasser un peu (en fait beaucoup...). Je n'ai pas eu de réponse à ma dernière question mais peut-être que la réponse est dans le tuto...

    Je considère donc ce sujet résolu.

    A+
    et merci pout toutes les infos.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 169
    Par défaut
    effectivement, il y a la réponse à ta derniere question sur son tuto.

    pour ceux que ça interesse, il faut juste récuperer le TransforGroup de l'univers. Par exemple avec un SimpleUniverse s'appelle su :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     TransformGroup tg = su.getViewingPlatform().getViewPlatformTransform();

  13. #13
    Invité de passage
    Inscrit en
    Mai 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 1
    Par défaut besoin d'aide
    salut
    j'ai besoin de code source de multiples vues avec comportements de souris

  14. #14
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Citation Envoyé par mamiamounti Voir le message
    salut
    j'ai besoin de code source de multiples vues
    salut.
    http://raphaello.univ-fcomte.fr/ig/j...ewPlatform.htm

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/04/2010, 15h20
  2. Réponses: 1
    Dernier message: 21/10/2005, 13h08
  3. Pb avec les objets???
    Par bliml dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 19/04/2005, 15h39
  4. Comment gérer un nombre inconnu d'objet ?
    Par Clad3 dans le forum C++
    Réponses: 28
    Dernier message: 12/03/2005, 11h55
  5. Réponses: 5
    Dernier message: 29/10/2004, 16h20

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