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