Progetto cube mapping
Aggiungere a SoftOgl la funzionalita' per il cube mapping. Funzioni e variabili da definire: bool isCubeMappingEnabled; void CubeMapSide(int id_side, int id_texture); Materiale:
6 immagini da usare per
la cubemap di prova
Se nel vostro esempio di uso del cube mapping volete visualizzare anche
l'environment potete piazzare un cubo centrato nel punto di vista con le
texture attaccate ai lati ma NON è necessario ai fini dell'esame.
|
Esempio con i dati in mountain.rarproiezione: frustumFrustum(-1,1,-1,-1,1,5); trasformazione di modello: LookAt(0,0,2,0,0,0,0,1,0); sfera: Sphere(50,50) (vedi version/main.h main.h) |
Progetto mip-mapping
Aggiungere la funzionalita' mipmapping a SoftOgl Funzioni e variabili da definire: bool isMipMappingEnabled; void BuildMipMaps(int id_texture); Materiale: |
|
Progetto shadow-mapping
Aggiungere la funzionalita' shadowmapping a SoftOgl |
|
Progetto ray-tracing
Implementare un algoritmo di raytracing. In softogl, il progetto consiste nell'aggiungere una funzione RayTrace(..) che prende come argomento la scena ed esegue il raytracing. Questo progetto può essere fatto anche usando opengl invece di softogl. |
|
Progetto Normal Mapping Estendere SofOgl con il NormalMapping |
|
Ambient Occlusion Computation Questo può essere realizzato sia con SoftOgl che con OpenGl. Si tratta di usare la tecnica di ambient occlusion di tutti i vertici di un insieme di poligoni. La tecnica consiste nel "pesare" il contributo di luce ambiente nel calcolo dell'intensità luminosa in un punto con quanto il punto è raggiungibile da raggi di luce provenienti dall' "esterno" della scena. La figura qui sotto rappresenta in 2 dimensioni una semplice scena fatta di due oggetti, A e B. L'idea è che il punto v0 sulla superficie di A riceve meno luce ambiente del punto v1, poichè molti dei raggi di luce che arriverebbero a v0 trovano l'oggetto B sulla propria strada. In pratica, dato un punto e la semisfera poggiata sul piano tangente alla superficie e passante per il punto, si vuole calcolare quanta parte dei raggi che partono dal punto e attraversano la semisfera incontrano (intersecano) un altro oggetto nella scena. Dato che le direzioni sono infinite e il tempo per fare il calcolo non lo è, si stima questa frazione provado un numero n di raggi e prendendo h/n , con h numero di raggi che non incontrano altri oggetti, come valore da moltiplicare per il termine ambiente dell'equazione di illuminazione nel modello di phong. Cosa serve:a) saper caricare una mesh di triangoli da disco b) saper calcolare la normale per vertice (vedi Lez10a.meshes.pdf) c) saper distribure uniformemente le direzioni nella semisfera d) calcolare l'intersezione raggio triangolo. A questo scopo è racomandato l'uso di una tecnica che eviti il test di ogni raggio con tutti i triangoli della scena (vedi Lez11.raytracing.pdf) Il risultato consiste in due programmi distinti: ComputeAO: - carica alcune mesh - calcola l'ambient occlusion, cioè associa ad oni vertice il valore h/n; - salva i valori calcolati VisualizeAO: - che carica una mesh in cui ad ogni vertice è associato un valore compreso tra 0 e 1 e la visualizza moltiplicando tale valore per la componente ambient nell'equazione del lighing.
|
|