NOTA! Questo sito utilizza i cookie e tecnologie simili.

Se non si modificano le impostazioni del browser, l'utente accetta. Per saperne di piu'

Approvo

Capitolo 96: Le ombre in Java3D.

 

Gestire le ombre in Java 3D è abbastanza complicato e i risultati spesso non sono soddisfacenti.

Il tutto nasce dal fatto che il motore 'nativo' di Java 3D non mette a disposizione una funzionalità di rendering delle ombre.

Sta al programmatore trovare una soluzione per calcolare la posizione delle ombre e rappresentarle, cosa che è, in effetti, un'operazione particolarmente complessa da mettere in pratica.

 

 

 

L’immagine seguente è lo screenshot dell’esecuzione di un programma dove sono presenti, nell’universo virtuale di Java 3D, due mesh: il pianeta con l’anello e, dietro, un Box.

La mesh del pianeta le è sulla traiettoria del fascio luminoso di una fonte di luce spot light; si trova, inoltre, tra la sorgente luminosa e il box: dovrebbe quindi proiettare un'ombra sul box . . .

 

 

Java 3D ombre assenti in real time in Java3D

 

 

. . . cosa che, invece, non avviene!

Java 3D effettua quindi l’ombreggiatura all’interno di una mesh (il pianeta con l’anello), ma non tra più oggetti (il Box sullo sfondo).

 

 

Accennerò a due tecniche di base: l'utilizzo di poligoni-ombra e l'utilizzo di texture.

 

I poligoni-ombra sono poligoni che devono essere 'disegnati' sulle parti 'in ombra' degli oggetti.

Il calcolo sia delle coordinate che del colore da dare a tali poligoni (bisogna tenere conto del colore dell'oggetto da ricoprire e della luce) non è di facile attuazione ed è lasciato del tutto al programmatore; inoltre, il risultato spesso non è soddisfacente, anche per motivi legati a problemi di prospettiva e di approssimazione (quanti vertici utilizzare per 'disegnare' l'ombra di una sfera ?).

 

L'utilizzo delle textures per simulare le ombre può essere d'aiuto nel tentare di raggiungere un certo livello di realismo, visto che le ombre reali non sono mai 'nette'.

Le texture possono essere quindi usate sugli oggetti e sui poligoni, ma resta il problema del calcolo delle proiezioni.

Una soluzione 'professionale' per questo tipo di problema andrebbe quindi studiata appositamente, valutando caso per caso.

 

 
Vai all'inizio della pagina