java 3d. elementi di grafica digitale - java 3d - gobbo dario2 di 29 cosè java 3d java 3d è un api...
Post on 01-May-2015
225 Views
Preview:
TRANSCRIPT
Java 3D
Elementi di grafica digitale - Java 3D - Gobbo Dario 2 di 29
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 3 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 4 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 5 di 29
Un esempio di “Scene Graph”
BG
Apparance
BG
TG
GeometryGeometry
Canvas3D Screen3DS
TG
S
TG
View
Universo Virtuale
Locale
Nodi BranchGroups
Nodi TrasformGroups
NodeComponent
View Platform
Physical Body Physical Enivironment
Elementi di grafica digitale - Java 3D - Gobbo Dario 6 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 7 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 8 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 9 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 oggetti
NodeComponent collegate allo Shade3D.
Elementi di grafica digitale - Java 3D - Gobbo Dario 10 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 11 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 12 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.
ApparanceGeometry
Geometry
S S
Apparance Geometry
S
Material LineAttributesColoringAttributes
Elementi di grafica digitale - Java 3D - Gobbo Dario 13 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 14 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 15 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 16 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 17 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 18 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 19 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 20 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 21 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 22 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 23 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 24 di 29
Picking
• 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”.
object
pick ray
image plate
mouse pointer
Elementi di grafica digitale - Java 3D - Gobbo Dario 25 di 29
Animazioni
• Come l’interazione anche l’animazione è implementata tramite behavior
• Inoltre esiste un particolare tipo di classi per l’animazione, dette interpolatori.– 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 26 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 27 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 28 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 di luce,
ColoringAttributes in assenza di luce.– Il colore di Geometry sovrascrive gli altri.
Elementi di grafica digitale - Java 3D - Gobbo Dario 29 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.
top related