Grafica (C.d.S. Informatica)
2005/06
Relazione del Progetto di Grafica assegnato il 30/05/2006
Modellazione e Resa realistica di "Poppyseed cake"
di Savio Dimatteo


Copertina

Obiettivo

Utilizzando i pacchetti XCCurv, XCSurf e XCRayt di XCModel 4.0, realizzare un' esperienza di modellazione e resa realistica.

Testo

Tenendo presente che un algoritmo di ray-tracing produce delle rese super-realistiche, tipicamente di interni, si chiede di individuare un dipinto dalle caratteristiche opportune (e preferibilmente di autore noto) per essere progettato in modellazione 3D.
Si realizzino i singoli modelli degli oggetti presenti nel dipinto facendo uso degli strumenti introdotti nel corso e a disposizione di xcsurf; si proceda, nella fase di modellazione, al loro assemblaggio e posizionamento.
Si realizzi poi lo scene-graph della scena 3D mediante la libreria descriptor e script in C e si producano alcune immagini fotorealistiche; in particolare si chiede una immagine in cui il punto di vista sia lo stesso rappresentato nel dipinto e altre da differenti punti di vista sia dell'intera scena che di suoi particolari.

Descrizione del modello reale

L' unica informazione presa in considerazione per la realizzazione del modello e' l'immagine del quadro originale, prelevata tramite una ricerca su internet.

Dipinto originale

Osservando il dipinto e' possibile notare subito la presenza di svariati oggetti principali: la tovaglia, un vassoio, un dolce, delle posate, un piatto, un bicchiere, una brocca, una tazza e una sedia.
Analizzando meglio il dipinto si notano invece elementi aggiuntivi: il tavolo e la sua forma ovale, le pieghe che caratterizzano la tovaglia, la parete e i quadri su di essa affissi, il riflesso di un punto di luce nel bicchiere, probabilmente una finestra, le forme particolari del cucchiaio.
Tuttavia il soggetto selezionato permette di aggiungere diversi elementi alla scena 3d in quanto il campo visivo risulta limitato.

Progettazione oggetti della scena e superfici

La fase di progettazione e' stata effettuata utilizzando i pacchetti XcCurv e XcSurf.
Sostanzialmente la modellazione e' avvenuta tramite diverse tecniche:
1) Creazione di una curva 2d in XcCurv e produzione di una superfice in XcSurf (es. rivoluzione di una curva).
2) Creazione di una superfice "usuale" e modifica numerica/interattiva della mesh (es. un cilindro diventa un chiodo del coltello).
3) Creazione di una curva 2d in XcCurv, produzione di superfice e modifica numerico/interattiva della mesh indipendentemente dalla curva.
4) Trimming di superfici usuali

Elenco delle superfici modellate

Si vuole adesso elencare l'insieme degli oggetti modellati e la tecnica utilizzata.


------------------------------------------------------- -----------------------------------
              Oggetto --> Superfice                                  Tecnica
