Ce n'est pas le projet que je suis en train de faire mais un code que j'utilise pour tester. Inutile d'alourdir la charge avec les autres classes. Voilà le code ci-dessous va dessiner une sphere tournant indéfiniment. J'ai ajouter un bouton, lors du clic sur ce bouton je voudrais ajouter une autre sphere, ou cube ou n'importe quel autre objet en 3d.
import com.sun.j3d.utils.universe.SimpleUniverse; import com.sun.j3d.utils.geometry.Sphere; import com.sun.j3d.utils.image.TextureLoader; import javax.media.j3d.BranchGroup; import javax.media.j3d.Transform3D; import javax.media.j3d.TransformGroup; import javax.media.j3d.Canvas3D; import javax.media.j3d.Appearance; import javax.media.j3d.ColoringAttributes; import javax.media.j3d.ImageComponent; import javax.media.j3d.Texture; import javax.media.j3d.Texture2D; import javax.media.j3d.TextureAttributes; import javax.media.j3d.ImageComponent2D; import javax.media.j3d.Alpha; import javax.media.j3d.RotationInterpolator; import javax.media.j3d.BoundingSphere;
import java.lang.*; import javax.swing.*; import java.awt.*; import java.awt.event.*;
public class Terre extends JFrame { BranchGroup ObjPrinc;
public Terre() { super("Allo Houston...");
// Création des composants final JButton btnclic = new JButton("Ajouter"); // Bar de menu JMenuBar menu_bar1 = new JMenuBar(); // Ajouter un bouton sur la bar de menu menu_bar1.add(btnclic); // Ajouter la bar du menu à la frame this.setJMenuBar(menu_bar1);
// clic sur le bouton btnclic btnclic.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("Ici on ajoute le code pour ajouter a l'univers 3d une sphere ou un cube ou n'importe quoi d'autre ..."); } });
getContentPane().setLayout(new BorderLayout()); // creation du canvas Canvas3D canvas = new Canvas3D(SimpleUniverse.getPreferredConfiguration()); getContentPane().add("Center",canvas); // création de la scène, regroupement des objets BranchGroup scene = createScene(); scene.compile();
// création de l'univers de la scene 3D SimpleUniverse univers = new SimpleUniverse(canvas); // on met le plan de projection en arriere par rapport à l'origine univers.getViewingPlatform().setNominalViewingTransform(); // on place la scène dans l'univers "univers" univers.addBranchGraph(scene);
//arret du programme lors du clic sur la croix setDefaultCloseOperation(EXIT_ON_CLOSE);
}
/* * * creation d'un groupement d'objet * * */ private BranchGroup createScene() { // creation du BG principal ObjPrinc = new BranchGroup(); Appearance AppTexture = AjoutTexture("earth.jpg");
// Début de l'animation TransformGroup TG = new TransformGroup(); //Donner la possibilité a l'objet de bouger TG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); ObjPrinc.addChild(TG); // Ajout de la sphere à l'objet charger de l'animation TG.addChild(new Sphere(0.4f,Sphere.GENERATE_TEXTURE_COORDS,AppTexture)); // Configuration du nombre de tour et la vitesse // ici tourne indéfiniment (-1) et prend 60 secondes pour faire un tour Alpha alpha = new Alpha(-1,60000); RotationInterpolator Rotation = new RotationInterpolator(alpha, TG); Rotation.setSchedulingBounds(new BoundingSphere()); ObjPrinc.addChild(Rotation);
return ObjPrinc; } /* * Ajout du texture sur la sphere * * */ private Appearance AjoutTexture(String NomImage) { try { Appearance Apparence = new Appearance(); // chargement d'une image pour texture TextureLoader loader = new TextureLoader(NomImage,this); ImageComponent2D image = loader.getImage(); // instanciation de l'objet texture Texture2D texture = new Texture2D(Texture.BASE_LEVEL,Texture.RGBA,image.getWidth(),image.getHeight()); texture.setImage(0, image); // ajout de la texture à l'apparence Apparence.setTexture(texture); Apparence.setTextureAttributes(new TextureAttributes());
return Apparence; } catch(NullPointerException e1) { // Creation d'une texture uni dans le cas ou le fichier image n'exciste pas Appearance Apparence = new Appearance(); ColoringAttributes bleu = new ColoringAttributes(); bleu.setColor(0.0f,0.0f,0.8f); Apparence.setColoringAttributes(bleu); return Apparence; } }
public static void main(String[] args) { Terre MaTerre = new Terre(); MaTerre.setSize(400,400); MaTerre.setVisible(true); } }
|