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.
![]() |
![]() |
![]() |