------------------------------------------------------- -----------------------------------
  Bicchiere                                            
  '--surBicchiere.db                                    (1) Revolution
  
  Brocca
  '--surBrocca.db                                       (3) Revolution,CP modification
  '--surBroccaManico.db                                 (3) Tubular,CP modification
  
  Coltello
  '--surChiodo1.db                                      (2) Usual cylinder
  '--surChiodo2.db                                      (2) Usual cylinder
  '--surChiodo3.db                                      (2) Usual cylinder
  '--surChiodo4.db                                      (2) Usual cylinder
  '--surColtelloLamaBottom.db                           (1) Extruding
  '--surColtelloLama.db                                 (1) Extruding
  '--surColtelloManicoL.db                              (1) Extruding
  '--surColtelloManicoR.db                              (1) Extruding
  
  Cornetto
  '--surCornetto.db                                     (3) Revolution,CP modification
  
  Cucchiaino
  '--surCucchiainoCuppinoBottom.db                      (1) Inbetween,skinning
  '--surCucchiainoCuppinoLaterale.db                    (1) Extruding
  '--surCucchiainoCuppinoTop.db                         (1) Inbetween,skinning
  '--surCucchiainoIncavo.db                             (1) Extruding
  '--surCucchiainoInf.db                                (1) Extruding
  '--surCucchiainoLaterale.db                           (1) Extruding
  '--surCucchiainoSup.db                                (1) Extruding
  
  Cucchiaio
  '--surCucchiaioCuppinoBottom.db                       (1) Inbetween,skinning
  '--surCucchiaioCuppinoLaterale.db                     (1) Extruding
  '--surCucchiaioCuppinoTop.db                          (1) Inbetween,skinning
  '--surCucchiaioIncavo.db                              (1) Extruding
  '--surCucchiaioInf.db                                 (1) Extruding
  '--surCucchiaioLaterale.db                            (1) Extruding
  '--surCucchiaioSup.db                                 (1) Extruding
  
  Lampadario
  '--surLampadarioArm.db                                (2) Usual cylinder
  '--surLampadarioFilo.db                               (1) Revolution
  '--surLampadina.db                                    (1) Revolution
  
  MezzaFinestra1
  '--surAnta1.db                                        (1) Extruding
  '--surAnta2.db                                        (1) Extruding
  '--surPomello.db                                      (1) Revolution
  '--surVetro.db                                        (2) Usual plane
  
  MezzaFinestra2
  '--surAnta1bis.db                                     (1) Extruding
  '--surAnta2bis.db                                     (1) Extruding
  '--surPomellobis.db                                   (1) Revolution
  '--surVetrobis.db                                     (2) Usual plane
  
  Muri
  '--muro1.db                                           (2) Usual plane
  '--muro2.dbe                                          (4) Usual plane trim
  '--muro3.db                                           (2) Usual plane
  '--muro4.dbe                                          (4) Usual plane trim
  '--pavimento.db                                       (2) Usual plane
  '--soffitto.db                                        (2) Usual plane
  
  Piatto
  '--surPiatto.db                                       (1) Revolution
  
  Porta
  '--surAnta1Porta.db                                   (1) Extruding
  '--surAnta2Porta.db                                   (1) Extruding
  '--surPomelloPorta.db                                 (1) Revolution
  '--surVetroPorta.db                                   (2) Usual plane
  
  Quadro
  '--surCornice.db                                      (1) Extruding
  '--surImmagine.db                                     (2) Usual cube
  
  Quadro1
  '--surCornice1.db                                     (1) Extruding
  '--surImmagine1.db                                    (2) Usual cube
  
  Quadro2
  '--surCornice1.db                                     (1) Extruding
  '--surImmagine1.db                                    (2) Usual cube
  
  Rolle
  '--surRolleBottom.db                                  (1) Extruding
  '--surRolleLaterale1.db                               (1) Extruding
  '--surRolleLaterale2.db                               (1) Extruding
  '--surRolleTop.db                                     (1) Extruding
  
  Sedia
  '--surSediaBraccioloDestro.db                         (1) Extruding
  '--surSediaBraccioloSinistro.db                       (1) Extruding
  '--surSediaCubetto1.db                                (2) Usual cube
  '--surSediaCubetto2.db                                (2) Usual cube
  '--surSediaCubetto3.db                                (2) Usual cube
  '--surSediaCubetto4.db                                (2) Usual cube
  '--surSediaGamba1.db                                  (2) Usual cube
  '--surSediaGamba2.db                                  (2) Usual cube
  '--surSediaGamba3.db                                  (2) Usual cube
  '--surSediaGamba4.db                                  (2) Usual cube
  '--surSediaSbranga.db                                 (2) Usual cube
  '--surSediaSedile.db                                  (2) Usual cube
  '--surSediaSpallieraC.db                              (1) Extruding
  '--surSediaSpallieraL1.db                             (1) Extruding
  '--surSediaSpallieraL2.db                             (1) Extruding
  '--surSediaSpallieraLateraleArrotondata.db            (1) Extruding
  '--surSediaSpallieraLaterale.db                       (2) Usual cube
  '--surSediaSpallieraR1.db                             (1) Extruding
  '--surSediaSpallieraR2.db                             (1) Extruding
  '--surSediaSpallieraSuperioreCoperchio.db             (1) Extruding
  '--surSediaSpallieraSuperiore.db                      (2) Usual cube
  
  SediaPiccola
  '--surSediaPiccolaCubetto1.db                         (2) Usual cube
  '--surSediaPiccolaCubetto2.db                         (2) Usual cube
  '--surSediaPiccolaCubetto3.db                         (2) Usual cube
  '--surSediaPiccolaCubetto4.db                         (2) Usual cube
  '--surSediaPiccolaGamba1.db                           (2) Usual cube
  '--surSediaPiccolaGamba2.db                           (2) Usual cube
  '--surSediaPiccolaGamba3.db                           (2) Usual cube
  '--surSediaPiccolaGamba4.db                           (2) Usual cube
  '--surSediaPiccolaSbranga.db                          (2) Usual cube
  '--surSediaPiccolaSedile.db                           (2) Usual cube
  '--surSediaPiccolaSpallieraC.db                       (1) Extruding
  '--surSediaPiccolaSpallieraL1.db                      (1) Extruding
  '--surSediaPiccolaSpallieraL2.db                      (1) Extruding
  '--surSediaPiccolaSpallieraLateraleArrotondata.db     (1) Extruding
  '--surSediaPiccolaSpallieraLaterale.db                (2) Usual cube
  '--surSediaPiccolaSpallieraR1.db                      (1) Extruding
  '--surSediaPiccolaSpallieraR2.db                      (1) Extruding
  '--surSediaPiccolaSpallieraSuperioreCoperchio.db      (1) Extruding
  '--surSediaPiccolaSpallieraSuperiore.db               (2) Usual cube
  
  Tavolo
  '--surTavoloCubetto1.db                               (2) Usual cube
  '--surTavoloCubetto2.db                               (2) Usual cube
  '--surTavoloCubetto3.db                               (2) Usual cube
  '--surTavoloCubetto4.db                               (2) Usual cube
  '--surTavoloGamba1.db                                 (2) Usual cube
  '--surTavoloGamba2.db                                 (2) Usual cube
  '--surTavoloGamba3.db                                 (2) Usual cube
  '--surTavoloGamba4.db                                 (2) Usual cube
  '--surTavoloSup1.db                                   (2) Usual cylinder
  '--surTavoloSup2.db                                   (2) Usual cylinder
  
  Tazza
  '--surTazza.db                                        (1) Revolution
  
  Tovaglia
  '--piegaCentrale.db                                   (3) Inbetween,skinning,CP mod
  '--piegaCentraleH.db                                  (3) Inbetween,skinning,CP mod
  '--piegaLaterale1V.db                                 (3) Inbetween,skinning,CP mod
  '--piegaLaterale2V.db                                 (3) Inbetween,skinning,CP mod
  '--piegaLaterale3V.db                                 (3) Inbetween,skinning,CP mod
  '--piegaLaterale4V.db                                 (3) Inbetween,skinning,CP mod
  '--piegaLateraleH1.db                                 (3) Inbetween,skinning,CP mod
  '--piegaLateraleH2.db                                 (3) Inbetween,skinning,CP mod
  '--surTovaglia.db                                     (1) Extruding
  '--surTovagliaLaterale.db                             (1) Skinning
  
  Vassoio
  '--surVassoio.db                                      (3) Revolution,CP modification


