Petite application d'une difficulté moyenne quand on a jamais fait de 3D comme moi. Une fois qu'on a compris le principe après codage se simplifie.
Source / Exemple :
/*****************************************************
- Auteur : Draven *
- Fichier : Terre.java *
- Fonction: Animation de la terre *
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 javax.swing.JFrame;
import java.awt.BorderLayout;
public class Terre extends JFrame
{
public Terre()
{
super("Allo Houston...");
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 *
- */
public BranchGroup createScene()
{
// creation du BG principal
BranchGroup 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 *
- */
public 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);
}
}
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.