Si supponga di costruire la prospettiva piana
di un oggetto: ponendo l'occhio nel centro di proiezione (PV), un generico
punto P dell'oggetto reale si proietta sul suo omologo P' appartenente
al piano alfa della prospettiva e viceversa.
Supponiamo ora - mantenendo immobile il Centro di proiezione e di vista,
il Quadro prospettico e l'oggetto - di anteporre al Quadro una generica
superficie semi-riflettente beta. In tal modo, ciascuna semiretta
r, uscente dal PV e passante per P, oltre ad intersecare il piano
prospettico in P', intersecherà anche la superficie semi-riflettente
in P'' e sarà da questa riflessa in q (con P''' intersezione
di q con il piano orizzontale XY), seguendo le leggi della riflessione:
a) il raggio incidente r, il raggio riflesso q e la normale
o alla superficie di incidenza nel punto di incidenza appartengono
ad un piano;
b) l'angolo di incidenza, calcolato rispetto alla normale o,
è uguale all'angolo di riflessione, calcolato rispetto alla stessa normale.
Dunque, dal PV, i punti P, P', P'' risultano coincidenti (appartengono,
infatti, alla stessa retta r), con P'' punto di riflessione di
P''' dal PV.
È da notare che non in tutti i casi si otterrà
l'intersezione P''' di q con il piano XY: questo, evidentemente,
dipende dalla conformazione della superficie riflettente e dalla giacitura
del PV e di P.
Come risultato finale, dal PV si 'vedrà' la stessa scena sia osservando
direttamente l'oggetto P, sia osservando la sua prospettiva P' oppure,
infine, osservando la riflessione di P''' in P'' sulla superficie beta.
In tal modo sarà possibile creare anamorfosi speculari anche di ombre
e, comunque, di oggetti complessi o di immagini ottenute da scanner:
sarà sufficiente possedere una immagine raster e conoscere, o
definire, il Punto di Vista di quell'immagine.
|
A questo punto è immediato comprendere il funzionamento
del software:
- Si definisce una qualsiasi immagine bitmap come la prospettiva
di una scena della quale si conosce la giacitura del quadro alfa
e la posizione del centro di proiezione e di vista PV.
- Si definisce una superficie riflettente beta.
- Ciascun pixel di alfa sarà
pertanto deformato in una nuova immagine bitmap, appartenente
al piano XY, in modo tale che l'immagine finale sia identica all'immagine
contenuta in alfa, vista dal PV.
Evidentemente, in funzione della forma della superficie riflettente
beta, il pixel si deformerà in vario modo, occupando di
norma un'area superiore e comunque di forma diversa da quella originaria:
lo specchio curvo, infatti, di norma non conserva le caratteristiche
proiettive.
Operativamente, poiché si lavora nello spazio cartesiano XYZ, all'immagine
di partenza (definita da un certo numero di pixel in lunghezza
e altezza) si fa corrispondere un rettangolo di altrettante unità (il
rettangolo azzurro dell'immagine). Pertanto, per ciascun pixel
di alfa è possibile individuare un quadrato
definito da quattro vertici, espressi in coordinate XYZ, appartenente
al piano di alfa. I lati del quadrato
sono divisi dal software in un certo numero di parti (definite
dall'utente mediante il parametro Accuratezza e comprese tra
1 e 20), ottenendo così un poligono (formato da 4 a 80 punti). I punti
che formano il poligono sono trasformati seguendo il procedimento descritto,
costruendo un nuovo poligono, non più 'quadrato' e appartenente al piano
orizzontale XY.
Fissato il numero di pixel del lato maggiore dell'immagine finale
e noto il rettangolo, appartenente al piano XY, che include completamente
l'immagine in anamorfosi, sarà pertanto possibile stabilire se un qualsiasi
pixel di tale immagine è interno o esterno al poligono.
Nel caso sia interno, ad esso sono assegnati gli stessi valori RGB (Red,
Green, Blue) del pixel di alfa.
|
I quattro programmi operano in modo del tutto analogo tra loro, pur
richiedendo l'immissione di parametri diversi, in funzione delle loro
caratteristiche specifiche.
In tutti i casi, i parametri sono contenuti in un file di testo (in
formato ASCII, che si potrà creare, ad esempio, con WordPad) che sarà
l'unico file immesso direttamente dall'utente: infatti, ciascun programma
richiede esclusivamente l'immissione del nome del file di testo che
contiene i parametri di lavoro.
I file usati dai programmi sono di due tipi:
- file di tipo DXF contenenti entità 3Dfaccia (o 3Dface, nella versione
inglese di AutoCAD);
- file bitmap di tipo PPM, in formato ASCII ed a 24 bit di profondità
di colore, ottenuti, ad esempio, per mezzo del programma PaintShop.
Il programma Cono.exe considera un cono verticale retto a base
circolare come superficie specchiante e richiede la seguente struttura
del file di ingresso:
Coordinate X e Y dell'asse del cono verticale
Raggio della base del cono
Altezza del cono
Nome del file (di tipo DXF) contenente la faccia che definisce l'immagine
Nome file bitmap (PPM) di ingresso che contiene l'immagine
di partenza
Nome file bitmap (PPM) di uscita che conterrà l'immagine in
anamorfosi
Coordinate X Y Z del Centro di Proiezione e di Vista
Numero di pixel del lato maggiore dell'immagine finale (massimo
5000, valore espresso con un numero intero)
Accuratezza di calcolo (valori accettati: interi compresi tra 1 e 20)
Esempio:
1000.0 1000.0
800.0
900.0
immagine.dxf
base.ppm
cono.ppm
1000.0 1000.0 950.0
1000
20
L'esempio indica un cono avente l'asse posto nelle coordinate X = 1000,
Y= 1000 (Z è sempre posta pari a zero); avente un raggio di 800 unità
ed una altezza di 900 unità (rispetto al piano XY che contiene la base).
Il nome del file contenente la faccia che racchiude l'immagine di partenza
è immagine.dxf (conterrà un'unica faccia ed in ogni caso verrà
usata l'ultima faccia letta nel file). Il nome del file che contiene
l'immagine è base.ppm. Il nome del file che sarà prodotto dal
programma è cono.ppm. Le coordinate X, Y, Z del centro di proiezione
sono X = 1000; Y = 1000; Z = 950. Il lato maggiore dell'immagine prodotta
sarà di 1000 pixel. Infine, l'accuratezza sarà di 20 (il valore
massimo).
Il programma Cilindro.exe considera un cilindro verticale retto
a base circolare come superficie specchiante (in questo caso il cilindro
è considerato di altezza infinita) e richiede la seguente struttura
del file di ingresso:
Coordinate X e Y dell' asse del cilindro verticale
Raggio della base del cilindro
Nome del file DXF contenente la faccia che definisce l'immagine
Nome file bitmap PPM di ingresso che contiene l'immagine
di partenza
Nome file bitmap PPM di uscita che conterrà l'immagine in anamorfosi
Coordinate X Y Z del Centro di Proiezione
Numero di pixel del lato maggiore dell'immagine finale
Accuratezza di calcolo (1..20)
Il programma Generico.exe considera come superficie specchiante
un generico insieme di facce, contenute in un file DXF (massimo 50.000
facce triangolari), e richiede la seguente struttura del file di ingresso:
Nome del file DXF contenente le facce che definiscono la superficie
dello specchio
Nome del file DXF contenente la faccia che definisce l'immagine
Nome file bitmap PPM di ingresso che contiene l'immagine
di partenza
Nome file bitmap PPM di uscita che conterrà l'immagine in anamorfosi
Coordinate X Y Z del Centro di Proiezione
Numero di pixel del lato maggiore dell'immagine finale
Accuratezza di calcolo (1..20)
Valore che indica se l'asse principale di vista è verticale ed è posto
sul vertice di un cono generico (1 = sì, qualsiasi altro valore intero
= no).
Infatti, ad esempio, è possibile definire un cono retto a base ellittica
o di qualsiasi altra forma: se il Centro di Proiezione è posto sull'asse
del cono riflettente, il programma potrebbe non trovare nessuna intersezione
con le facce dello specchio. Il flag 0/1 permette dunque al programma
di operare in modo corretto, eliminando dal calcolo l'areola in corrispondenza
del vertice del cono.
Il programma Generico.exe, non conoscendo a priori la forma della
superficie dello specchio, opera seguendo lo schema:
- per ciascun punto P, da trasformare in anamorfosi in P''', costruisce
la retta PV-P;
- verifica se tale retta interseca uno dei triangoli che definiscono
la superficie riflettente (in ogni caso prende in considerazione il
primo triangolo intersecato dalla retta PV-P);
- se nessun triangolo è intersecato dalla retta PV-P, il punto P non
è trasformabile;
- in caso contrario, calcola la perpendicolare al piano - definito dal
triangolo - in P'', punto di intersezione interno al triangolo;
- infine, calcola la retta riflessa e l'intersezione - se esistente
- tra tale retta ed il piano XY: tale punto è il punto P''', anamorfosi
speculare di P'' dal PV.
L'approssimazione di una superficie curva per mezzo di triangoli può
produrre risultati non del tutto corretti: infatti, in tal modo, la
superficie risulta non continua ed un singolo pixel 'di partenza'
può contenere punti appartenenti a facce anche molto angolate tra loro
(se l'interpolazione ha previsto la creazione di poche facce). Pertanto,
è utile definire un gran numero di facce interpolanti, anche a scapito
dei tempi di calcolo ed in ogni caso non più di 50.000.
Il programma Specchio.exe, infine, considera un generico
piano come superficie specchiante (in tal caso, poiché la deformazione
mantiene le caratteristiche proiettive, l'accuratezza è posta automaticamente
ad 1) e richiede la seguente struttura del file di ingresso:
Nome del file DXF contenente la faccia che definisce l'immagine
Nome del file DXF contenente la faccia che definisce il piano dello
specchio (considerato come un piano infinito)
Nome file bitmap PPM di ingresso che contiene l'immagine
di partenza
Nome file bitmap PPM di uscita che conterrà l'immagine in anamorfosi
Coordinate X Y Z del Centro di Proiezione
Numero di pixel del lato maggiore dell'immagine finale
Note operative generali:
- Poiché i tempi di calcolo possono essere anche molto lunghi (specialmente
per il programma generico.exe) è opportuno eseguire alcune prove
con valore 1 per l'accuratezza, definendo poi un valore più elevato
per l'immagine definitiva (un valore 20 per l'accuratezza moltiplica
per 20 il tempo di calcolo!).
- Per evitare inversioni dell'immagine (destra/sinistra o alto/basso)
è opportuno che il primo punto del rettangolo che definisce l'immagine
di partenza (3Dface o 3Dfaccia, in AutoCAD) sia posto in alto a sinistra,
il secondo in alto a destra, il terzo in basso a destra ed infine il
quarto in basso a sinistra (rispetto al PV). Inoltre, è necessario che
i quattro punti che definiscono la faccia giacciano su di un piano.
- Creare i file DXF nella versione 12 e nel formato ASCII (in AutoCAD,
usando l’opzione ‘Seleziona oggetti’).
- Salvare il file dell'immagine bitmap in formato PPM (Portable
Pixelmap, 24 bit), ad esempio usando il software Paint Shop (in
futuro sarà implementato il formato TIF).
- Nel caso del programma generico.exe, conviene costruire lo
specchio come solido AutoCAD, esportandolo con il comando 3DSOUT, importandolo
con 3DSIN ed esplodendo la mesh prima di salvare le facce nel
formato DXF (usare la variabile AutoCAD facetres con un valore
elevato, posto a 10 oppure a 5, definendola prima di esportare il solido
con il comando 3DSOUT).
|