Giros, traslaciones, y escalado de objetos en Povray. (Tutorial)


Nuestro objeto 'Tricono' para demostrar la aplicación de operaciones individuales o combinadas de cambio de escala, giros y traslaciones.
Nuestro objeto 'Tricono' para demostrar la aplicación de operaciones individuales o combinadas de cambio de escala, giros y traslaciones.

Retomamos el tema del trazador de rayos Povray. Iremos presentando de vez en cuando algún nuevo concepto, ilustrándolo con ejemplos. En este caso se trata de operaciones muy básicas, pero que no resultan triviales para los que parten de cero. A continuación se ofrece un muestrario de operaciones efectuadas sobre la figura de cabecera.

scale 0.25
scale 0.25

scale -1
scale -1

scale <0.5,2,1>
scale <0.5,2,1>

rotate z*25
rotate z*25

rotate y*25
rotate y*25

rotate z*45 rotate y*45
rotate z*45 rotate y*45

rotate y*45 rotate z*45
rotate y*45 rotate z*45

rotate z*-25  translate <-10,0,0>
rotate z*-25 translate <-10,0,0>

translate <-10,0,0> rotate z*25
translate <-10,0,0> rotate z*25

rotate y*-90
rotate y*-90

rotate y*-90 translate <0,0,-5>
rotate y*-90 translate <0,0,-5>

rotate y*-45 translate <0,-5,-5>
rotate y*-45 translate <0,-5,-5>

No quisiera hacer un artículo demasiado técnico. Los diferentes tutoriales sobre diversos temas que he ido presentando en este Blog siempre han estado dirigidos a los novatos. Es mi deseo abrir puertas para que la gente pueda asomarse a nuevos mundos de posibilidades sin excesivo esfuerzo. Creo que el esfuerzo debe venir una vez que sabes que el tema tiene interés. Lo que más cuesta siempre es dar los primeros pasos y es allí donde a mí me gusta estar.  Creo que es el lugar donde más ayuda hace falta.

El sistema de coordenadas:

En Povray podemos situar la cámara, luces y objetos dentro de un sistema de coordenadas 3D. Es decir de tres ejes, X, Y, y Z. (en nuestro ejemplo estarán representados por finos cilindros  en color rojo, verde y azul para x, y, z respectivamente).

Cualquier objeto puede ser ubicado en un determinado punto indicando sus coordenadas x,y,z .

Los datos de localización 3D  se llaman vectores, y son susceptibles de operaciones matemáticas. (Tranquilos no hace falta saber matemáticas para usarlos). Estos vectores se utilizan mucho en Povray.

Nosotros usaremos en nuestro ejemplo un objeto sencillo que llamaremos Tricono. Cada cono será de un color distinto  (rojo, verde y azul), e inicialmente lo situaremos en el centro de coordenadas y con los colores coincidentes al de estos ejes.

En Povray una forma abreviada de expresar un vector, cuando todos sus componentes son iguales, es con un solo numero entre corchetes angulares . Es decir, el vector <24, 24, 24> se puede escribir abreviadamente como  <24>. Hay vectores unitarios  predefinidos en el lenguaje que son x, y, z. Respectivamente equivalen a usar los vectores unitarios <1,0,0>, <0,1,0> y<0,0,1>. El centro de coordenadas se representa por <0,0,0>

Operaciones sencillas con vectores:

De las muchas operaciones que se pueden usar con vectores nos interesan para este artículo solo dos:

1) Multiplicar un vector cualquiera por un escalar (por un número).

Por ejemplo:

100 * <12, 23, 77> =  <1200, 2300, 7700>

300*y =  300 * <0,1,0> =<0,300,0>

Cuando usemos un escalado con valores negativos pensemos en la multiplicación de vectores y veremos también tiene sentido.

2) Suma de dos vectores.

Esta operación suma ni siquiera la necesitas conocer porque no generalmente hay necesidad de usarla directamente, pero la menciono porque es muy básica, y la traslación de objetos se basa en la operación suma de vectores.

<1, 2, 3> + <10,10,10> = <11,12, 13>

Cuando a un objeto situado en la posición <1,2,3> le aplicamos una traslación (un vector de desplazamiento) lo que estamos haciendo es sumarle un vector.

