Ajout d'objet dynamiquement en java3d

cs_Draven Messages postés 62 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 8 octobre 2006 - 4 nov. 2004 à 11:34
dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007 - 1 déc. 2004 à 13:43
Voilà mon petit soucis. Je voudrais, lors d'un évènement comme le clic de la souris ou une touche pressée, ajouter une sphere à mon univers 3d. Mon problème ne reside pas dans le traitement de l'évènement mais pour ajouter dynamiquement la sphere à mon univers déjà existant.
Quelqu'un aurait-il une solution à me proposer?

Merci

3 réponses

JBAware Messages postés 174 Date d'inscription lundi 23 septembre 2002 Statut Membre Dernière intervention 6 avril 2011 1
5 nov. 2004 à 12:48
Salut

peux -tu nous montrer ton code?

8-) JB@WAre
0
cs_Draven Messages postés 62 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 8 octobre 2006
6 nov. 2004 à 11:57
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);
}
}
0
dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007
1 déc. 2004 à 13:43
tu peux ajouet a un TransformGroup ou a un BranchGroup un autre Branchgroup dynamiquement, si celui auquel tu ajoutes a la capacite:
bg.setCapability(Node.ALLOW_CHILDREN_EXTENDS);
et ensuite dynamiquement
bg.addChild(bgSphere);
-------------------
>:) dams >:)
-------------------
0
Rejoignez-nous