|
El objeto text
es una primitiva que permite usar
fuentes y colecciones TrueType para crear objetos de texto. Estos
objetos se pueden usar en composición y transformarse en posición,
tamaño y apariencia como cualquier otro objeto de POV-Ray.
En este tutorial haremos dos usos de este objeto. En primer lugar,
colocaremos unas cuantas letras sobre un plano ajedrezado. Podemos usar
cualquier fuente TTF, aunque en este tutorial usaremos timrom.ttf
o cyrvetic.ttf
, que acompañan a POV-Ray. Creamos el
archivo textdemo.pov
y escribimos:
#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 }
}
Ahora, incluyamos el objeto de texto. Usaremos el archivo timrom.ttf
con la cadena "POV-RAY 3.5" De momento, haremos nuestras letras de color
rojo. La sintaxis es muy sencilla. La primera cadena entrecomillada es
el nombre de la fuente, la segunda es el texto que aparecerá en el
dibujo. Los dos números decimales que le siguen son el grosor y el
desplazamiento. El grosor determina el tamaño del bloque sobre el que
están recortadas las letras. Los valores apropiados pueden estar entre
0.5 y 2. El desplazamiento es un valor que se añadirá al valor definido
por la propia fuente para separar las letras. De momento se dejará a
cero.
text {
ttf "timrom.ttf" "POV-RAY 3.5" 1, 0
pigment { Red }
}
Al trazar esta escena a 200x150 -A
, observamos que las
letras se salen por la derecha de la imagen. Esto es así porque POV-Ray
sitúa el texto de forma que la esquina inferior izquierda delantera de
la primera letra coincide con el origen. Para centrarlo deberemos
desplazar el texto en el sentido negativo del eje x. Pero ¿cuánta
distancia? En la documentación vemos que la altura de las letras está
entre 0.5 y 0.75 unidades. Si asumimos que la distancia entre una y
otra ronda las 0.5 unidades, significa que la cadena en total tendrá
unas 6 unidades (12 caracteres y espacios), de forma que trasladaremos
el objeto 3 unidades en el sentido negativo del eje x.
text {
ttf "timrom.ttf" "POV-RAY 3.0" 1, 0
pigment { Red }
translate -3*x
}
Mucho mejor. Ahora vamos a jugar un poco con los parámetros del objeto. En primer lugar, aumentaremos su grosor hasta un valor grande... ¡pongamos 25!
text {
ttf "timrom.ttf" "POV-RAY 3.0" 25, 0
pigment { Red }
translate -2.25*x
}
Realmente, queda un tanto extraño. Devolvamos este valor a 1 e intentemos un valor diferente para el desplazamiento. Pongamos 0.1 en lugar de 0 y volvamos a trazar.
¡Un momento! ¡Las letras se desplazan en ángulo! ¡Esto no es lo que
describe el manual! Parece que el valor de desplazamiento se aplica
tanto en el eje x como en el eje y, en lugar de desplazarlas sólo en la
dirección x. ¿Se necesita aquí un vector en lugar de un solo número?
Probemos. Reemplacemos 0.1
por 0.1*x
y
probaremos de nuevo.
¡Ahora funciona! Las letras siguen en línea recta, aunque un poco
más separadas de lo que estaban antes. Verifiquemos esta propiedad
haciendo que las letras se desplacen en otra dirección. Cambiando 0.1*x
por 0.1*y
, observamos que las letras suben un poco al
desplazarnos de izquierda a derecha, sin separarse horizontalmente más
de lo que estaban. Ahora, probemos en el eje z. Reemplacemos 0.1*y
por 0.1*z
. Trazar esto supone una pequeña desilusión: no
hay desplazamiento, sólo funciona en las direcciones x e y.
Acabemos nuestra escena dando a las letras una textura mejor, usando
un valor mayor para el grosor, y añadiendo un pequeño desplazamiento
vertical a nuestras letras. Para obtener un mejor resultado, usaremos
una esfera celeste, adornaremos un poco nuestro plano y buscaremos una
situación de la cámara mejor (trazamos la siguiente escena 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 }
Ahora, vamos a usar un objeto de texto en una operación CSG.
Intentaremos crear un bajorrelieve en un bloque de piedra usando unas
letras. Crearemos un nuevo archivo llamado textcsg.pov
y
escribimos lo siguiente:
#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 }
Y ahora, creamos el bloque de piedra. Lo queremos de ocho unidades
de largo para centrar en su interior nuestra frase (POV-Ray 3.0), que
mide alrededor de seis unidades. Lo haremos también de cuatro unidades
de alto y una de grueso. Como queremos evitar una coincidencia
accidental entre la superficie del bloque y la del texto, usaremos 0.1
en lugar de 0 para la coordenada z inicial. Finalmente, le damos una
agradable textura de piedra escogida del archivo stones.inc
.
box {
<-3.5, -1, 0.1>, <3.5, 1, 1>
texture { T_Stone10 }
}
Lo siguiente es crear nuestro texto. Usamos el mismo objeto que en el primer ejemplo, sólo variando un poco el grosor y el desplazamiento.
text {
ttf "timrom.ttf" "POV-RAY 3.0" 0.15, 0
pigment { BrightGold }
finish { reflection .25 specular 1 }
translate -3*x
}
Recordemos que, por defecto, el texto se coloca de forma que su cara frontal se apoya en el plano x-y. Como el frontal del bloque se inicia en z=0.1 y el grosor es de 0.15, resulta que nuestro texto penetra en la piedra un total de 0.05 unidades. Ahora, basta situar alrededor de ambos objetos una operación de diferencia y tendremos nuestro objetivo:
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
}
}
Lo trazamos a 200x150-A
. Nos fijamos si se aprecia
realmente la profundidad del texto. y su textura en oro brillante. Lo
volvemos a trazar, esta vez a 640x480 +A0.2
para ver el
resultado más claramente, pero seamos pacientes, porque esta imagen
tardará algo de tiempo en estar lista.
|