Proiezioni 3D Reloaded!
Progetto del corso di Geometria Computazionale
Università degli Studi di Milano a.a. 2007/08

Realizzato da: Marco Bastianello & Dario Sottana & Marco Ziliani

.:: Home ::.          .:: Applet ::.          .:: Teoria ::.          .:: Manuale ::.
         .:: Contatti ::.

.:: Teoria Applicata  per la Realizzazione del Progetto ::.




.:: Rappresentazione dei Solidi ::.


Per rappresentare gli oggetti tridimensionali si è utilizzata l'operazione di vista descritta alle pagine 236/7/8 del testo di Penna-Patterson [1], utilizzando il centro di prospettiva descritto in coordinate sferiche, e alla pagina del sito del corso di Geometria Computazionale [2].

E' stata implementata la possibilità di muovere il meccanismo di vista, con alcune limitazioni:

  • ρ è compreso tra 25 e 65000;
  • θ è compreso tra 0º e 90º;
  • φ è compreso tra 0º e 180º.

Abbiamo scelto queste limitazioni per garantire una corretta visualizzazione dei solidi e per coerenza con gli scopi dell'applet.

 

Wireframe

Per visualizzazione in modalità wireframe si intende la rappresentazione dei solidi realizzata disegnando gli spigoli e ponendo in evidenza i segmenti visibili.

Sulla scena possono essere presenti contemporaneamente diversi solidi, con l’assunzione che essi non possano compenetrarsi. Quando un solido viene aggiunto alla scena viene memorizzato un riferimento ad esso, a tutti i suoi spigoli e a tutte le sua facce.

Primo passo

Per ogni spigolo si prendono in considerazione tre punti chiave: i due vertici e il punto medio. Controlliamo se essi sono nascosti da una qualsiasi faccia presente sulla scena. Conoscere se i vertici sono nascosti o meno ci servirà nel momento in cui andremo a disegnare lo spigolo. Esaminare il punto medio permette di individuare gli spigoli non visibili di un solido.
In particolare se il punto medio è nascosto da una faccia appartenente allo stesso solido possiamo considerare lo spigolo interamente nascosto (fig 1).

figura 1

Figura 1


Un punto H è nascosto da una faccia ABCD se sono verificate due condizioni:

  • H è nascosto dal piano π contenente ABCD  :  π  divide lo spazio in due semispazi.  H e PV devono trovarsi in semispazi opposti;

figura 2

Figura 2

  • H è visto da PV compreso all’interno della faccia ABCD. Per ogni lato della faccia si crea un piano τ passante per gli estremi del segmento e PV;  si controlla che A e un vertice non appartenente al lato si trovino nello stesso semispazio. Questa condizione deve valere per ogni lato.

figura 3

Figura 3


Lo stesso procedimento viene usato per facce triangolari e pentagonali.

Secondo passo

Uno spigolo l1, appartenente ad un solido S1, risulta parzialmente nascosto se un solido S2 si frappone tra S1 e il punto di vista. Di conseguenza ci sarà almeno uno spigolo l2 appartente a S2 che si sovrappone a  l1 rispetto al punto di vista PV. Il punto su l1 in cui i due segmenti si incrociano visti da PV rappresenta il punto in cui lo spigolo da visibile diventa nascosto.

figura 4

Figura 4

Viene preso in condiderazione uno spigolo alla volta, chiamato lj e confrontato con ogni altro spigolo li: se, rispetto al punto di vista, i due segmenti si incrociano e li è davanti ad lj si prende il punto su lj in cui i due spigoli sono visti sovrapposti.

Due segmenti  AB e CD si intersecano, visti da un punto PV se valgono  le seguenti condizioni:

  • costruendo il piano π passante per A,B e PV i punti C e D si trovano in semispazi diversi;
  • costruendo il piano τ passante per C,D e PV i punti A e B si trovano in semispazi diversi.

figura 5

Figura 5

Dati due segmenti  AB e CD che si intersecano rispetto ad un punto di vista PV, per individuare quale tra i due copre l’altro si costruisce il piano passante per C,D e A; se B e PV si trovano nello stesso semispazio AB copre CD, altrimenti vale il contrario.

figura 6

Figura 6


Dati due segmenti  AB  e CD che si intersecano rispetto ad un punto di vista PV, ed essendo AB coperto da CD, si deve individuare il punto di intersezione I sul segmento ABI è il punto d’intersezione tra la retta  r che passa per A  e B e un piano τ passante per C e D.

figura 7

Figura 7

La retta r è descritta come luogo di intersezione tra il piano π passante per A, B e PV e un piano σ ausiliario passante per A, B e l’origine O. Si ottiene così un sistema lineare in tre incognite, che è possibile risolvere con il metodo di Cramer.
Otteniamo il sistema in 3 incognite:

eq

Indichiamo con M, N e X le matrici:

eq                   eq                        eq

Indichiamo inoltre con Ni la matrice quadrata ottenuta sostituendo la colonna i-esima della matrice dei coefficienti  M con la colonna N dei termini noti.
Le soluzione del sistema si può rappresentare utilizzando le matrici sopra introdotte, nella forma:

eq                          eq                          eq

Non tutti i punti di intersezione individuati corrispondono ad un cambiamento  di visibilità dello spigolo. In figura 8 il punto di intersezione I è nascosto dalla faccia α del prisma. Prima e dopo I il lato AB rimane non visibile ed I non viene pertanto preso in considerazione.

figura 8

Figura 8

Terzo passo

Il lato viene disegnato.  Si distinguono diversi casi a seconda della visibilità dei vertici A e B del lato:

  • se A e B sono entrambi visibili e non ci sono punti di intersezione il lato è visibile
  • se A e B sono nascosti e non ci sono punti di intersezione il lato è nascosto
  • se sono presenti punti di intersezione il lato è parzialmente visibile

 

Visualizzazione facce

Con la visualizzazione in modalità "facce" vengono disegnate le facce visibili dei solidi. I controlli per stabilire se una faccia sia visibile o meno vengono effettuati all'interno dello stesso solido. Una faccia è considerata nascosta se almeno uno dei punti medi degli spigoli che la compongono è nascosto da un'altra faccia appartenente allo stesso solido. Abbiamo considerato i punti medi dei lati e non i vertici poichè nel caso di facce triangolari i vertici possono essere tutti visibili pur essendo la faccia nascosta (fig. 9).

figura 9

Figura 9

Nel caso particolare del tetraedro è necessaria un'ulteriore condizione. Come si può vedere in figura 10, la faccia ABC è nascosta pur essendo visibili i punti medi degli spigoli AB, BC e CB. Controlliamo quindi in aggiunta se il vertice non appartenente alla faccia, in questo caso il punto D, viene visto all'interno dell'area da essa occupata: in questo caso sarà considerata nascosta.

figura 10

Figura 10

Una volta individuate le facce visibile all'interno di ogni solido la corretta visualizzazione è ottenuta ordinando i solidi rispetto alla loro distanza dal punto di vista. Vengono quindi disegnati in ordine decrescente, in modo che i solidi più vicini a PV risultino davanti a quelli più lontani. 

Riferimenti bibliografici

[1] Penna, Patterson, "Projective Geometry and its application to Computer Graphics", ed. Prentice-Hall.

[2] La pagina del corso di Geometria Computazionale:

http://www.mat.unimi.it/users/alzati/Geometria_Computazionale_98-99/apps/Funzioni3D/Funzioni.html

[3] Appunti personali del corso di Geometria Computazionale tenuto da A.Alzati, a.a. 2006-2007