Java 3D
Cos’è Java 3D
• Java 3D è un API grafica 3d ad alto livello.
– Il programmatore lavora con costrutti di alto livello
con cui crea e manipola oggetti 3D.
• Il rendering è gestito in modo automatico.
– Sfruttando thread e metodi di ottimizzazione il motore
si rendering migliora le prestazioni.
• Gli oggetti creati risiedono in un “Universo
virtuale”
Elementi di grafica digitale - Java 3D - Gobbo Dario
2 di 29
Package
• Il core
– La libreria fornisce oltre 100 classi presenti nel
package javax.media.j3d
• Utility
– Oltre al core sono presenti altri package tra cui
com.sun.j3d.utils. L’utilizzo di queste classi permette di
ridurre le linee di codice di un programma 3D
• Altre classi utili
– java.awt : per gli elementi 2d.
– java.vecmath : per punti, linee, matrici e altre classi
matematiche.
Elementi di grafica digitale - Java 3D - Gobbo Dario
3 di 29
Universo virtuale
• Come detto gli oggetti java3D sono inseriti in un
Universo virtuale che viene creato tramite uno
“scene graph”.
• Uno scene graph è una struttura ad albero
composta da nodi e archi.
– I nodi rappresentano oggetti java3D
– Gli archi rappresentano le relazioni tra gli oggetti
• relazione padre-figlio
• reference
Elementi di grafica digitale - Java 3D - Gobbo Dario
4 di 29
Un esempio di “Scene Graph”
Universo Virtuale
Locale
BG
TG
TG
S
S
BG
Nodi BranchGroups
TG
Nodi TrasformGroups
View
Canvas3D
Screen3D
View Platform
Geometry
Apparance
Geometry
NodeComponent
Elementi di grafica digitale - Java 3D - Gobbo Dario
Physical Body
Physical Enivironment
5 di 29
SimpleUniverse
• Per ridurre le operazione da eseguire è possibile
usare la classe SimpleUniverse.
• Questa classe permette di alleggerire la procedura
di creazione dell’universo virtuale.
• Per usare il SimpleUniverse è necessario:
– Creare un oggetto Canvas3D
– Creare un oggetto SimpleUniverse e collegarlo al
Canvas3D
– Costruire e compilare i BranchGroups
– Collegare quest’ultimi al Locale del SimpleUniverse
Elementi di grafica digitale - Java 3D - Gobbo Dario
6 di 29
Il piano di rendering
• Il SimpleUniverse crea un view contenente anche
un image plate.
• Un image plate è il rettangolo dove l’universo
viene proiettato e renderizzato
– Il Canvas3D può essere pensato come un image plate.
– L’image plate è centrato nell’origine con asse z
uscente dallo schermo, asse x orizzontale verso destra,
asse y verticale verso l’alto
Elementi di grafica digitale - Java 3D - Gobbo Dario
7 di 29
Classi
• Alcune classi :
– Node : superclasse astratta che rappresenta ogni nodo dello scene
graph.
– Group : supereclasse usata per specificare posizioni e
orientamenti degli oggetti.
sottoclassi comuni: BranchGroup, TransformGroup.
– Leaf : superclasse usata per specificare forme, aspetti, suoni,
comportamenti.
non hanno figli, ma riferimenti a NodeComponent.
– NodeComponent : superclasse usata per specificare geometrie,
aspetto, texture, materiale.
non sono parte dello scene graph ma sono collegate tramite
reference. Possono essere collegate a più di un nodo.
Elementi di grafica digitale - Java 3D - Gobbo Dario
8 di 29
La classe Shade3D
• Shade3D è una sottoclasse di Leaf, quindi può
essere solo una foglia dello scene graph.
• Un nodo Shade3D rappresenta un oggetto
visuale.
• Non contiene informazioni su forma e colore.
– queste
vengono
conservate
negli
NodeComponent collegate allo Shade3D.
Elementi di grafica digitale - Java 3D - Gobbo Dario
oggetti
9 di 29
Geometry e Classi matematiche
• La classe Geometry o sue sottoclassi descrivono
primitive basate sui vertici, come punti, linee,
poligoni.
• Per definire un vertice sono necessarie le classi
matematiche che rappresentano:
– Point* : coordinate dei vertici.
– Color* : colore di un vertice, una proprietà di un
materiale, una nebbia, ecc.
– Vector* : vettori, usati per le normali ai vertici,
direzioni sorgenti di luce, traslazioni.
– TextCood* : coordinate di una texture ad un vertice.
Elementi di grafica digitale - Java 3D - Gobbo Dario
10 di 29
Aspetto ed Attributi (Apparance)
• I dati di una Geometry, spesso sono insufficienti per
descrivere l’aspetto di un oggetto: è necessario utilizzare
la classe Apparance
• Un oggetto Apparance non contiene le informazioni
sull’aspetto dello Shade3D ma referenzia sottoclassi di
NodeComponent (gli attributi), dove sono memorizzate
tali informazioni.
• Gli oggetti referenziabili possono essere:
–
–
–
–
PointAttributes/LineAttributes/PolygonAttributes
ColoringAttributes/ TrasparencyAttributes
RenderingAttributes/Material
TextureAttributes/Texture/TexCoordGenerator
Elementi di grafica digitale - Java 3D - Gobbo Dario
11 di 29
Condivisione di Attributi
• È possibile che due oggetti Shade3D facciano riferimento
allo stesso Apparance.
• È possibile che due oggetti Apparance facciano
riferimento allo stesso attributo.
• La condivisione può migliorare le performance.
S
Geometry
ColoringAttributes
S
Apparance
Material
S
Geometry
Apparance
Geometry
LineAttributes
Elementi di grafica digitale - Java 3D - Gobbo Dario
12 di 29
Alcuni Attributi
• PointAttributes : gestisce il rendering dei punti.
• LineAttributes : gestisce il rendering delle linee.
• PolygonAttributes : gestisce il rendering dei poligoni.
– Per default il poligono è pieno.
• ColoringAttributes : controlla la colorazione degli oggetti.
– Se il colore è definito anche nella geometry, prevale quello della
geometry.
• TrasparencyAttributes : gestisce la trasparenza.
– 0.0 opaco, 1.0 trasparente
– SCREEN_DOOR : alcuni pixel sono completamente opachi.
– BLENDED : ogni pixel ha la trasparenza impostata.
Elementi di grafica digitale - Java 3D - Gobbo Dario
13 di 29
Bound
• Un bound definisce una regione dove un nodo agisce.
• Un bound è definito usando le classi:
– BondingSphere : il più semplice, crea boun sferici.
– BoundingBox : crea bound rettangolari, bisogna definire i
due punti estremi.
– BoundingPolytope : crea bound poliedrici usando
l’intersezioni di quattro o più semispazi, bisogna elencare i
piani dell’intersezione.
• Se opportunamente usati permettono di incrementare
le performance, riducendo le operazioni svolte del
motore di rendering
Elementi di grafica digitale - Java 3D - Gobbo Dario
14 di 29
Scope
• Lo Scope è una collezione di oggetti Group sui
quali un nodo ha influenza.
• Bound e scope forniscono una funzionalità simile
ma in modo diverso:
– Un Bound definisce una regione spaziale.
– Uno Scope definisce dei raggruppamenti di oggetti
Elementi di grafica digitale - Java 3D - Gobbo Dario
15 di 29
Performance (compile)
• La rappresentazione di uno scene graph costruito
da java non è molto efficiente.
– La flessibilità nel realizzare universi virtuali viene
pagata in termini di prestazioni
• Per ovviare a ciò java3D utilizza internamente
una rappresentazione più efficiente.
– Invocando il metodo compile() del BranchGroup esso
viene convertito e ottimizzato in una rappresentazione
interna.
• Conviene sempre compilare il BranchGroup
prima di renderlo vivo (cioè di inserirlo in un Locale).
Elementi di grafica digitale - Java 3D - Gobbo Dario
16 di 29
Performance (capability)
• La conversione in una rappresentazione interna
blocca il valore delle trasformazioni e di altri
oggetti dello scene graph.
– È necessario specificare prima cosa si vuole cambiare.
• Una caratteristica di un oggetto che può essere
modificata è detta capability.
– Impostando o azzerando una certa capability si decide
se una particolare caratteristica può essere modificata
dopo che l’oggetto e diventato vivo.
Elementi di grafica digitale - Java 3D - Gobbo Dario
17 di 29
Interazioni
• In Java3D sia le animazioni che le interazioni
sono definite utilizzando la classe Behavior:
– Questa classe modifica lo scene graph in risposta ad
uno stimolo (tastiera, mouse, tempo, collisioni..)
– I cambiamenti prodotti possono essere l'aggiunta o
rimozione di oggetti dallo scene graph oppure il
cambiamento di attributi degli oggetti.
– Le possibilità sono limitate soltanto dalle capability
degli oggetti stessi.
Elementi di grafica digitale - Java 3D - Gobbo Dario
18 di 29
Behavior
• Un behavior personalizzato deve implementare i
metodi initialization e processStimulus della
classe astratta Behavior.
– initialization() : invocato quando lo scene graph
contenete il behavior diventa vivo. Deve inizializzare
il trigger degli eventi.
– processStimulus() : invocato dal trigger quando si
verifica la condizione specificata, occupandosi anche
della decodifica dell’evento. Deve resettare il trigger.
Elementi di grafica digitale - Java 3D - Gobbo Dario
19 di 29
Wake up
• I behavior vengono attivati non appena si
verificano gli stimoli a cui devono rispondere.
• Gli oggetti per definire gli stimoli sono le
condizzioni di wake up che vengono definite
nelle classi WakeupCondition.
• WakeupCondition
–
–
–
–
–
WakeupOr
WakeupAnd
WakeupAndOfOrs
WakeupOrOfAnds
WakeupCriterion
}
Per la composizione di condizioni
multiple.
Elementi di grafica digitale - Java 3D - Gobbo Dario
20 di 29
WakeupCriterion
•
•
•
•
•
•
•
•
•
•
•
•
•
•
WakeupOnActivation
WakeupOnDeactivation
WakeupOnAWTEvent
WakeupOnBehaviorPost
WakeupOnCollisionEntry
WakeupOnCollisionExit
WakeupOnCollisionMovement
WakeupOnElapsedFrames
WakeupOnElapsedTime
WakeupOnSensorEntry
WakeupOnSensorExit
WakeupOnTransformChange
WakeupOnViewPlatformEntry
WakeupOnViewPlatformExit
Elementi di grafica digitale - Java 3D - Gobbo Dario
21 di 29
Navigare
• Il view branch graph di un universo virtuale
contiene una view platform.
• Se tale trasformazione cambia, l’effetto è quello
di muovere e orientare l’osservatore.
• Quindi, per navigare, è sufficiente aggiungere un
behavior che cambia la view platform in risposta
agli eventi
Elementi di grafica digitale - Java 3D - Gobbo Dario
22 di 29
Picking
• Il picking permette all’utente di interagire con i
singoli oggetti della scena e viene implementato
con un behavior che risponde agli eventi del
mouse.
• Per recuperare l’oggetto selezionato, un raggio
viene proiettato dal mouse verso il mondo
virtuale.
• Viene calcolata l’intersezione del raggio con gli
oggetti e si seleziona l’oggetto più vicino
all’image plate.
Elementi di grafica digitale - Java 3D - Gobbo Dario
23 di 29
Picking
mouse
pointer
pick ray
object
image plate
• Il test di intersezione è costoso, e tale costo cresce con la scena.
– È possibile selezionare inizialmente gli oggetti “acchiappabili”, gli altri
non verranno considerati nel calcolo.
• Per ridurre il costo del calcolo è possibile limitare lo scope del test.
– Nell’indicare il nodo radice del test invece di indicare la root dello scene
graph si specifica la radice del sottografo degli oggetti “acchiappabili”.
Elementi di grafica digitale - Java 3D - Gobbo Dario
24 di 29
Animazioni
• Come l’interazione anche l’animazione è implementata
tramite behavior
• Inoltre esiste un particolare
l’animazione, dette interpolatori.
tipo
di
classi
per
– Un oggetto Interpolator manipola alcuni parametri dello scene
graph per crea animazioni basate sul tempo.
– Queste classi sono basate sui behavior.
– Usano un oggetto Alpha.
• È un particolare oggetto che produce un valore tra zero e uno con il
variare del tempo. Produce un fronte d’onda.
Elementi di grafica digitale - Java 3D - Gobbo Dario
25 di 29
Luci
• Il modello d’illuminazione gestisce tre tipi di luce:
– Ambientale : luce costante e molto leggera
– Diffusa : riflessione su un oggetto opaco
– Speculare : riflessione su un oggetto speculare
• Purtroppo alcuni fenomeni non vengono modellati:
– Inter-riflessioni
– Ombre
• Java3D non limita il numero di luci utilizzabili
contemporaneamente, tuttavia potrebbe essere la scheda video
o la libreria basso livello a farlo (OpenGl limita ad 8).
Elementi di grafica digitale - Java 3D - Gobbo Dario
26 di 29
Classi Light
• L’Api Java3D fornisce 4 classi di per le luci:
–
–
–
–
AmbientLight : stessa intensità in tutte le posizioni.
DirectionalLigth : raggi paralleli con intensità costante.
PointLight : sorgente in un punto, intensità variabile.
SpotLight: sottoclasse di PointLight, luce lungo una
direzione all’interno di un angolo con intensità variabile.
• Lo stato della luce è un valore booleano per
indicare se è accesa o spenta.
Elementi di grafica digitale - Java 3D - Gobbo Dario
27 di 29
Colori
• Ci sono tre modi per specificare il colore di un
oggetto:
– Metodo setColor() di Geometry.
– Attributo ColoringAttributes.
– Classe Material
• Specifica colori(ambientale, diffuso, speculare ed emissivo) e
la lucentezza di un oggetto.
• Se viene usato più di un metodo:
– Material viene usato in presenza
ColoringAttributes in assenza di luce.
– Il colore di Geometry sovrascrive gli altri.
Elementi di grafica digitale - Java 3D - Gobbo Dario
di
luce,
28 di 29
Normali
• Per concludere è necessario sottolineare che per
illuminare un oggetto è necessario che esso stesso
abbia definito le sue normali alle superfici.
• Quando si creano oggetti e possibile specificare
le normali usando il metodo setNormal() della
Geometry.
– Usando un oggetto GeometryInfo è possibile utilizzare
la classe NormalGenerator per ottenere in automatico
le normali.
Elementi di grafica digitale - Java 3D - Gobbo Dario
29 di 29