New (development kit) E’ costituita da una gerarchia di classi utili...

47
Introduction to Java3D 1 Java 3D è una estensione standard di Java 2 jdk (development kit) E’ costituita da una gerarchia di classi utili nella creazione di universi virtuali Fornisce classi per Creazione di immagini Visualizzazione ed animazione Applicazioni di grafica interattiva 3D Java 3D –

Transcript of New (development kit) E’ costituita da una gerarchia di classi utili...

  • Introduction to Java3D 1

    Java 3D è una estensione standard di Java 2 jdk(development kit)E’ costituita da una gerarchia di classi utili nella creazionedi universi virtualiFornisce classi per

    Creazione di immaginiVisualizzazione ed animazioneApplicazioni di grafica interattiva 3D

    Java 3D –

  • Introduction to Java3D 2

    Java 3DUn programma Java3D crea istanze di oggetti Java3D e li posiziona in uno scene graphLo scene graph è una struttura dati di oggetti 3D che specifica:

    il contenuto di un universo virtualecome tale contenuto deve essere renderizzato

    I programmi Java3D possono essere scritti sia come applicazioni sia come applet

  • Introduction to Java3D 3

    NotazioneVisual object – si intende un oggetto nello scene graph (cubo, sfera..)Object – istanza di una classeContent – oggetti visuali in uno scene graph nel loro insieme, cioè contenuto visuale di una immagine

  • Introduction to Java3D 4

    Java 3d - APIUn programma Java 3d è costruito da oggetti –istante di classi di Java 3DLa libreria Java 3D API è definita da oltre 100 classi presenti nel package javax.media.j3dQueste classi sono dette il core di Java3DOgni classe contiene moltissimi campi e metodiGeneralmente per creare un semplice universo virtuale può essere creato con poche classi

  • Introduction to Java3D 5

    I package aggiuntiviOltre al core sono presenti altri package come:

    Il package com.sun.j3d.utils comunemente chiamato le classi utility di Java3D

    Il core contiene solo le classi di livello piùbassoLe classi utility sono “utili” aggiunte al core

  • Introduction to Java3D 6

    Classi di utilityLe classi di utility si dividono in quattro categorie:

    caricatori di contenuticlassi di aiuto alla costruzione di scene graphclassi geometricheclassi di utility varie

    Nuove funzionalità (ad esempio le NURBs) potranno essere aggiunte alle classi di utility non al coreAlcune classi di utility potrebbero essere spostate nel core nelle versioni successive

  • Introduction to Java3D 7

    Classi di utility 2L'utilizzo delle classi di utility riduce molto le linee di codice di un programma Java3D

    In aggiunta al core ed alle utility un programma Java3D usa (quasi) sempre i package

    java.awt e javax.vecmath

    Il package javax.vecmath definisce le classi punto, vettore, matrice ed altri oggetti matematici

  • Introduction to Java3D 8

    Un universo virtuale Java3D è creato tramite uno scene graph - grafo della scenaUno scene graph è creato usando istanze di classi Java3D per definire:

    geometriasuoni e luciposizioni e orientamentiAspetti

    di oggetti visuali o audioLa più comune relazione in uno SceneGraph è la relazione parent –child (come in VRML)

    General 3D Modelling Concepts

  • Introduction to Java3D 9

    Definizione di uno SceneGraph (1)SceneGraph è la struttura dati, utilizzata per memorizzare, organizzare e render l‘informazionedi una scena (oggetti, materiali, luci...)

    Un grafo è una struttura dati composta da nodi ed archi:

    I nodi in uno scene graph sono oggetti Java3DGli archi rappresentano due diversi tipi di relazione tra oggetti:

    relazione parent –child relazione reference

  • Introduction to Java3D 10

    RelazioneRelazione parent-child

    Un nodo può avere più successori, ma un solo predecessoreI nodi in relazione parent-child costituiscono lo scene graph tree

    Relazione referenceUna reference associa un node componentcon uno scene graph node

  • Introduction to Java3D 11

    Definizione di uno SceneGraph (2)I nodi più importanti di uno scene graph sono: Virtual Universe, Locale, Groups, Leaf, NodeComponents

  • Introduction to Java3D 12

    Simboli di uno Scene GraphArcs (object relationships)

    VirtualUniverse

    Locale - root

    Group- scene graphtree

    Leaf - scene graphtree

    Node Component

    Other objects

    Parent-child link

    Reference

    Nodes and Node Components (objects)

  • Introduction to Java3D 13

    Together a Locale and aVirtual Universe compose

    a SceneGraph superstructure.

    A reference associates a NodeComponent object with a Scene

    Graph Node .

  • Introduction to Java3D 14

    Scene Graph pathUno scene graph è costituito da alberi aventi radice nel nodo LocaleVi è un unico cammino dal nodo Locale ad un nodo LeafOgni Scene graph tree path specifica completamente lo stato della foglia cioè:

    Posizione OrientazioneDimensione

  • Introduction to Java3D 15

    Scene Graph path 2Gli attributi visuali di ciascun oggetto visuale dipendono solo dal suo Scene Graph path

    Il sistema di rendering di Java 3D esegue il render delle foglie nell’ordine che ritiene più efficiente

  • Introduction to Java3D 16

    Gerarchia delle classi di Java 3D API

  • Introduction to Java3D 17

    Important ClassesVirtual Universe and Locale Class

    SceneGraph Object Classè la classe base per ogni oggetto che appare in uno Java3D scene Graph.Questa classe astratta contiene oggetti node and node component

    Scene Graph Viewing Object Classesinclude 5 classi usate per gestire i parametri di viewing di uno scene graph(Canvas3D,Screen3D,View,PhysicalBody,PhysicalEnvironment)

    Simple Universe utility classusata per creare un programma Java3D senza trattare con le Viewing object Classes

  • Introduction to Java3D 18

    Classe NodeNode è la superclasse astratta delle classi Group e LeafDefinisce importanti metodi comuni alle sue sottoclassiLe sottoclassi di Node costruiscono uno scene graph

  • Introduction to Java3D 19

    Scenegraph nodesVi sono 2 tipi di nodi:

    - Group : il ruolo primario di un nodo Group è di essere parent di altri nodi- Group e Leaf

    - Leaf : i nodi leaf specificano shape, sound, and behavior di un visual object.

  • Introduction to Java3D 20

    Classe GroupGroup è la superclasse usata per specificare posizioni ed orientamenti degli oggetti nell'universo virtuale

    Sottoclassi della classe Group sonoBranchGroupTransformGroup……

    Nella rappresentazione grafica dello scene graph,i simboli di Group (cerchi) sono indicati con BG per BranchGroup e TG per TransformGroup

  • Introduction to Java3D 21

    Group nodes subclasses

    Switch

    TransformGroup

    SharedGroup

    OrderedGroup

    BranchGroup

    Group

    Primitive

  • Introduction to Java3D 22

    Classe LeafLeaf è la superclasse usata per specificare:

    forme e aspettisuonicomportamenti

    Alcune sottoclassi sono: Shape3D, Light,Behavior e Sound

    Un nodo Leaf non può avere successori, ma reference ad oggetti NodeComponent

  • Introduction to Java3D 23

    Leaf nodes SubclassesBounding Leaf

    Clip

    Fog

    Light

    Link

    Morph

    Shape3D

    Sound

    Soundscape

    Behavior

    Viewplatfom

    Background

    Leaf

  • Introduction to Java3D 24

    La classe Node Component class è usata per specificare una varietàdi proprietà di un nodo Shape3D, quali

    GeometriaTextureTrasparenzaColore

    Alcune classi sonoAppeareanceColoring Attributes DepthComponent GeometryImageComponent....

    Un NodeComponent può essere collegato a più di un nodoShape3D

    Node Component

  • Introduction to Java3D 25

    EsempioUn oggetto Virtual Universe è collegato a uno o più oggetti Locale. All‘oggetto locale sono associati 2 BranchGroup

    ContentBranch descrive il contenuto della scenaViewBranch descrive osservatore, piano immagine..

    ContentBranchContentBranchgraph

    ViewBranchgraph

  • Introduction to Java3D 26

    Java3D API

    Core Classes

    javax.media.j3d packagelowest level classes required for Java3D programming

    Utility Classes

    com.sun.j3d.utils packageconvenient and powerful additions to the core

    The API has core classes and utility classes

  • Introduction to Java3D 27

    Passi per scrivere un programmaCreare gli oggetti Canvas3D e VirtualUniverseCreare un oggetto Locale e collegarlo al VirtualUniverseCostruire un view branch graph

    Creare gli oggetti View, ViewPlatform, PhysicalBody e PhysicalEnvironmentCollegare ViewPlatform, PhysicalBody, PhysicalEnvironment e Canvas3D alla View

    Costruire uno o più content branch graphCompilare tutti i branch graphCollegare tutti i branch graph al Locale

  • Introduction to Java3D 28

    Simple recipe for writing a Java3D program

    Using the SimpleUniverse class in Java 3D program reduces the time and effort neededto create the view branch Graph.

    The basic outline of Java 3D program development consists of seven steps :

    1- Create a Canvas3D object2- Create a VirtualUniverse object3- Create a Locale object, attaching it to the VirtualUniverse object .4- Construct a View object5- Construct content branch graph6- Compile branch graph7- Insert subgraphs into the Locale.

    The steps 1,2,3,4,and 7 create a Simple Universe( code for creating a SimpleUniverse: SimpleUniverse ( ) )

  • Introduction to Java3D 29

    HelloJava3D Classpublic class HelloJava3Da extends Applet {

    public HelloJava3Da() {setLayout(new BorderLayout());GraphicsConfiguration config = SimpleUniverse .getPreferredConfiguraton( );

    Canvas3D canvas3D = new Canvas3D (config) ;add("Center“, canvas3D);BranchGroup scene = createSceneGraph();scene.compile();

    // SimpleUniverse is a convenience Uility class SimpleUniverse SimpleU = new SimpleUniverse (canvas 3D) ;

    // This move the ViewPlatform back a bit so the // objects in the scene can be viewed .SimpleU.getViewingPatform().setNominalViewingTransform();simpleU.addBranchGraph (scene);

    } // end of HelloJava 3Da (constuctor)

    1- Create a canvas3D

    2- Create a Simpleuni

    verse

    3- CustomizeSimpleuniverse

    4- CompileContentBranch

    Graph

    5- InsertContentBranchGraph

    into the Locale

  • Introduction to Java3D 30

    SimpleUniverseSimpleUniverse è un oggetto che crea uno scene graph contenente un oggetto VirtualUniverse, un oggetto Locale ed un completo viewbranch graph

    Il view branch graph creato da un SimpleUniverse usa oggetti ViewingPlatform e Viewer al posto delle classi core utilizzate per creare il view branch graph

    Il package com.sun.j3d.utils.universe contiene le classi di utilitySimpleUniverseViewingPlatformViewer

  • Introduction to Java3D 31

    SimpleUniverse

  • Introduction to Java3D 32

    SimpleUniverse constructors

  • Introduction to Java3D 33

    Passi per scrivere un programmaCreare un oggetto Canvas3DCreare un oggetto SimpleUniverse e collegarlo all’oggetto Canvas3DPersonalizzare l'oggetto SimpleUniverseCostruire uno o più content branch graphCompilare tutti i content branch graphCollegare tutti i content branch graph al Locale del SimpleUniverse

  • Introduction to Java3D 34

    Piano immagineIl SimpleUniverse crea un view branch graph completo contenente anche un image plate cioè

    la finestra 2D su cui l'universo virtuale viene proiettato e renderizzato

    Un oggetto Canvas3D può essere pensato come un image plate

    Il piano immagineè centrato nell'origine dell'universocon l’asse z uscente dallo schermo,l’asse x orizzontale con i valori positivi a destral’asse y verticale con i valori positivi in alto

  • Introduction to Java3D 35

    Piano immagine

  • Introduction to Java3D 36

    HelloJava3Dpackage it.unict.dmi.cg.HelloJava3D;

    import java.awt.*;import com.sun.j3d.utils.universe.*;import com.sun.j3d.utils.geometry.*;import javax.media.j3d.*;import javax.swing.*;

    // Visualizza un cubo immobilepublic class HelloJava3D_a1 extends JFrame{public HelloJava3D_a1(){//Recupera le configurazioni grafiche del computerGraphicsConfiguration config=SimpleUniverse.getPreferredConfiguration();

    //Crea un oggetto Canvas3D e lo aggiunge al frameCanvas3D canvas3D=new Canvas3D(config);this.getContentPane().add(canvas3D,BorderLayout.CENTER);

  • Introduction to Java3D 37

    HelloJava3D//Crea la scena

    BranchGroup scene=createSceneGraph();

    //Crea il SimpleUniverseSimpleUniverse simpleU=new SimpleUniverse(canvas3D);

    //Questo comando serve per spostare leggermente indietro il sistema di riferimento// il metodo setNominalViewingTransform posiziona il punto di vista in (0,0,2.41)

    simpleU.getViewingPlatform().setNominalViewingTransform();

    //Compila la scena (subito prima di renderla viva)scene.compile();

    //Aggiunge la scena all'universosimpleU.addBranchGraph(scene);

    }

  • Introduction to Java3D 38

    HelloJava3D//Crea la scenaprivate BranchGroup createSceneGraph(){

    //Crea la radice del branch graphBranchGroup objRoot=new BranchGroup();

    //Aggiunge alla radice un cubo coloratoobjRoot.addChild(new ColorCube(0.4));return objRoot;

    }public static void main(String[] args){

    HelloJava3D_a1 hello=new HelloJava3D_a1();hello.setTitle("Hello Java3D!");hello.setSize(300,300);hello.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);hello.show(); } }

  • Introduction to Java3D 39

    Terminologia„Become live“ :Un Branch Graph diventa live appena è collegato ad un oggettoLocale. Ciascun oggetto di un Branch Graph live è soggetto ad essere renderizzato

    Compiling La compilazione di un BranchGroup converte un oggetto ed i suoi successori in una forma più efficiente per il rendering

  • Introduction to Java3D 40

    PerformanceLa rappresentazione di uno scene graph costruito da Java3D non è molto efficienteLa flessibilità nel realizzare universi virtuali offerta dallo scene graph viene pagata in termini di prestazioniPer tale motivo Java3D utilizzata internamente una rappresentazione più efficiente per migliorare le prestazioni di rendering

  • Introduction to Java3D 41

    PerformanceInvocando il metodo compile() per un oggettoBranchGroup, si ottiene che tale oggetto sia convertito in una rappresentazione interna più efficiente

  • Introduction to Java3D 42

    CapabilityLa conversione in una rappresentazione interna ha degli “effetti collaterali”Un effetto è quello di bloccare i valori delle trasformazioni affini ed altri oggetti dello scene graphSe non specificato prima, il programma non avrà più modo (capability) di cambiare i valori di tali oggetti

  • Introduction to Java3D 43

    CapabilityCi sono casi in cui un programma ha la necessitàdi cambiare tali valori anche dopo che gli oggetti siano diventati vivi

    Per esempio, è possibile creare animazioni cambiando i valori di un TransformGroup

    L’oggetto TransformGroup deve essere in grado di cambiare anche dopo essere diventato vivo

  • Introduction to Java3D 44

    CapabilityCapability: caratterista di un oggetto che può essere modificata Un oggetto può avere un insieme di capabilityImpostando o azzerando una capability si decide se una particolare caratteristica può essere modificata dopo che l'oggetto èdiventato vivo

  • Introduction to Java3D 45

    La classe TransformGroup Class è necessaria perrappresentare la trasformazione di un oggettoTransfom3D

    Operazioni base:- Traslazione : muovere un oggetto da una posizione adun‘altra

    - Rotazione : un oggetto può essere ruotato attorno ad una combinazione di assi X,Y,Z contemporaneamente

    - Scaling: un oggetto può variare la sua dimensione

    Trasformazioni in Java3D

  • Introduction to Java3D 46

    Key Java3D features Java 3D scene graphs sono considerevolmente più difficili degli scene graph di VRML, per la complessità di un linguaggio di programmazione come JavaMa Java3D sceneGraph offre eccellenti caratteristiche quali: - Rendering control- Scalable Performance- Behaviors- Generic Input Devices- Geometry Compresion- Versatile View Model- Camera-based View Model

  • Introduction to Java3D 47

    ReferencesGetting starting with Java3D API (Dennis J Bouvier) „ The Java3D Tutorial of Sun“Java websitehttp://java.sun.com/products/javamedia/3Dhttp://www.sun.com/desktop/java3d

    http://java.sun.com/javase/technologies/desktop/

    http://wiki.java.net/bin/view/Javadesktop/Java3D