Creazione degli oggetti

Segue la spiegazione di come e' stato creato ogni oggetto appartenente al dipinto originale.

Bicchiere
Tramite XcCurv e' stata creata una curva sezione del bicchiere da importare in XcSurf.
Per creare la curva e' stata utilizzata la funzione "shape" e sono stati dati i control point con l'ausilio del mouse e della griglia.
Ottenuta una prima curva sono stati aggiunti e sovrapposti dei control point per creare gli spigoli.
Successivamente e' stata rimossa la griglia ed e' stata modificata la posizione dei control point per ottenere una curva piu precisa.
La curva ottenuta e' di grado 3.
La curva 2D e' stata importata in 3D mantenendo fisso l'asse delle Y.
La mesh finale e' stata ottenuta facendo una rivoluzione della curva 3D.
Vassoio
Tramite XcCurv e' stata creata una curva sezione del vassoio da importare in XcSurf.
Per creare la curva e' stata utilizzata la funzione "shape" e sono stati dati i control point con l'ausilio del mouse e della griglia.
Ottenuta una prima curva sono stati aggiunti e sovrapposti dei control point per creare gli spigoli.
Successivamente e' stata rimossa la griglia ed e' stata modificata la posizione dei control point per ottenere una curva piu precisa.
La curva ottenuta e' di grado 3.
La curva 2D e' stata importata in 3D mantenendo fisso l'asse delle Y.
E' stata creata una prima mesh tramite rivoluzione della curva.
Scalando alcuni control point della mesh e' stata allungata la forma fino ad ottenere il vassoio.
Piatto
Tramite XcCurv e' stata creata una curva sezione del piatto da importare in XcSurf.
Per creare la curva e' stata utilizzata la funzione "shape" e sono stati dati i control point con l'ausilio del mouse e della griglia.
Ottenuta una prima curva sono stati aggiunti e sovrapposti dei control point per creare gli spigoli.
Successivamente e' stata rimossa la griglia ed e' stata modificata la posizione dei control point per ottenere una curva piu precisa.
La curva ottenuta e' di grado 3.
La curva 2D e' stata importata in 3D mantenendo fisso l'asse delle Y.
E' stata creata la prima mesh per rivoluzione della curva.
Tazza
Tramite XcCurv e' stata creata una curva sezione della tazza da importare in XcSurf.
Per creare la curva e' stata utilizzata la funzione "shape" e sono stati dati i control point con l'ausilio del mouse e della griglia.
Ottenuta una prima curva sono stati aggiunti e sovrapposti dei control point per creare gli eventuali spigoli.
Successivamente e' stata rimossa la griglia ed e' stata modificata la posizione dei control point per ottenere una curva piu precisa.
La curva ottenuta e' di grado 3.
La curva 2D e' stata importata in 3D mantenendo fisso l'asse delle Y.
E' stata creata la prima mesh per rivoluzione della curva.
Coltello
Inizialmente e' stata creata la sagoma della lama del coltello: una curva di grado 2 ottenuta con la stesse modalita' sopra descritte.
La curva precedentemente creata e' stata suddivisa in quattro curve con la funzione "split".
Sono state salvate le quattro curve per poi caricarle in XcCurv.
In questa fase sono state caricate in XcCurv le quattro curve.
Ripetendo quest' ultima operazione sono state ottenute otto curve.
Quattro delle curve sono state poi "spinte" di un certo delta verso la direzione Z posizionandosi sulla visuale "Up" e utilizzando la funzione "push/pull".
Per creare la parte metallica del coltello e' stato infine effettuato "Extruding" prima tra le quattro curve della parte superiore e poi tra le quattro curve della parte inferiore.
Per ultimare la lama e' stata effettuata una modifica dei CP su un lato della mesh.
Come si puo' notare nella figura sono stati avvicinati questi punti verso l'altro lato della mesh.
Il manico segue piu o meno lo stesso procedimento: la curva di grado due e' stata divisa in due curve.
Come prima sono state importate le curve per due volte ottenendo cosi' quattro curve sovrapposte.
Spingendo verso il basso due di esse e' stato possibile effettuare "Extruding" ottenendo cosi' una meta' del manico.
Ottenuto il primo pezzo di manico manico ne e' stata effettuata una copia salvando e riaprendo la mesh.
Sono stati poi "incollati" i tre pezzi mediante la funzione per traslare "cp to cp" applicata a tutti i control point della mesh (all cp).
Per finire sono stati applicati quattro cilindretti ("New Sur" > "Usual" > "Cylinder") su entrambe le componenti dei manici ottenendo cosi' i chiodi del coltello.
Cucchiaio & Cucchiaino
Per realizzare il manico e' stata disegnata la curva di grado 3 rappresentata in figura.
La curva e' stata disegnata aggiungendo control point e modificando la partizione dei nodi per alcune parti della curva.
La curva e' stata poi "specchiata" copiando il file appena salvato e modificandolo.
Le modifiche nel file comportano:
1) La rimozione di tutti i segni "-" dai punti situati sull' asse delle X.
2) La inversione dei punti di controllo.
3) La inversione della partizione dei nodi.
Dopo e' stato effettuato il join delle due curve ottenute e sono stati salvati i risultati.
Le inversioni dei punti di controllo sono state eseguite per permettere all' operazione "join" di collegare correttamente le curve.
Infatti l'operazione di join implementata dal programma collega l'ultimo punto della prima curva con il primo della seconda curva, non permettendo cosi' di collegare due primi punti di due curve (o due ultimi punti).
Una volta invertito l'ordine dei punti di controllo e' stata necessaria anche l'inversione dei nodi.
Per realizzare la superfice superiore del manico sono state aperete le tre curve precedentemente create in 2D: una curva intera e due mezzecurve.
Per dare la forma sinusoidale al cucchiaio sono stati "spinti" su Z i control point di ogni curva.
Le curve modificate sono state salvate come curve3D.
Le curve appena salvate sono state poi ricaricate, ottenendo cosi' sei curve.
Tre delle sei curve sono state scalate e leggermente "spinte" su Z per realizzare l'incavo del manico.
Sono state ancora una volta caricate le tre curve3D piu esterne e sono state spinte su Z per rappresentare la parte inferiore del manico.
Il manico e' stato ottenuto mediante operazioni di "extruding" tra queste curve:
-Parte superiore-
Extruding tra la curve intera esterna e quella intera interna.
Extruding tra le mezze curve interne.
-Parte laterale-
Extruding tra le sue curve intere esterne
-Parte inferiore-
Extruding tra le due mezze curve esterne inferiori.
Per realizzare la parte restante del cucchiaio e' stata creata la curva 2D ovale.
La curva 2D e' stata poi caricata in XcSurf per due volte.
Una delle due curve e' stata ridimensionata e scalata (in figura #4).
Sono state poi realizzate le curve intermedie 2 e 3 mediante l'operazione "inbetween" applicata tra la prima e l'ultima curva.
Dopo aver creato la superfice per extruding tra le quattro curve appena descritte, e' stata ricaricata la curva piu esterna (#1) ed e' stata traslata su Z della stessa distanza che c'e' tra le due superfici del manico.
Tramite extruding tra queste due curve e' stata creata la parte laterale della coppa del cucchiaio.
La parte inferiore della coppa e' invece una copia di quella superiore opportunamente traslata.
Infine sono stati assemblati i due pezzi separatamente creati "incollando" le superfici tramite la funzione "cp to cp" applicata su tutti i punti delle mesh.
Il cucchiaino e' stato ottenuto copiando e scalando questo oggetto.
Sedia
Le gambe, i cubetti, il sedile e parte della spalliera sono stati creati tramite "usual surfaces" di tipo cubo.
Ciascun cubo e' stato opportunamente scalato e posizionato.
Per ciascuna superfice curva della sedia (particolari della spalliera, braccioli) e' stata dapprima tracciata una curva 2D.
Ogni curva e' stata poi caricata in 3D e quadruplicata.
I vari componenti sono stati ottenuti tramite extruding tra ogni gruppo di quattro curve.

