Riassunto. Descriviamo un programma per generare immagini perfettamente tridimensionali (che sembrano uscire dallo schermo!). Ne realizziamo poi un prototipo giocattolo, che può essere utilizzato usando occhialini a lenti rosse a sinistra e verdi a destra (quelli che i bambini usano per vedere imagini di dinosauri a 3D).
Dobbiamo l'idea per questo programma a un sito Internet che fornisce immagini 3D di vari oggetti solidi a tre e persino quattro dimensioni (come l'ipercubo):
Hyperspace Star Polytope Slicer
http://dogfeathers.com//java/hyperstar.html#contents
Sia 2ε la distanza tra i due occhi umani. Supponiamo di avere la descrizione tridimensionale di un qualsiasi oggetto (un cubo va benissimo per cominciare). Facciamone due copie, trasliamone una di ε verso sinistra, un'altra di ε verso destra, quindi disegnamo entrambe le copie in prospettiva, come le vedrebbe un occhio posto a una distanza fissa dal foglio e di fronte ad esso. La copia di sinistra rappresenta il modo con cui l'occhio destro vedrebbe l'oggetto (se questo fosse solido): apparentemente traslato verso sinistra di ε, mentre in realtà è l'occhio a essere traslato verso destra di ε. Allo stesso modo, la copia di destra rappresenta l'oggetto come lo vedrebbe l'occhio sinistro.
Per realizzare un'immagine che ci appaia a 3D dimensioni (come un oggetto solido, non semplicemente come un disegno a due dimensioni di un oggetto a tre), è ora sufficente risolvere il (non banale) problema di far vedere la copia di sinistra al solo occhio destro, e quella di destra al solo sinistro. Esistono delle soluzioni professionali al problema: per esempio, inviare la copia sinistra usando luce polarizzata in un modo, la copia destra luce polarizzata in un altro. A questo punto, basta dotare l'occhiale sinistro (destro) di un filtro polarizzato opportuno per "cancellare" la copia di sinistra (di destra). Questa soluzione era molto diffusa verso il 1950, e è usata tuttora. Una soluzione più recente è quella di proiettare un film con i fotogrammi pari destinati all'occhio sinistro, quelli dispari al destro, quindi di utilizzare degli occhiali elettronici, sincronizzati con il film, che oscurano la lente destra quando viene proiettata l'immagine destinata all'occhio sinistro, e viceversa.
In questa nota, invece, utilizzeremo un metodo diffuso nei giocattoli per bambini, che tuttavia già consente di costruire un programma molto elementare ma funzionante. Di ogni oggetto facciamo due copie, una rossa ed una verde. Trasliamo di -ε i disegni rossi, di +ε i disegni verdi. In questo modo i disegni rossi vengono visti come li vede l'occhio destro (traslati verso sinistra), i disegni verdi come li vede l'occhio sinistro (traslati verso destra). Costruito un occhiale con una lente rossa a sinistra (vede solo i verdi) e con una lente verde a destra (vede solo i rossi), ogni occhio vede il disegno come lo vedrebbe se fosse a tre dimensioni.
Definiamo una funzione che cancella tutti i colori da un disegno
![[Graphics:Images/index_gr_1.gif]](Images/index_gr_1.gif)
![[Graphics:Images/index_gr_2.gif]](Images/index_gr_2.gif)
Carichiamo un pacchetto con primitive per costruire forme geometriche, traslarle e ruotarle.
![[Graphics:Images/index_gr_3.gif]](Images/index_gr_3.gif)
![[Graphics:Images/index_gr_4.gif]](Images/index_gr_4.gif)
Realizziamo ora il programma descritto nell'introduzione. Gli argomenti di tale programma sono il disegno che si vuole vedere in 3D, e le coordinate
{{x1,x2},{y1,y2},{z1,z2}}
della scatola immaginaria che lo contiene.
![[Graphics:Images/index_gr_5.gif]](Images/index_gr_5.gif)
Occorre qualche secondo perchè l'illusione 3D faccia effetto: non occorre fare uno sforzo cosciente, basta aspettare e non pensare a nulla. E' meglio osservare l'effetto 3D per poco tempo, a lungo andare lo sforzo di cogliere l'illusione stanca.
Rovesciando gli occhiali, le immagini 3D si vedono ancora, con un po' di sforzo, ma ora sembrano "entrare" nello schermo, anziche' "uscirne", come se fossero viste allo specchio.
Una volta scelto il punto di vista (un punto da cui si immagina di guardare la scena), l'illusione tridimensionale si avrà solo ponendo l'occhio nella particolare direzione scelta, e svanirà spostandosi in qualunque direzione: avanti o indietro, di lato o in verticale. L'illusione svanisce anche se si "tocca" il disegno 3D che fuoriesce dallo schermo: in quel momento il disegno (che in realtà si trova ancora sullo schermo) ci appare nascosto dalla mano, e quindi dietro di essa (com'è in realtà) anzichè accanto ad essa (come sembra essere). Abbiamo scelto un punto di vista in cui sia facile mettere l'occhio, come il "di fronte", definito da InFront = {0,-2,0}. Questo significa che, se il disegno 3D viene posto in verticale, l'illusione 3D sarà visibile tenendo gli occhi direttamente di fronte (perpendicolari al foglio), a una distanza doppia dello spessore della scatola immaginaria che contiene il disegno. (Quale sia tale distanza dipende dai parametri scelti: con un foglio da disegno di base 800 punti dello schermo, e una distanza tra gli occhi pari al 9% del disegno, la resa migliore si ha a circa 80 centimetri di distanza.)
Questo metodo di visualizzazione 3D è molto semplice da realizzare, ma ha dei difetti: richiede di partire da un disegno tridimensionale trasparente (privo di superfici opache, fatto solo di linee e punti); inoltre non può visualizzare i colori (i colori vengono utilizzati per l'effetto 3D, il disegno risulta in bianco e nero). In ogni caso, deve partire da una rappresentazione tridimensionale dell'oggetto (non può usare una fotografia). Tale rappresentazione, se necessario, viene resa trasparente con WireFrame[.], qundi ripulita da ogni colore con UnColor[.].
Una versione più elaborata dello stesso programma potrebbe rappresentare superfici opache e alcuni colori (noi però non la realizzeremo).