Simplement un texte en 3d qui tourne sur lui meme ... a la façon de l'écran de veille Windows (oO).
Je débute en J3D , alors je me suis inspiré ( et plus encor ) du toturial présent sur
http://rvirtual.free.fr/programmation/java3d/intro.html
clair et simple .
Source / Exemple :
import com.sun.j3d.utils.universe.SimpleUniverse;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import javax.media.j3d.Alpha;
import javax.media.j3d.Appearance;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.ColoringAttributes;
import javax.media.j3d.Font3D;
import javax.media.j3d.FontExtrusion;
import javax.media.j3d.Material;
import javax.media.j3d.PointLight;
import javax.media.j3d.RotationInterpolator;
import javax.media.j3d.Shape3D;
import javax.media.j3d.Text3D;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.swing.JFrame;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Point3f;
import javax.vecmath.Vector3f;
/**
*
public class tlaloctzin extends JFrame {
public tlaloctzin() {
//création de la fenetre , rien d'exeptionel
super();
setSize(500,300);
setTitle("Tlaloctzin en 3D");
setLayout(new BorderLayout());
//on crée le canvas3D qui va contenir la scene
Canvas3D canvas = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
add("Center",canvas);
SimpleUniverse universe = new SimpleUniverse(canvas);
universe.getViewingPlatform().setNominalViewingTransform();
universe.addBranchGraph(createScene());
}
public BranchGroup createScene(){
//on commence par créer l'apparence
Appearance apparence = new Appearance();
//on cree les attributs de couler que l'on va appliquer a l'apparence
ColoringAttributes couleur = new ColoringAttributes();
couleur.setColor(new Color3f(Color.GRAY));
couleur.setShadeModel(ColoringAttributes.NICEST);
apparence.setColoringAttributes(couleur);
//on configure
Material mat=new Material(new Color3f(1f,1f,0f),new Color3f(0f,0f,0f),new Color3f(1f,1f,0f),new Color3f(1f,1f,1f),64);
apparence.setMaterial(mat);
//on cré le branchgroupe que l on attribueras au canvas3D
BranchGroup branch = new BranchGroup();
//création de la font et de l 'apparence de l'objet 3D
Font3D font =new Font3D(new Font("Helvetica",Font.PLAIN,1),new FontExtrusion());
Text3D texte = new Text3D(font , "Tlaloctzin",new Point3f(0.0f,-0.25f,0.0f));
texte.setAlignment(Text3D.ALIGN_CENTER);
//il faut transhpormer le texte3D en shape pour pouvoir l'integrer a la scene
Shape3D text=new Shape3D();
text.setGeometry(texte);
//on atribue l'apparence
text.setAppearance(apparence);
//on retaille l'objet 3D ( la taille des polices est exagérée)
Transform3D scale3D = new Transform3D();
scale3D.setScale(0.2f);//soit 20 % de la taille normale
TransformGroup scale = new TransformGroup(scale3D);
//on autorise la modification durant l'execution'
scale.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
//ici on applique la modification de taille
scale.addChild(text);
//creation de la rotation dans le temps -1 pr durée a l'infinie , 4000 pour la vitesse de rotation plus grand , plus lent !
Alpha alpha = new Alpha(-1,4000);
//application de l'alpha ci dessus a l'objet'
RotationInterpolator rotator=new RotationInterpolator(alpha,scale);
//zone de rotation
BoundingSphere bounds=new BoundingSphere();
rotator.setSchedulingBounds(bounds);
//on applique
scale.addChild(rotator);
//on rajoute l'objet3D a la scene
branch.addChild(scale);
//on ajoute la lumiere
PointLight light=new PointLight(new Color3f(Color.GRAY),new Point3f(2f,2f,2f),new Point3f(1f,0f,0f));
light.setInfluencingBounds(new BoundingSphere(new Point3d(),150d));
branch.addChild(light);
branch.compile();
return branch ;
}
public static void main ( String [] args ){
tlaloctzin tla = new tlaloctzin();
tla.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.