Bonjour,

Je souhaite simplement déplacer un objet 3D sur l'axe Y en cliquant sur un JButton.

J'arrive bien à récupérer l'événement du bouton :
ButtonListener.java
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
class ButtonListener implements ViewerConstants, ActionListener {
 
    public void actionPerformed(ActionEvent e) {
 
        if (e.getActionCommand().equals("up")) {
            System.out.println("Up");
            Transform3D temp = new Transform3D();
            panTransform.getTransform(temp);
            Transform3D tempUp = new Transform3D();
            tempUp.set(new Vector3f(-0.6f, 0.0f, -0.5f));
            temp.mul(tempUp);
            panTransform.setTransform(temp);
        }
   }
}
De plus, mon objet est bien créer (un ensemble de points Shape3D) et est visible dans mon Canvas :
JPanel3D.java :
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
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package viewer;
 
import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
import com.sun.j3d.utils.behaviors.mouse.MouseTranslate;
import com.sun.j3d.utils.behaviors.mouse.MouseWheelZoom;
import com.sun.j3d.utils.universe.SimpleUniverse;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.GraphicsConfiguration;
import java.awt.Toolkit;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.swing.JPanel;
import javax.vecmath.Point3f;
import javax.vecmath.Vector3f;
 
/**
 * Construction d'un JPanel contenant une sphere couleur
 */
public class JPanel3D extends JPanel implements ViewerConstants {
 
    Canvas3D canvas3D = null;
    Point3f origin = new Point3f();
    Vector3f yAxis = new Vector3f(0.0f, 1.0f, 0.0f);
 
    public JPanel3D(Color sphereColor) {
 
        this.setLayout(new BorderLayout());
 
        // Etape 3 :
        // Creation du Canvas 3D
        canvas3D = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
        this.add(canvas3D, BorderLayout.CENTER);
 
        // Etape 4 :
        // Creation d'un objet SimpleUniverse
        SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
 
        // Etape 5 :
        // Positionnement du point d'observation pour avoir une vue correcte de la
        // scene 3D
        simpleU.getViewingPlatform().setNominalViewingTransform();
 
        // Etape 6 :
        // Creation de la scene 3D qui contient tous les objets 3D que l'on veut visualiser
        BranchGroup scene = createSceneGraph(sphereColor);
 
        // Etape 7 :
        // Compilation de la scene 3D
        scene.compile();
 
        // Etape 8:
        // Attachement de la scene 3D a l'objet SimpleUniverse
        simpleU.addBranchGraph(scene);
    }
 
    /**
     * Creation de la scene 3D qui contient tous les objets 3D
     * @param sphereColor couleur de la sphere
     * @return scene 3D
     */
    public BranchGroup createSceneGraph(Color sphereColor) {
        // Creation de l'objet parent qui contiendra tous les autres objets 3D
        BranchGroup parent = new BranchGroup();
 
        TransformGroup panTransform = new TransformGroup();
        panTransform.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
        panTransform.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE)
 
        panTransform.addChild(new DrawPoints());
        parent.addChild(panTransform);
 
        return parent;
    }
 
    /**
     * Methode surchargee de JPanel afin de synchroniser l'affichage du
     * canvas 3D avec celui du JPanel
     * @param v boolean
     */
    @Override
    public void setVisible(boolean v) {
        super.setVisible(v);
        canvas3D.setVisible(v);
    }
 
    class canvas3D extends Canvas3D {
 
        public canvas3D(GraphicsConfiguration config) {
            super(config);
        }
 
        @Override
        public void paint(Graphics g) {
            super.paint(g);
            Toolkit.getDefaultToolkit().sync();
        }
    }
}
J'ai également une interface avec mon objet :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 public TransformGroup panTransform = new TransformGroup();
Lorsque je clique, j'ai bien mon "Up", mais aucunes translations. De plus je n'ai aucuns messages d'erreurs. Dans tout les exemples que j'ai trouvé, tout était regroupé plus ou moins dans une même classe. Est-ce une raison possible pour que ma translation ne fonctionne pas ?