Texte rotatif java 3d

Contenu du snippet

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;

/**
 *

  • @author Tlaloc
  • /
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); } }

A voir également

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.