La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Java 3D. Elementi di grafica digitale - Java 3D - Gobbo Dario2 di 29 Cosè Java 3D Java 3D è un API grafica 3d ad alto livello. –Il programmatore lavora.

Presentazioni simili


Presentazione sul tema: "Java 3D. Elementi di grafica digitale - Java 3D - Gobbo Dario2 di 29 Cosè Java 3D Java 3D è un API grafica 3d ad alto livello. –Il programmatore lavora."— Transcript della presentazione:

1 Java 3D

2 Elementi di grafica digitale - Java 3D - Gobbo Dario2 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

3 Elementi di grafica digitale - Java 3D - Gobbo Dario3 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. Lutilizzo 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.

4 Elementi di grafica digitale - Java 3D - Gobbo Dario4 di 29 Universo virtuale Come detto gli oggetti java3D sono inseriti in un Universo virtuale che viene creato tramite unoscene 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

5 Elementi di grafica digitale - Java 3D - Gobbo Dario5 di 29 Un esempio di Scene Graph BG Apparance BG TG Geometry Canvas3DScreen3D S TG S View Universo Virtuale Locale Nodi BranchGroups Nodi TrasformGroups NodeComponent View Platform Physical BodyPhysical Enivironment

6 Elementi di grafica digitale - Java 3D - Gobbo Dario6 di 29 SimpleUniverse Per ridurre le operazione da eseguire è possibile usare la classe SimpleUniverse. Questa classe permette di alleggerire la procedura di creazione delluniverso virtuale. Per usare il SimpleUniverse è necessario: –Creare un oggetto Canvas3D –Creare un oggetto SimpleUniverse e collegarlo al Canvas3D –Costruire e compilare i BranchGroups –Collegare questultimi al Locale del SimpleUniverse

7 Elementi di grafica digitale - Java 3D - Gobbo Dario7 di 29 Il piano di rendering Il SimpleUniverse crea un view contenente anche un image plate. Un image plate è il rettangolo dove luniverso viene proiettato e renderizzato –Il Canvas3D può essere pensato come un image plate. –Limage plate è centrato nellorigine con asse z uscente dallo schermo, asse x orizzontale verso destra, asse y verticale verso lalto

8 Elementi di grafica digitale - Java 3D - Gobbo Dario8 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.

9 Elementi di grafica digitale - Java 3D - Gobbo Dario9 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.

10 Elementi di grafica digitale - Java 3D - Gobbo Dario10 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.

11 Elementi di grafica digitale - Java 3D - Gobbo Dario11 di 29 Aspetto ed Attributi (Apparance) I dati di una Geometry, spesso sono insufficienti per descrivere laspetto di un oggetto: è necessario utilizzare la classe Apparance Un oggetto Apparance non contiene le informazioni sullaspetto 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

12 Elementi di grafica digitale - Java 3D - Gobbo Dario12 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. Apparance Geometry SS ApparanceGeometry S Material LineAttributesColoringAttributes

13 Elementi di grafica digitale - Java 3D - Gobbo Dario13 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.

14 Elementi di grafica digitale - Java 3D - Gobbo Dario14 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 lintersezioni di quattro o più semispazi, bisogna elencare i piani dellintersezione. Se opportunamente usati permettono di incrementare le performance, riducendo le operazioni svolte del motore di rendering

15 Elementi di grafica digitale - Java 3D - Gobbo Dario15 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

16 Elementi di grafica digitale - Java 3D - Gobbo Dario16 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).

17 Elementi di grafica digitale - Java 3D - Gobbo Dario17 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 loggetto e diventato vivo.

18 Elementi di grafica digitale - Java 3D - Gobbo Dario18 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.

19 Elementi di grafica digitale - Java 3D - Gobbo Dario19 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 dellevento. Deve resettare il trigger.

20 Elementi di grafica digitale - Java 3D - Gobbo Dario20 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.

21 Elementi di grafica digitale - Java 3D - Gobbo Dario21 di 29 WakeupCriterion WakeupOnActivation WakeupOnDeactivation WakeupOnAWTEvent WakeupOnBehaviorPost WakeupOnCollisionEntry WakeupOnCollisionExit WakeupOnCollisionMovement WakeupOnElapsedFrames WakeupOnElapsedTime WakeupOnSensorEntry WakeupOnSensorExit WakeupOnTransformChange WakeupOnViewPlatformEntry WakeupOnViewPlatformExit

22 Elementi di grafica digitale - Java 3D - Gobbo Dario22 di 29 Navigare Il view branch graph di un universo virtuale contiene una view platform. Se tale trasformazione cambia, leffetto è quello di muovere e orientare losservatore. Quindi, per navigare, è sufficiente aggiungere un behavior che cambia la view platform in risposta agli eventi

23 Elementi di grafica digitale - Java 3D - Gobbo Dario23 di 29 Picking Il picking permette allutente di interagire con i singoli oggetti della scena e viene implementato con un behavior che risponde agli eventi del mouse. Per recuperare loggetto selezionato, un raggio viene proiettato dal mouse verso il mondo virtuale. Viene calcolata lintersezione del raggio con gli oggetti e si seleziona loggetto più vicino allimage plate.

24 Elementi di grafica digitale - Java 3D - Gobbo Dario24 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. –Nellindicare 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

25 Elementi di grafica digitale - Java 3D - Gobbo Dario25 di 29 Animazioni Come linterazione anche lanimazione è implementata tramite behavior Inoltre esiste un particolare tipo di classi per lanimazione, 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 donda.

26 Elementi di grafica digitale - Java 3D - Gobbo Dario26 di 29 Luci Il modello dilluminazione 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).

27 Elementi di grafica digitale - Java 3D - Gobbo Dario27 di 29 Classi Light LApi 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 allinterno di un angolo con intensità variabile. Lo stato della luce è un valore booleano per indicare se è accesa o spenta.

28 Elementi di grafica digitale - Java 3D - Gobbo Dario28 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.

29 Elementi di grafica digitale - Java 3D - Gobbo Dario29 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.


Scaricare ppt "Java 3D. Elementi di grafica digitale - Java 3D - Gobbo Dario2 di 29 Cosè Java 3D Java 3D è un API grafica 3d ad alto livello. –Il programmatore lavora."

Presentazioni simili


Annunci Google