Seminario per il corso Elementi di Grafica Digitale Dott. Federico ELIA A.A
Set di API aggiuntive per JRE / JDK specifiche per la grafica 3D Circa 30 Package, alcuni già deprecated nella attuale versione Disponibilità per le principali piattaforme Wrapper per OpenGL / Direct3D Sintassi 100% Java Documentazione in formato HTML Tutorial online sul sito di Sun Microsystems
Potenzialità? Definizione di oggetti 2D, 3D in varie modalità Aggiunta di suoni alla scena Luci direzionali, ambientali, omnidirezionali, spot Gestione eventi tastiera/mouse/periodici Background, nebbia Rotazione, scala, rotazione Testurizzazione, materiale, trasparenza Visualizzazione: Canvas3D (Applet oppure finestra Swing/Awt)
Valori floating point ( float ) Unità di misura: metro
Struttura ad albero Nodo radice: VirtualUniverse Nodi gruppo: BranchGroup Nodi trasformazione: TransformGroup Nodi per la selezione fra due figli: Switch Foglie: Shape3D e derivati Ramificazione iniziale: Content Branch: Oggetti contenuti nella scena View Branch: Oggetti per la visualizzazione
Un nodo inserito nellalbero diventa vivo La scena può esser compilata per migliorare le prestazioni Di default se si tenta di modificare un nodo già attached allalbero, viene generata uneccezione RestrictedAccessException. È spesso necessario modificare laspetto od il comportamento dei nodi: alla creazione delloggetto occorre aggiungere le istruzioni che abilitino le operazioni sul nodo: nodo.setCapability(…);
Metodo più veloce: Disegnare su carta lalbero Nella codifica, si creano i nodi e si associano al parent partendo dalle foglie, risalendo lalbero fino alla radice Metodo più versatile (necessario per le modifiche successive della scena): Dal disegno su carta dellalbero si codificano i nodi Si aggiungono le necessarie istruzioni setCapability(…); per ogni nodo e si può costruire lalbero secondo il criterio più conveniente
Diagramma della scena:
ColorCube OrientedShape3D Text2D / Text3D Box / Cone / Cylinder / Sphere CompressedGeometry / GeometryArray Raster LineStripArray / LineArray / PointArray TriangleArray / QuadArray …
Appearance : Descrive completamente un oggetto shape ColoringAttributes : Definisce il colore ed il metodo di colorazione LineAttributes : Definisce spessore, pattern ed antialiasing per le linee PointAttributes : Definisce spessore ed uso di antialiasing per i punti PolygonAttributes : Definisce come disegnare le primitive dei poligoni (triangoli, quadrilateri…) Texture : Definisce limmagine da applicare ad una shape e la modalità …
A video viene mostrato solo il contenuto nel volume del Frustum, compreso fra il Front Clip Plane ed il Back Clip Plane Gli oggetti che intersecano i piani vengono tagliati
È possibile personalizzare la posizione dei piani agendo sul View Branch delluniverso: void View.setBackClipDistance(double); void View.setFrontClipDistance(double); double View.getBackClipDistance(); double View.getFrontClipDistance();
AmbientalLight : Luce omogenea nel suo bound in tutte le direzioni Interagisce con l AmbientColor del Material DirectionalLight : Sorgente di luce a raggi paralleli, senza attenuazione Interagisce con lo SpecularColor ed il DiffuseColor PointLight : Sorgente puntuale omnidirezionale (con attenuazione) Interagisce con lo SpecularColor ed il DiffuseColor SpotLight : Simile a PointLight, ma a faretto: fascio conico Interagisce con lo SpecularColor ed il DiffuseColor
Basate su Matrici di trasformazione 4x4 (double) Manipolabili con gli oggetti di tipo Transform3D È possibile combinare più trasformazioni insieme Un oggetto shape, per esser trasformato, deve esser figlio di un oggetto TransformGroup associato ad un Transform3D I TransformGroup possono esser figli di altri TransformGroup, in tal caso gli shape subiscono tutte le trasformazioni, a partire da quella superiore
Gli attributi di una forma cambiano nel tempo in base a: Interazione dellutente Tempo Animazioni controllate con oggetti Behavior, normalmente associati a TransformGroup Behavior caratterizzati da: inizializzazione stimolo (il verificarsi di un evento)
Behavior comuni per linterazione con lutente: KeyNavigationBehavior : Consente la navigazione utilizzando la tastiera MouseBehavior : Permette di traslare e ruotare PickMouseBehavior : Consente di selezionare col click del mouse loggetto su cui operare traslazione o rotazione OrbitBehavior : Rotazione, traslazione, zoom della scena con luso del mouse (click, drag&drop, scroll) …
Behavior comuni basati sul tempo ( Alpha ): ColorInterpolator : Modifica uno dei colori (Speculare, Emissione, Diffuso e/o Ambiente) di un Material SwitchValueInterpolator : Cambia la visualizzazione dei nodi figlio di un oggetto Switch PositionInterpolator / RotationInterpolator / ScaleInterpolator : Cambiano la posizione / angolo di rotazione / fattore di scala di un nodo TransparencyInterpolator : Varia la trasparenza del nodo target, interessandone i TransparencyAttributes dell Appearance
Oggetto di classe Alpha : Fornisce dei metodi per convertire un valore temporale in un valore Alpha, nel range [0,1] Parametri da configurare: numero di volte che si deve eseguire loperazione tempo in ms fra il tempo di partenza ed il primo trigger ulteriore tempo in ms prima della partenza modalità di funzionamento incremento e/o decremento periodo in ms durante il quale loggetto Alpha va da 0 a 1 (/da 1 a 0) accelerazione costante dellincremento / decremento il periodo in ms per il quale loggetto Alpha resta ad 1 (/0)
Java è un linguaggio (semi?)interpretato Java3D poggia su librerie grafiche native e vi accede attraverso chiamate a DLL Il funzionamento del Garbage Collector non è prevedibile Non è possibile utilizzare direttamente alcune funzioni native degli adattatori grafici (Bump Mapping, ad esempio), è richiesto limpiego di tempo CPU per sopperire a questa mancanza, a meno di usare ShaderProgram Non sempre le prestazioni sono accettabili…
Documentazione cristallina Sintassi di facile comprensione ed apprendimento API aperta all estensione delle classi Moltissime primitive grafiche Utilità per la manipolazione di immagini Facile costruzione delle scene Perfettamente integrata con le classi base di Java Multipurpose: usato in C.A.D., giochi, e- commerce, simulazione, cinema, biomedicina, … Forse ideale per lavvicinamento alla Computer Graphics
Sun Microsystems - Java 3D API Specification F. Milanese - Introduzione a Java 3D G. Di Blasi – Java3D