|
Las transformaciones soportadas son rotate
(rotación), scale
(escalado), y traslate
(traslación). Se usan para girar,
cambiar de tamaño y mover un objeto o textura. Tambien puede usarse una
matriz de transformacion para especificar directamente una
transformacion compleja. Grupos de transformación pueden ser asociados
juntos y guardados en un identificador de transformación. La sintaxis
para las transformaciones es como sigue:
TRANSFORMATION: rotate <Rotate_Amt> | scale <Scale_Amt> | translate <Translate_Amt> | transform TRANSFORM_IDENTIFIER | transform { TRANSFORMATION_BLOCK...} | matrix <Val00, Val01, Val02, Val10, Val11, Val12, Val20, Val21, Val22, Val30, Val31, Val32> TRANSFORMATION_BLOCK: TRANSFORM_IDENTIFIER | TRANSFORMATION | inverse TRANSFORM_DECLARATION: #declare IDENTIFIER = transform { TRANSFORMATION_BLOCK...} | #local IDENTIFIER = transform { TRANSFORMATION_BLOCK...}
Los objetos pueden moverse agregando el modificador translate
.
Consiste en la palabra clave translate
seguida por una expresión vectorial. Los tres
términos del vector especifican el número
de unidades que se moverá en cada dirección "x", "y" y "z". Translate
mueve el elemento relativo a su posición actual. Por ejemplo:
sphere { <10, 10, 10>, 1 pigment { Green } translate <-5, 2, 1> }
moverá la esfera desde la posición <10,10,10>
a
la posición <5,12,11>
. No la mueve a la posicion
absoluta <-5,2,1>
. Los desplazamientos son siempre
relativos a la posición del objeto antes del movimiento. Desplazarlo
cero unidades dejará el objeto en la misma posición en ese eje. Por
ejemplo:
sphere { <10, 10, 10>, 1 pigment { Green } translate 3*x // evalúa a <3,0,0> entonces se mueve 3 unidades // en la dirección "x" y ninguna por "y" o "z" }
Puede cambiar el tamaño de un objeto patrón de textura agregando el
modificador escala
. Consiste en la palabra clave scale
seguida por una expresión vector. Los tres términos del vector
especifican la cantidad de escala en cada dirección "x", "y" y "z".
Se puede usar un escalado "desparejado" para expandir o comprimir un elemento. Valores mayores a 1 expanden el elemento en ese eje mientras que valores menores a 1 son usados para comprimir el elemento. Escalar es relativo al tamaño actual del elemento. Si el elemento ha sido previamente ajustado de tamaño usando scale entonces scale modificará el tamaño relativo al tamaño nuevo. Pueden usarse múltiples valores de escala.
Por ejemplo:
sphere { <0,0,0>, 1 scale <2,1,0.5> }
estirará y aplastará la esfera en una forma elíptica que es dos veces el tamaño original a lo largo de la dirección "x", mantiene el mismo tamaño en la dirección "y", y tiene la mitad del tamaño en la dirección "z".
Si se especifica sólo una expresión flotante, ésta será promovida a un vector de tres componentes cuyos términos son todos iguales. De esa manera el objeto se escala uniformemente por la misma cantidad en todas las direcciones. Por ejemplo:
object { MyObject scale 5 // Evalúa como <5,5,5> entonces escala uniformemente // por 5 en cada dirección. }
Cuando uno de los componentes de escala es cero, POV-Ray cambia este componente a 1 ya que asume que 0 significa no escalar en esa dirección. Se mostrará una advertencia: "Valor ilegal: Escalar X, Y o Z por 0.0. Cambiado a 1.0.".
Usted puede cambiar la orientación de un objeto o patrón de textura
agregando el modificador rotate
. Consiste en la palabra
clave rotate
seguida por una expresión vector. Los tres términos del vector especifican el
número de grados de rotacion alrededor de los ejes X, Y, Z.
Nota: el orden de la rotación es importante. Las rotaciones ocurren primero en el eje x, luego el eje y, luego el eje z. Si no está seguro de que es esto lo que quiere, entonces debería rotar sólo en un eje a la vez usando múltiples declaraciones de rotación para obtener la rotación correcta.
rotate <0, 30, 0> // 30 grados en el eje Y luego, rotate <-20, 0, 0> // -20 grados en el eje X luego, rotate <0, 0, 10> // 10 grados en el eje Z
La rotación es siempre relativa a los ejes. De esta manera, si un objeto está a cierta distancia del eje de rotación, no solo rotará, también orbitará en el eje, como si estuviera balanceándose en una cuerda invisible.
POV-Ray usa el sistema de rotación de la mano izquierda. Usando el famoso ejercicio de "aerobic de gráficos por computadora", mantenga arriba su mano izquierda y apunte su pulgar en la dirección positiva del eje de rotación. Doble sus dedos en la dirección positiva de rotación. De modo semejante si apunta su pulgar en la dirección negativa del eje, sus dedos se doblarán en la dirección negativa de rotación. Vea "Comprendiendo el Sistema de Coordenadas de POV-Ray" para una ilustración.
La palabra clave matrix
puede usarse para especificar explícitamente la matriz de transformación que se usará para la
transformación de objetos o texturas. Su sintaxis es:
MATRIX: matrix <Val00, Val01, Val02, Val10, Val11, Val12, Val20, Val21, Val22, Val30, Val31, Val32>
Donde Val00
hasta Val32
son expresiones de coma flotante encerradas en paréntesis angulares y
separadas por comas.
Nota: esto no es un vector. Es un conjunto de 12 expresiones de coma flotante.
Estos valores de coma flotante especifican los elementos de una
matriz de 4 por 4 con la cuarta columna implícitamente puesta a <0,0,0,1>
.
En cualquier punto dado P, P=<px, py, pz>, es
transformado en el punto Q, Q=<qx, qy, qz> por
qx = Val00 * px + Val10 * py + Val20 * pz + Val30
qy = Val01 * px + Val11 * py + Val21 * pz + Val31
qz = Val02 * px + Val12 * py + Val22 * pz + Val32
Normalmente usted no usará la palabra clave matrix porque es menos descriptiva que los comandos de transformación y más dificil de visualizar. De todas formas el comando matrix permite efectos de transformación más generales como shearing. La siguiente matriz causa que un objeto sea cizallado a lo largo del eje "y".
object { MyObject matrix < 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 > }
|