Las funciones básicas para manejar la posición, orientación, y tamaño o proporciones de los objetos, son respectivamente ‘translate’, ‘rotate’, y ‘scale’.

Operación scale:

La operación scale afecta al tamaño de un objeto, y se basa en la multiplicación de la posición de cada uno de los puntos de un objeto por los valores de la escala.

Por esa razón un objeto que no esté en el centro de coordenadas cuando sea aumentado con una escala mayor, se alejará del centro de coordenadas. Si solo queremos cambiar su tamaño debemos asegurarnos de que está centrado en el centro de coordenadas.

Si deseamos un aumento de tamaño sin deformación, el factor de escala en cada uno de los ejes ha de ser idéntico. Por ejemplo usando scale <2,2,2> duplicaremos el tamaño del objeto, usando <0.5, 0.5, 0.5> reduciremos a la mitad el tamaño del objeto, y si usamos <1, 0.1, 1> estaremos achatando el objeto al décimo de su tamaño original en el sentido del eje Y.

Operación translate:

Los movimientos de traslación (al igual que los giros) tienen especial utilidad en animaciones así como para la cómoda colocación de los objetos en una escena. Cualquier objeto puede ser trasladado a otro punto sumándole un vector de traslación. Puesto que se trata de una suma, da igual el orden en que se realicen sucesivas traslaciones.  Esto quiere decir que la nueva posición, será la suma de los vectores de posición actual y el vector traslación.

Todo movimiento de traslación puede descomponerse en la suma de sus respectivas componentes x,y,z. Es decir, translate <2,0,3> equivale a (traslate <2,0,0> translate <0,0,3>) y también a (translate <0,0,3 translate <2,0,0>)

Operación rotate:
Cualquier objeto puede ser girado, y los giros se realizan generalmente respecto alguno de los ejes X,Y,Z.  Los objetos que van a ser girados sobre sí mismos, deben estar situados en el centro del sistema de coordenadas.

Por ejemplo la Tierra girando sobre su eje.  Si lo que deseamos es que giren respecto a un eje distante como lo haría la Tierra es su orbita al rededor del Sol, lo situaremos a la distancia adecuada y luego lo giraríamos para hacer avanzar en la órbita.

El orden de las operaciones de traslación y giro es importante porque no daría lo mismo hacerlo en el orden contrario. Tampoco dará lo mismo el orden al efectuar dos giros seguidos sobre ejes distintos.

Para recordar el sentido de giro usaremos la regla de la mano izquierda. Imagine que toma un eje con su mano izquierda y deja el pulgar estirado en la dirección positiva del eje. La dirección de giro positivo viene dada por la dirección y la curva de los dedos restantes en su recorrido desde las bases de los dedos hasta las uñas.

Para definir un giro usaremos la sintaxis : rotate x*45 (también valdría igual rotate 45*x).

(Cuando se hacen varios giros combinados puede usarse una forma sintáctica abreviada que nosotros no usaremos porque consideramos más claro poner cada giro por separado, habida cuenta que el orden es importante).

Si en lugar de usar grados, desea usar radianes puede usar la función radians. Existen muchas funciones aritméticas en Povray que facilitan los cálculos matemáticos. Especialmente útiles son las funciones trigonométricas, pero no entraremos en este tema porque no nos aporta mucho en este momento.

A muy grandes rasgos el orden coherente para manejar los posibles giros de un avión o un animal volador, serían:

  1. Girar tomando como eje el sentido de la trayectoria definiendo así el ladeado de las alas para tomar la curva con las alas más o menos inclinadas según sea de cerrada la curva.
  2. Girar verticalmente de arriba abajo para hacer un picado o una ascensión.
  3. Girar horizontalmente en sentído de la brújula para mantener la orientación del cuerpo con la trayectoria.


No voy a explicar nada más porque creo que con los ejemplos de las imágenes de cabecera, se puede terminar de entender mucho mejor.

Algunos comentarios sobre el fuente:

Hemos usado la variable clock para que a cada valor de esta variable aplique una operación distinta sobre ese objeto compuesto que hemos llamado Tricono. Puedes bajar el código fuente de aquí.


#include “colors.inc”












































Share

2 thoughts on “Giros, traslaciones, y escalado de objetos en Povray. (Tutorial)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*