Il componente laterale non e' un semplice cubo translato.
Osservando il dipinto, si nota una accentuata luminosita' su questo componente, dunque si e' pensato ad una superfice curva.
Cosi' e' stata disegnata una curva2D di terzo grado.
Questa curva e' stata poi importata e traslata su Z fino all' altezza desiderata.
Tramite extruding e' stato ottenuto questo componente, che pero' e' rimasto "aperto" sulla cima.
Per questo e' stato creato un "tappo" scalando di molto una copia di una curva utilizzata per costruire questo pezzo e posizionandola come "centro" della stessa.
Per concludere e' stato effettuato "extruding", assemblando opportunamente questo componente.

  
Cornetto
Prima e' stata disegnata la curva di un ipotetico cornetto "dritto". Questa e' una curva di grado 3.
Caricando la curva in XcSurf e' stata effettuata una rivoluzione per ottenere la superfice del cornetto mostrata in figura.
Adesso sono stati ruotati gradualmente alcuni control point della mesh per deformare il cornetto.
Ottenuta la deformazione delle estremita' e di alcuni punti piu interni, e' stata infine "schiacciata" la mesh sollevando alcuni punti della parte inferiore.

  
Rolle
Dopo aver creato meta' della curva, e' stata effettuata l'operazione di mirroring precedentemente descritta per ottenere l' altra meta' della curva.
In XcSurf sono state caricate per due volte le curve2D precedentemente salvate.
Prima di effettuare l'extruding finale sono stati traslati verso il basso alcuni punti della mesh allo scopo di creare il "taglio del coltello".

