4.4.10        Testo


Creare oggetti testo usando POV-Ray ha sempre significato che le lettere dovevano essere costruite o mediante CSG (vedi paragrafo "Geometria Solida Costruttiva (CSG)", un processo tremendamente complesso, o mediante un immagine in bianco e nero delle lettere da usare come base per un height field (vedi il paragrafo "Height Field" e "Campi di Quota"), metodo soddisfacente solo fino a un certo punto. Ora, per POV-Ray 3.0 è stata introdotta una nuova funzione primitiva, che può usare un qualunque carattere True Type per creare oggetti testo. Questi oggetti possono essere utilizzati in CSG (§ 4.5) e manipolati come qualunque altra primitiva di POV-Ray.
Creiamo un file di nome textdemo.pov e lo editiamo come segue :

#include "colors.inc"
camera {
location <0, 1, -10>
look_at 0
angle 35
}

light_source { <500,500,-1000> White }
plane { y,0
pigment { checker Green White }
}

Ora aggiungiamo l'oggetto testo. Useremo il carattere timrom.ttf e creeremo la stringa "POV-RAY 3.0". Per adesso faremo le lettere rosse. La sintassi è molto semplice. La prima stringa fra virgolette è il nome del carattere, la seconda è la stringa di testo da renderizzare. I due valori numerici sono lo spessore e lo sfasamento. Il valore dello spessore determina quanto saranno spesse le lettere. In generale i valori migliori vanno da 0.2 a 0.5. Il valore di sfasamento (offset) si aggiungerà alla spaziatura tra le lettere. Per ora lo lasceremo a zero.

text { ttf "timrom.ttf" "POV-RAY 3.0" 1, 0
pigment { Red }
}

Fig. 45-Prima prova

Renderizzando questa scena a 200x150 -A notiamo che le lettere escono alla destra dello schermo. Questo avviene perché sono posizionate in modo che l'angolo anteriore sinistro del testo sia posizionato nell'origine. Per centrare il testo, dobbiamo traslarlo nella direzione delle x negative. Ma di quanto ? Nel manuale vediamo che le lettere sono tutte alte da 0.5 a 0.75 unità. Se assumiamo che ciascuna di esse occupa circa 0.5 unità lungo l'asse delle x, allora la stringa di testo è lunga circa 6 unità (12 tra caratteri e spazi). Trasliamo la stringa di 3 unità in direzione -x.

text { ttf "timrom.ttf" "POV-RAY 3.0" 1, 0
pigment { Red }
translate -3*x
}

Fig. 45a-La scritta è centrata

Ora va meglio. Divertiamoci un po'con qualcuno dei parametri dell'oggetto testo. Per prima cosa, alziamo il valore dello spessore a qualcosa di abbastanza irragionevole... diciamo 25 !

text { ttf "timrom.ttf" "POV-RAY 3.0" 25, 0
pigment { Red }
translate -2.25*x
}

Fig. 46-Aumentare lo spessore

L'effetto è notevole ! Ora riportiamo il valore dello spessore ad 1 e proviamo a cambiare l'offset. Cambiamo l'offset da 0 a 0.1 e renderizziamo di nuovo.

Fig. 47-Cosa succede?

Un attimo ! Le lettere se ne vanno su lungo un angolo ! Questo non c'è nel manuale ! Sembra quasi che il valore dell'offset venga applicato lungo gli assi x ed y invece che lungo l'asse x come credevamo. Potrebbe esserci necessario un vettore anziché un valore numerico ? Proviamo : Sostituiamo 0.1 con 0.1*x e renderizziamo di nuovo.

Fig. 48-Finalmente a posto

Ora funziona ! Le lettere sono sempre su una linea retta lungo l'asse delle x ma un po' più distanti fra loro. Verifichiamo e proviamo a fornire un valore di offset lungo l'asse delle y. Sostituiamo 0.1*x con 0.1*y.

Fig. 49-Tutto come previsto

Ancora, funziona come ci aspettavamo, con le lettere che salgono in alto a destra senza nessuna distanza aggiuntiva lungo l'asse delle x. Ora proviamo l'asse z. Sostituiamo 0.1*y con 0.1*z. Renderizzare questo ci delude : non c'è spaziatura ! Il valore di offset può essere applicato solo nelle direzioni x ed y.
Ultimiamo la scena assegnando una texture più interessante alle nostre lettere, usando quel valore di spessore ben largo e aggiungendo un certo offset lungo le y. Per divertimento, aggiungiamo anche una sfera celeste, alziamo un po' il nostro piano e usiamo un punto di osservazione più interessante per la nostra macchina fotografica. (renderizziamo la scena seguente a 640x480
+A0.2) :

#include "colors.inc"
camera {
location <-5,.15,-2>
look_at <.3,.2,1>
angle 35
}

light_source { <500,500,-1000> White }
plane { y,0
texture {
pigment { SeaGreen }
finish { reflection .35 specular 1 }
normal { ripples .35 turbulence .5 scale .25 }
}
}

text { ttf "timrom.ttf" "POV-RAY 3.0" 25, 0.1*y
pigment { BrightGold }
finish { reflection .25 specular 1 }
translate -3*x
}

#include "skies.inc"
sky_sphere { S_Cloud5 }

Fig. 50

Proviamo ad usare il testo in un oggetto CSG. Cercheremo di creare un intarsio in un blocco di pietra usando un oggetto testo. Creiamo un nuovo file chiamato textcsg.pov e lo editiamo come segue :

#include "colors.inc"
#include "stones.inc"

background { color rgb 1 }
camera {
location <-3, 5, -15>
look_at 0
angle 25
}

light_source { <500,500,-1000> White }

Ora, creiamo il blocco. Vogliamo che sia largo circa otto unità perché la nostra stringa di testo (POV-RAY 3.0) è larga circa sei unità. Vogliamo anche che sia alto circa 4 unità e profondo una. Ma abbiamo bisogno di evitare una potenziale superficie coincidente con l'oggetto testo e quindi assegneremo alla prima coordinata z 0.1 invece che 0. Infine, gli assegnamo una bella texture pietra.
box { <-3.5, -1, 0.1>, <3.5, 1, 1>
texture { T_Stone10 }
}

Poi, vogliamo fare l'oggetto testo. Possiamo usare lo stesso oggetto che abbiamo usato prima, ma utilizzeremo valori leggermente diversi di spessore e offset.

text { ttf "timrom.ttf" "POV-RAY 3.0" 0.15, 0
pigment { BrightGold }
finish { reflection .25 specular 1 }
translate -3*x
}

Ricordiamo che l'oggetto testo è posizionato per definizione in modo che la sua superficie frontale si trovi sul piano x-y. Se la faccia anteriore del blocco di pietra inizia a z=0.1 e lo spessore del testo è 0.15, l'intaglio sarà di 0.05 unità. Inseriamo una frase difference attorno ai due oggetti.

difference {
box { <-3.5, -1, 0.1>, <3.5, 1, 1>
texture { T_Stone10 }
}
text { ttf "timrom.ttf" "POV-RAY 3.0" 0.15, 0
pigment { BrightGold }
finish { reflection .25 specular 1 }
translate -3*x
}
}

Renderizziamo questa scena a 200x150 -A.

Fig. 51-Testo scolpito nella roccia

Possiamo vedere chiaramente l'intaglio di un brillante colore oro. Possiamo renderizzarla di nuovo a 640x480 +A0.2 per vedere meglio il risultato, ma siate avvertiti... ci vorrà un po' di tempo.