Esempi di Java 3D
SimpleBehavior
//L'implementazione del Behavior personalizzato di un programma che
//renderizza un cubo che ruota ad ogni pressione di un tasto
public class SimpleBehavior extends Behavior
{
private TransformGroup targetTG;
private Transform3D rotation=new Transform3D();
private double angle=0.0;
public SimpleBehavior(TransformGroup targetTG)
{
this.targetTG=targetTG;
}
public void initialize()
{
//Questo Behavior risponderà ad eventi di tastiera sul key pressed
this.wakeupOn(new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED));
}
public void processStimulus(Enumeration criteria)
{
//Incrementa l'angolo
angle+=0.1;
//Evita problemi di overflow
if (angle>2*Math.PI) angle=0;
//imposta la rotazione dell'angolo
rotation.rotY(angle);
targetTG.setTransform(rotation);
//Reseta il Behavior per continuare a rispondere ad eventi di tastiera
this.wakeupOn(new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED));
}
}
Elementi di grafica digitale - Java 3D - Gobbo Dario
2 di 28
Alcune classi utili
– com.sun.j3d.utils.behaviors.keyboard.KeyNavigatorBehavior
– com.sun.j3d.utils.behaviors.mouse.*
• traslazione
• zooming
• rotazione
–
–
–
–
com.sun.j3d.utils.universe.Billboard
com.sun.j3d.utils.universe.OrientedShape3D
com.sun.j3d.utils.universe.DistanceLOD
com.sun.j3d.utils.universe.Morph
Elementi di grafica digitale - Java 3D - Gobbo Dario
3 di 28
MouseRotate
import java.awt.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.behaviors.mouse.*;
import javax.media.j3d.*;
import javax.swing.*;
Universo Virtuale
BranchGroup
Locale
BG
//Renderizza un cubo rotabile interattivamente
public class MouseRotateApp extends JFrame
{
public MouseRotateApp()
{
//Recupera le configurazioni grafiche del computer
GraphicsConfiguration config=SimpleUniverse.getPreferredConfiguration();
//Crea il Canvas3D e lo aggiunge al frame
Canvas3D canvas3D=new Canvas3D(config);
this.getContentPane().add(canvas3D,BorderLayout.CENTER);
Nodi BranchGroups
Nodi TrasformGroups
TG
View
Canvas3D
Screen3D
View Platform
Physical Body
Physical Enivironment
//Crea la scena
BranchGroup scene=createSceneGraph();
//Crea il SimpleUniverse
SimpleUniverse simpleU=new SimpleUniverse(canvas3D);
//Compila la scena (subito prima di renderla viva)
scene.compile();
//Aggiunge la scena all'universo
simpleU.addBranchGraph(scene);
}
Elementi di grafica digitale - Java 3D - Gobbo Dario
4 di 28
createScheneGraph()
Universo Virtuale
//Crea la scena
private BranchGroup createSceneGraph()
{
//Crea la radice del branch graph
BranchGroup objRoot=new BranchGroup();
//Crea un gruppo per le trasformazioni affini
TransformGroup objRotate=new TransformGroup();
objRotate.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
objRotate.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
Locale
BG
BG
TG
TG
Nodi BranchGroups
Nodi TrasformGroups
//Aggiunge al gruppo un cubo colorato
objRotate.addChild(new ColorCube(0.4));
View
//Crea il behavior per ruotare il cubo
MouseRotate myMouseRotate=new MouseRotate(objRotate);
//Imposta un raggio d'azione del behavior
myMouseRotate.setSchedulingBounds(new BoundingSphere());
Canvas3D
Screen3D
S
View Platform
Physical Body
Physical Enivironment
//assembla la scena
objRoot.addChild(myMouseRotate);
objRoot.addChild(objRotate);
return objRoot;
}
Elementi di grafica digitale - Java 3D - Gobbo Dario
5 di 28
Altri esempi
• Simile al precedente ma invece di usare il mouse usa un Behavior
sulla tastiera.
• Questo programma visualizzautilizza un loader che carica un file che
rappresenta un oggetto.
– Questo è il segmento di codice che carica il file
ObjectFile f=new ObjectFile(ObjectFile.RESIZE);
try
{
//Carica il galeone
Scene s=f.load(“galleon.obj");
//Inserisce il galeone nello SceneGraph
objScale.addChild(s.getSceneGroup());
}
catch (Exception e) {System.out.println(e);}
Elementi di grafica digitale - Java 3D - Gobbo Dario
6 di 28