Tavolo
Le gambe e i cubetti sono stati realizzati tramite le "usual surfaces" come per la sedia.
La parte superiore del tavolo e' composta da due cilindri scalati su Z.
Il secondo cilindro e' leggermente piu largo del primo ed e' posizionato al suo interno.
Tuttavia non sono stati curati molto i dettagli di questo oggetto dato che e' coperto dalla tovaglia, sicuramente un oggetto di maggior rilievo per il dipinto scelto.

Brocca
Tramite XcCurv e' stata creata la curva sezione di una brocca senza manico. La curva e' di secondo grado.
Dopo aver importato la curva in 3D tenendo fisso l'asse Y, e' stata generata una superfice per rivoluzione a partire dalla curva stessa.
Per ottenere il muso della brocca e' stato effettuato del raffinamento locale della mesh: bisogna entrare nella modalita' interattiva e selezionare due punti (tramite ), dopo e' sufficiente selezionare il pulsante di raffinameto locale (). Le principali modifiche alle colonne di punti riguardano la traslazione e la scala.

Il manico della brocca e' una superfice tubolare.
Dunque e' stata disegnata in 2D la forma e la traccia che il manico deve seguire.
Le due curve appena descritte sono state caricate in 3D tenendo fissi due assi diversi: per la traccia e' stato fissato Y, per la forma e' stato fissato Z.
La superfice tubolare e' stata creando selezionando in maniera opportuna forma e traccia.
Tovaglia
Per creare la parte superiore della tovaglia e' stata creata una curva 2D.
Tale curva e' stata caricata due volte in XcSurf tenendo fisso l'asse Z.
Una copia della curva e' stata poi scalata fino a sembrare un punto, grazie al quale e' stato possibile effettuare extruding.
Per realizzare il bordo penzolante della tovaglia e' stata disegnata una curva 2D da importare in XcSurf.
Dopo averla caricata tenendo fisso Z e dopo averla traslata, la curva ha assunto una posizione tale da permetterne lo "skinning" con la curva superiore esterna della tovaglia.

