Seminario per il corso
“Elementi di Grafica Digitale”
Dott. Federico ELIA
A.A. 2008-2009







Set di API aggiuntive per JRE / JDK specifiche
per la grafica 3D
Circa 30 Package, alcuni già deprecated nella
attuale versione 1.5.2
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 nell’albero diventa “vivo”
La scena può esser “compilata” per migliorare le
prestazioni
Di default se si tenta di modificare un nodo già
attached all’albero, viene generata un’eccezione
RestrictedAccessException.
È spesso necessario modificare l’aspetto od il
comportamento dei nodi: alla creazione
dell’oggetto occorre aggiungere le istruzioni che
abilitino le operazioni sul nodo:
nodo.setCapability(…);

Metodo più veloce:



Disegnare su carta l’albero
Nella codifica, si creano i nodi e si associano al parent
partendo dalle foglie, risalendo l’albero fino alla radice
Metodo più versatile (necessario per le
modifiche successive della scena):


Dal disegno su carta dell’albero si codificano i nodi
Si aggiungono le necessarie istruzioni setCapability(…);
per ogni nodo e si può costruire l’albero 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:


ColoringAttributes:


Definisce come disegnare le primitive dei poligoni (triangoli,
quadrilateri…)
Texture:


Definisce spessore ed uso di antialiasing per i punti
PolygonAttributes:


Definisce spessore, pattern ed antialiasing per le linee
PointAttributes:


Definisce il colore ed il metodo di colorazione
LineAttributes:


Descrive completamente un oggetto shape
Definisce l’immagine 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 dell’universo:
void View.setBackClipDistance(double);
 void View.setFrontClipDistance(double);
 double View.getBackClipDistance();
 double View.getFrontClipDistance();


AmbientalLight:



DirectionalLight:



Luce omogenea nel suo bound in tutte le direzioni
Interagisce con l’AmbientColor del Material
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 dell’utente
Tempo
Animazioni controllate con oggetti Behavior,
normalmente associati a TransformGroup
Behavior caratterizzati da:


inizializzazione
stimolo (il verificarsi di un evento)

Behavior comuni per l’interazione con l’utente:
KeyNavigationBehavior: Consente la navigazione
utilizzando la tastiera
 MouseBehavior: Permette di traslare e ruotare
 PickMouseBehavior: Consente di selezionare col click
del mouse l’oggetto su cui operare traslazione o
rotazione
 OrbitBehavior: Rotazione, traslazione, zoom della
scena con l’uso 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 l’operazione
 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 l’oggetto Alpha va da 0 a 1
(/da 1 a 0)
 accelerazione costante dell’incremento / decremento
 il periodo in ms per il quale l’oggetto 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 l’impiego 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, ecommerce, simulazione, cinema, biomedicina, …
 Forse ideale per l’avvicinamento alla Computer
Graphics




Sun Microsystems - Java 3D™ API Specification
F. Milanese - Introduzione a Java 3D
G. Di Blasi – Java3D
Scarica

Seminario Java 3D