Esempi di Java 3D
SimpleBehavior Elementi di grafica digitale - Java 3D - Gobbo Dario //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 Elementi di grafica digitale - Java 3D - Gobbo Dario
Alcune classi utili com.sun.j3d.utils.universe.Billboard 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
MouseRotate Elementi di grafica digitale - Java 3D - Gobbo Dario 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.*; //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); BranchGroup Universo Virtuale Locale Nodi BranchGroups Nodi TrasformGroups BG TG View Canvas3D Screen3D View Platform this.getContentPane().add(canvas3D,BorderLayout.CENTER); //Crea la scena BranchGroup scene=createSceneGraph(); Physical Body Physical Enivironment //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
createScheneGraph() //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); //Aggiunge al gruppo un cubo colorato objRotate.addChild(new ColorCube(0.4)); //Crea il behavior per ruotare il cubo MouseRotate myMouseRotate=new MouseRotate(objRotate); //Imposta un raggio d'azione del behavior myMouseRotate.setSchedulingBounds(new BoundingSphere()); //assembla la scena objRoot.addChild(myMouseRotate); objRoot.addChild(objRotate); return objRoot; } Universo Virtuale Locale Nodi BranchGroups Nodi TrasformGroups BG BG TG TG S View Canvas3D Screen3D View Platform Physical Body Physical Enivironment Elementi di grafica digitale - Java 3D - Gobbo Dario
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