new (development kit) e’ costituita da una gerarchia di classi utili...
TRANSCRIPT
-
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