Computer grafica 3D: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Nessun oggetto della modifica
Riga 16:
 
===Creazione della scena===
Una scena si compone di "primitive" (modelli tridimensionali che non possono essere ulteriormente scomposti); il modo più semplice per organizzarla è quello di creare un [[array]] di primitive, ma questo metodo non permette una descrizione più dettagliata della scena, semplicemente "spiega" al ''renderer'' come disegnare la stessa. Una tecnica più avanzata organizza gli oggetti in una [[Albero_%28in_teoria_dei_grafi%29|struttura dati ad albero]] (''scene graph''), che permette di raggruppare logicamente gli oggetti (ad esempio, si può quindi replicare volte un oggetto, avendolo modellato attraverso più ''patch'' NURBS raggruppate, all'interno della stessa scena).
 
Le primitive sono generalmente descritte all'interno del proprio sistema di riferimento locale, e vengono posizionate sulla scena attraverso opportune [[trasformazione geometrica piana|trasformazioni]]. Possono essere descritte con una [[matrice]] 4x4 trasformazioni affini come [[omotetia]], [[rotazione]] e [[traslazione]]: esse si applicano moltiplicando la matrice per un vettore 4D. La quarta dimensione è denominata [[coordinata omogenea]].
 
Ad ogni nodo dello ''scene graph'' è associata una trasformazione, che si applica anche ad ogni nodo sottoposto, ricreando l'interazione fisica tra oggetti raggruppati (come quella tra un uomo e il suo vestito). Anche in sistemi di modellazione e ''rendering'' che non fanno uso di ''scene graph'' è comunque generalmente presente il concetto di trasformazione applicata "in verticale".
 
===''Rendering''===
: ''Per maggiori informazioni, visita l'articolo principale [[Rendering]]''
 
Il ''rendering'' è il processo di produzione dell'immagine finale a partire dal modello matematico del soggetto (scena). Esistono molti algoritmi di ''rendering'', ma tutti implicano la [[proiezione]] dei modelli 3D su una superficie 2D.
 
Gli algoritmi di ''rendering'' si dividono in due categorie: ''[[scanline renderers]]'' e ''[[ray tracers]]''. I primi operano oggetto per oggetto, disegnando direttamente su schermo ogni poligono o [[micropoligono]]; essi richiedono quindi che tutti gli oggetti (anche quelli modellati con curve continue) siano stati sfaccettati in poligoni. I secondi operano pixel per pixel, tracciando un raggio visuale immaginario dal punto di vista all'interno della scena, e determinando il colore del pixel dalle intersezioni con gli oggetti.
 
Una delle funzioni principali di un ''renderer'' è la determinazione della [[superficie nascosta]]. Il ''ray tracing'' svolge implicitamente questa funzione, determinando il colore di un pixel in base all'intersezione del raggio visuale col primo oggetto, ma per l'altro tipo di algoritmi servono tecniche più avanzate per determinare quale poligono sia il più vicino al punto di vista. Il metodo più semplice è quello di disegnare i poligoni a partire da quelli più lontani, in modo che quelli più vicini li sovrascrivano; ma questa tecnica, detta ''painter's algorithm'', "[[algoritmo del pittore]]", si rivela inefficace con poligoni sovrapposti. Per risolvere questo problema fu sviluppato lo [[z-buffer|z-buffering]], che impiega un [[buffer]] per conservare la coordinata ''z'' relativa ad ogni pixel elaborato: se la profondità del poligono che sta per essere elaborato per il pixel è minore di quello in memoria, il pixel viene riscritto; altrimenti l'algoritmo passa al pixel successivo.
 
[[Categoria:Grafica]]