3.12.2 Variables dependientes del reloj y animaciones multiescena
Bien, qué pasará si queremos que la bola ruede de izquierda a derecha
para la primera mitad de la animación, entonces cambie 135 grados
su dirección y ruede de derecha a izquierda, y regrese hacia atrás.
Necesitaremos usar la nueva directiva condicional de POV-Ray y hacer pruebas
con el valor de clock para determinar el momento en que hemos alcanzado
el punto medio del recorrido y entonces comenzar a trazar la escena con
un valor de clock diferente dependiendo de la secuencia. Para nuestro objetivo,
citado anteriormente, estamos trabajando con una variable que toma valores
entre 0 y 1 (normalizado) con el propósito de hacerlo matemáticamente
más ordenado cuando tenemos que controlar muchos aspectos durante
la animación. De esta manera, vamos a asumir que conservamos la misma
cámara, luz y el plano y dejamos que el valor de clock corra desde
0 a 2. Ahora sustituimos la declaración de la única esfera
como sigue...
#if ( clock <= 1 )
sphere { <0, 0, 0> , 1
pigment {
gradient x
color_map {
[0.0 Blue ]
[0.5 Blue ]
[0.5 White ]
[1.0 White ]
}
scale .25
}
rotate <0, 0, -clock*360>
translate <-pi, 1, 0>
translate <2*pi*clock, 0, 0>
}
#else
//(si clock es > 1, estamos en la segunda fase)
// queremos trabajar con un valor de 0 a -1
#declare ElseClock = clock - 1;
sphere { <0, 0, 0> , 1
pigment {
gradient x
color_map {
[0.0 Blue ]
[0.5 Blue ]
[0.5 White ]
[1.0 White ]
}
scale .25
}
rotate <0, 0, ElseClock*360>
translate <-2*pi*ElseClock, 0, 0>
rotate <0, 45, 0>
translate <pi, 1, 0>
}
#end
Si localizamos qué es lo que origina que la bola haga un giro
instantáneo poco realista cuando cambia de dirección, ¡puntos
de bonos para nosotros, estamos dando a luz a un animador!. Sin embargo,
para simplificar el ejemplo, vamos a ignorar esto por ahora. Será
bastante más fácil arreglarlo en el mundo real después de
que examinemos cómo funciona el código actual.
Esto es completamente diferente a lo que hemos hecho antes, puesto que
el clock varía de 0 a 2, y nosotros queríamos trabajar con
valores normalizados del clock en lugar de éstos. De esta manera, cuando
el valor de clock sobrepase el valor 1.0, POV asumirá que la segunda
fase de la trayectoria ha comenzado, y declaramos una nueva variable Elseclock
la cual hemos construido relacionándola con el valor original
del clock, mientras que clock está variando de 1 a 2, de la misma
manera Elseclock está variando de 0 a 1. Así, aun
cuando sólo haya un clock
, podemos declarar tantas variables
adicionales como nosotros queramos (y tengamos memoria para almacenarlas), así
en escenas muy complejas, un único valor de la variable clock puede
ser el factor que coordina todos los movimientos.