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 :

integrer une fenetre 3D


Sujet :

3D Java

  1. #1
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Par défaut integrer une fenetre 3D
    bonjour

    j'ai un onglet qui est dans une classe OngletGraph qui extend JPanel.
    Cette onglet est lui meme diviséé en 3 panel. Comment integrer une figure 3D (par exemple un cube 3D qui tourne) à un de ces Panels.
    merci

  2. #2
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    tu veux intégrer quoi comme 3D
    - J3D
    - coder toi meme le moteur : Graphics.drawLine suffirat
    - 3DS Max
    - un gif
    - une succession d'image...

    Les post du type commençant par "je veux" ( sous entendu "FAITES le boulot à ma place !" , et ne faisant qu'une ligne voire deux alors que le sujet mériterait des dizaines de milliers de pages de discussion commencent à me saouler...

    Fais un effort mince !

  3. #3
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Par défaut
    eh calme tes chevaux pepère, si ca te soule, passe ton chemin.

    "je veux" tu veux que je dise koi... " je suis en train ..." et en plus où tu as vu "je veux" dans mon post???? Moi c les remarque comme les tiennes qui me soule.

    Bref pour ceux que ca interesse, je suis en train d'integrer un dessin 3D qui tournera selon un certain angle en fonction des données recu en temps réelle. C'est pour cela qui me faut integrer ce dessin dans ma frame, car pour l'instant ca ouvre une autre fenetre.

  4. #4
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    [mode coup de geule OFF]
    Je maintient le fait que ton post manque de précision.
    Comment tu le fais ton cube ? tu traces les lignes directement avec Graphics.drawLine(...) en prenant en compte les coordonnées du cube ainsi que la position/direction de l'observateur et du cube ?
    Tu utilises de l'openGL ?
    JOGL ?
    LWJGL ?
    J3D ?
    LG3D ?
    Xith3D ?
    ...
    A moins que ton problème ne concerne pas la 3D elle-même mais la gestion des layouts dans tes panels dans tel cas, je peux te répondre que si tu veux séparer un panel en 3, tu peux utiliser un BorderLayout pour une taille adaptée à chaque Panel, ou bien un GridLayout.

  5. #5
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Visiblement, tout ce qui concerne le dessin du cube est déjà fait, puisqu'il est déjà visible dans une autre fenêtre.

    Donc ça serait au niveau du layout, non ? Malgré les formes, iohack a dit juste. Cependant, il faut que cette autre fenêtre vienne d'un code java dont tu as les sources.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  6. #6
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Par défaut
    desloé de repondre aussi tard,
    voici le code principale

    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
    93
    94
    95
    96
    97
    98
    99
    100
    101
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.media.j3d.Alpha;
    import javax.media.j3d.BoundingSphere;
    import javax.media.j3d.BranchGroup;
    import javax.media.j3d.RotationInterpolator;
    import javax.media.j3d.Transform3D;
    import javax.media.j3d.TransformGroup;
    import javax.swing.JButton;
    import javax.swing.JDesktopPane;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.SpringLayout;
    import javax.vecmath.Point3d;
    import javax.vecmath.Vector3d;
    import com.sun.j3d.utils.geometry.ColorCube;
    import com.sun.j3d.utils.universe.SimpleUniverse;
     
     
    public class IHM3 extends JFrame{
     
    // le constructeur
     
    public IHM3 ()
    {
    //Creation de la frame et des panels
    JFrame frame = new JFrame("essai1");
    //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel pane;
     
    JPanel titre;
     
    Cube3 cub = new Cube3();
     
     
    pane= new JPanel(new BorderLayout());
     
     
    titre = new JPanel(new FlowLayout());
    Color c = new Color(90,90,200);
    titre.setBackground(c);
     
     
    /***********************************************/ 
     
    JButton bouton1 = new JButton("lancer");
    titre.add(bouton1);
    bouton1.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent arg0)
    {
    if( JOptionPane.showConfirmDialog(null,"Voulez-vous lancer la simultion ?","Confirmation",JOptionPane.OK_CANCEL_OPTION)==JOptionPane.OK_OPTION )
    {
    Clique.bouton1_clic(arg0);
    }
    }
    }
    );
     
    /***************************************************/
     
    JButton bouton2 = new JButton("arreter");
    titre.add(bouton2);
    bouton2.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent arg0)
    {
    if( JOptionPane.showConfirmDialog(null,"Voulez-vous arrêter la simultion ?","Confirmation",JOptionPane.OK_CANCEL_OPTION)==JOptionPane.OK_OPTION )
    {
    Clique.bouton2_clic(arg0);
    }
    }
    }
    );
     
     
    pane.add(titre,BorderLayout.NORTH);
    pane.add(cub,BorderLayout.SOUTH);
    //pane.add(cu,BorderLayout.SOUTH); 
     
    frame.getContentPane().add(pane,BorderLayout.CENTER);
    frame.pack();
    frame.setVisible(true); 
     
    }
     
     
    public static void main(String[] args) 
    {
    IHM3 frame = new IHM3();
    }
     
    }
    
    et voici le code du cube3D

    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
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    //Cube avec rotation suivant les trois axes
     
    import java.awt.Component;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.vecmath.*;
    import javax.media.j3d.*;
    import com.sun.j3d.utils.geometry.ColorCube;
    import com.sun.j3d.utils.universe.SimpleUniverse;
     
     
    public class Cube3 extends JPanel{
     
    private static final double DEG_TO_RAD = 0.017453292;
     
    public static void Cube3(){
    //super("Première IHM");
    //Creation Univers utilise par defaut un viewer existant
    SimpleUniverse univers = new SimpleUniverse();
     
    //Canvas3D canvas3D = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
    //SimpleUniverse univers = new SimpleUniverse(canvas3D);
     
    //Definition systeme de coordonnees et point de vue
    univers.getViewingPlatform().setNominalViewingTransform();
     
    //Creation de la scene 3d
    BranchGroup scene = createSceneGraph();
     
    univers.addBranchGraph(scene);
     
    //JPanel component = new JPanel();
    //component.ad
    }
     
    public static BranchGroup createSceneGraph(){
     
    //creation de la branche
    BranchGroup objRoot=new BranchGroup();
    //creation du cube
    ColorCube cube = new ColorCube(0.3);
     
    // ----------- PREMIERE TRANSFORMATION --------- 
    //on cree le groupe de transfomation pour rotation dynamique
    TransformGroup objrotate1= new TransformGroup();
    //on autorise la transformationde l'objet rotation dynamique
    objrotate1.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
    //on defini l'animation de l'objet :
    Alpha rotAlpha = new Alpha(-1,4000); 
    //Rotation
    RotationInterpolator rotInt = new RotationInterpolator(rotAlpha,objrotate1); 
    BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0),2.0);
     
    rotInt.setSchedulingBounds(bounds);
     
    //------------ FIN PREMIERE TRANSFORMATON -----------
     
    //--------- DEUXIEME TRANSFORMATION -----------------//
     
    //On cree la 1er transformation
    Transform3D rotateX = new Transform3D();
    rotateX.rotX(30.0*DEG_TO_RAD);
     
    //on cree la 2eme transformation
    Transform3D rotateY = new Transform3D();
    rotateY.rotY(30.0*DEG_TO_RAD);
    //on associe les deux axes de rotations
    rotateX.mul(rotateY);
     
    //on cree la 2eme transformation
    Transform3D rotateZ = new Transform3D();
    rotateZ.rotZ(20.0*DEG_TO_RAD);
    //on associe les deux axes de rotations
    rotateX.mul(rotateZ); 
     
    //Translation
    Vector3d vector = new Vector3d(0.6,0.0,0.0);
    rotateX.setTranslation(vector);
    //on cree le groupe de transfomation pour rotation statique
    TransformGroup objrotate2 = new TransformGroup(rotateX);
     
    //------------ FIN DEUXIEME TRANSFORMATON -----------
    //---------- CREATION DE LA BRANCHE -------------
    objrotate2.addChild(cube);
     
    objrotate1.addChild(rotInt);
     
    objrotate1.addChild(objrotate2);
     
    objRoot.addChild(objrotate1);
     
    return(objRoot);
    }
     
     
    public static void ferme(){
     
    SimpleUniverse univers = new SimpleUniverse();
     
    //univers.addBranchGraph(scene);
    univers.cleanup(); 
     
    }
     
     
    }
    
    voili voilou

  7. #7
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Bon, apparemment le cube est un composant, donc c'est très simple : il suffit d'appeler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Cube3 cube = new Cube3();
    monPanel = new JPanel(new BorderLayout());
    monPanel.add(cube, BorderLayout.CENTER);
    monPanel est le JPanel qui fait partie de ta classe OngletGraph, auquel il faut intégrer le cube. Tu pourrais aussi bien l'ajouter directement dans ton OngletGraph, sans passer par un JPanel.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  8. #8
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Par défaut
    merci de ta reponse, mais c'est ce que je fais déjà dans la classe IHM3, je defini le composant cube que j'integre à mon panel. mais ca crée quand meme une autre fenetre .

    a

  9. #9
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    On peut voir le code des méthodes :
    - Clique.bouton1_clic
    - Clique.bouton2_clic
    S'il te plaît ?

    Il n'y a que là que la 2e JFrame peut être appelée.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  10. #10
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Par défaut
    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
    import java.awt.event.ActionEvent;
    public class Clique {
     
     public static void bouton2_clic(ActionEvent arg0)
     {
      System.out.println("fin anime");
      Cube3.ferme();
     }
     public static void bouton1_clic(ActionEvent arg0)
     {
      System.out.println("debut anime");
      Cube3.Cube3();
     
     }
     
    }

  11. #11
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Bon, ton code a l'air un peu gros, alors on va essayer autrement :
    - à quel moment la fenêtre apparaît-elle ? Quand tu cliques sur le bouton "lancer" ?
    - essaie de renommer la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static void Cube3()
    en constructeur : Et de commenter l'appel dans la fonction bouton2_clic.

    Est-ce que la fenêtre apparaît à un autre moment ?
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  12. #12
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Par défaut
    oui mais dans bouton1_clic, il ne veut plus de
    et si je commente cette fonction et que je lance l'appli, un message d'erreur tourne en boucle dans l'appli:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    
    wglCreateContext Failed: Le format pixel n'est pas valide.
    

  13. #13
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Par défaut
    en fait ceux-ci n'était kun entrainement pour mon projet.
    Mon but finale est de créé un cercle avec une droite passant par son centre, le but étant que cette droite s'incline plus ou moin celon les données lui arrivant, ca ressemble exactement au rouli d'un avion ou bien à l'inclinaison d'un bateau.

    et la je bug

  14. #14
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Ben là je vois plus trop quoi te dire ... épluche ton code et regarde si tu ouvres pas une JFrame à un moment (setVisible(true)).
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  15. #15
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Par défaut
    sinon tu trouves judicieu de faire ma mon cercle et la droite avec java3D??? parce qu'il doit lire les données arrivant pour faire une mise a jour pour incliner la droite

  16. #16
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Hélas je ne connais pas Java3D. En tout cas, si c'est juste un cercle et une droite qui tourne, tu peux largement t'en sortir avec l'API standard, et je pense que ça sera plus simple.

    Fais des recherches sur la méthode paintComponent(Graphics g)
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

Discussions similaires

  1. Integrer Adobe Reader a une fenetre Java, avec Qt
    Par Freeluvs dans le forum Débuter avec Java
    Réponses: 14
    Dernier message: 28/01/2010, 08h53
  2. integrer une fenetre sdl dans un environement gtk
    Par nikoul dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 10/01/2010, 16h42
  3. Réponses: 3
    Dernier message: 08/07/2006, 19h59
  4. Réponses: 3
    Dernier message: 16/02/2006, 12h52
  5. gérer les jpg dans une fenetre directdraw???
    Par Anonymous dans le forum DirectX
    Réponses: 1
    Dernier message: 14/06/2002, 13h39

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