Le pieghe sono delle copie modificate di una singola piega modellata a parte. Per creare la piega e' stata inizialmente disegnata la sua curva.
La curva e' stata poi caricata in XcSurf e scalata fino a diventare piccolissima.
Questa e' stata poi traslata a una certa distanza da quella piu' grande; dopo ne e' stata creata una copia la quale e' stata traslata alla stessa distanza ma dalla parte opposta.
Gli spostamenti sopra descritti hanno permesso di utilizzare inbeetween per creare altre curve intermedie.

La superfice piega ottenuta e' stato poi moltiplicata generando altre superfici piega.
Ogni piega e' stata quindi disposta sulla tovaglia e scalata (appiattita) su Z.

Descrizione Scena

Al fine di rendere il progetto piu completo sono stati modellati altri oggetti aggiuntivi, non presenti direttamente nella scena.
Gli altri oggetti modellati sono la porta, la finestra, l'altra sedia e il lampadario.
In particolare i muri sono stati modellati tramite delle superfici piano trimmate in corrispondenza della porta e della finestra.

Per comporre la scena e' stata utilizzata la libreria descriptor e uno script C.
I materiali utilizzati nella scena sono:
Metallo - utilizzato per il coltello, il cucchiaio, il cucchiaino e i pomelli di porte e finestre.
Vetro - utilizzato per il bicchiere e le finestre.
MetalloScuro - utilizzato per la tazza nera e per il vassoio.
Ceramica - utilizzato per la brocca e il piatto.
CeramicaVerde - utilizzato per il lampadario.
Stoffa - utilizzato per la tela dei quadri e per la tovaglia.
Plastica Nera - utilizzato per il filo che congiunge il lampadario al soffitto.
Legno - utilizzato per tutti gli oggetti di legno come finestre, porta, tavolo, sedie, manico del coltello.
Pasta - utilizzato per il cornetto e la brioche.
Intonaco - utilizzato per i muri e il soffitto.
Marmo - utilizzato per il pavimento.


Il colore di sfondo utilizzato e' un celestino riflettente, per simulare il cielo e l'ambiente esterno alla stanza, visibile puntando la telecamera verso la finestra.

Dopo aver settato i parametri della luce ambiente, sono state create altre due luci:
Luce punto - posizionata fuori dalla stanza in corrispondenza della finestra, serve anche per dirigere le ombre della scena verso una certa direzione.
Luce cono - posizionata nella lampadina del lampadario per simulare l'accensione eventuale della luce del lampadario.

Successivamente sono state caricate le varie superfici modellate e su di esse sono stati applicati i materiali e le eventuali texture.
Quasi tutte le texture utilizzate per gli oggetti sono texture di dominio; queste sono state ottenute e applicate sugli oggetti nella maniera seguente:

1) Disegnare la texture di riferimento.

2) Applicare la texture all' oggetto specificandone il dominio.
3) Renderizzare l'oggetto per mostrare i vari punti della texture di riferimento.

4) Aiutandosi con la resa ottenuta, disegnare la texture reale direttamente sulla texture di riferimento 2D.

5) Applicare la texture ottenuta utilizzando per il dominio gli stessi valori usati per la texture di riferimento.

Gli oggetti che non usano texture di dominio sono i tre quadri affissi al muro.
Infatti per questi e' piu conveniente utilizzare una texture di proiezione dell'immagine sulla tela.

Infine sono state applicate una serie di trasformazioni su ogni oggetto affinche' fosse posizionato correttamente all'interno della scena.
Terminata la creazione dello script descrivente la scena, sono state aggiunte dei "comportamenti" che alcuni oggetti devono assumere a seconda di determinati parametri.
I parametri che si possono settare sono:
- Apertura della finestra (da 0 a 90 gradi)
- Accensione/Spegnimento della luce

- Altezza di sospensione degli oggetti nella scena

Questo rende possibile la creazione di semplici script per la produzione di animazioni che richiamano il programma ogni volta con parametri diversi.


Immagini di Resa


Download e Installazione

Per questioni pratiche si e' pensato di nominare il progetto "fenyes".
Questo nome e' stato preso dall' autore del dipinto Adolf Fenyes.

E' possibile scaricare l' archivio compresso contenente il progetto e la relazione:


Una volta scaricato, e' possibile decomprimere con il comando:

tar -xvzf dimatteo_fenyes.tgz

Dopo la decompressione, verra' generata la seguente struttura:


fenyes
  '--curves2d (curve 2d utilizzate)
  '--curves3d (curve 3d utilizzate)
  '--modello (textures, script C, MakeFile, superfici db, scena md, vista vw ecc...)
  '--relazione (questa relazione)

come richiesto da specifiche.



Problemi e bug

Sono stati riscontrati dei disagi in fase di posizionamento finale degli oggetti nella scena in quanto durante la modellazione non si e' tenuto conto delle dimensioni di ciascun oggetto rispetto ad un altro.
Il disagio e' stato affrontato mediante l'uso di xcrayt in combinazione con lo script C:
Importando ciascun oggetto in Xcrayt sono state applicate le trasformazioni necessarie per la corretta scala e posizione all' interno della scena, annotando man mano il tipo di trasformazione ed i rispettivi valori.
Infine sono state applicate le stesse trasformazioni nello script C facendo uso dei valori annotati.



Torna su