|
El prisma es, básicamente, un polígono o una curva cerrada que se
traslada a lo largo de una trayectoria lineal. El rastro que deja la
figura en el espacio forma la superficie del prisma. La curva o el
polígono que definen un prisma pueden estar construidos por
cualquier número de subformas, pueden estar formados por cualquier
tipo de curvas spline y pueden mantener una anchura constante a lo
largo de todo el barrido, o ir estrechándose lentamente hasta
acabar en un punto. Pero antes de que todo esto comience a ser más
confuso, iremos paso a paso con la forma más simple de prisma.
Editemos y generamos el siguiente fichero (ver prismdm1.pov
).
#include "colors.inc" background{White} camera { angle 20 location <2, 10, -30> look_at <0, 1, 0> } light_source { <20, 20, -20> color White } prism { linear_sweep linear_spline 0, // arrastraremos la siguiente figura desde aquí... 1, // ... hasta aquí. 7, // número de puntos que forman la figura ... <3,5>, <-3,5>, <-5,0>, <-3,-5>, <3, -5>, <5,0>, <3,5> pigment { Green } }
Esto produce un polígono hexagonal, que es arrastrado desde y=0
hasta y=1. En otras palabras, hemos extrusionado un hexágono.
Nótese que para crear una figura de seis lados hemos usado un
total de siete puntos de control. Esto es debido a que se supone
que un polígono es un área cerrada, cosa que conseguimos haciendo
coincidir los puntos de inicio y final. Técnicamente, y sólo con
polígonos basados en linear_spline
, POV-Ray habría
unido los dos extremos con una línea aunque se nos hubiera pasado
por alto cerrar el área, pero habría generado un mensaje de aviso.
Sin embargo, esto sólo ocurre mientras usamos splines lineales,
así que no olvidemos prestar atención a los mensajes de
advertencia.
Si leímos con atención la sección de las curvas spline explicada bajo el tutorial del objeto torno (ver sección "Entendiendo El Concepto de Curvas Spline"), recordaremos que hay dos tipos de curvas spline adicionales aparte de la lineal, la cuadrática y la cúbica. Así pues, podemos usar cualquier tipo de spline para crear nuevos prismas de formas curvas.
PERO, y preste atención a lo siguiente si quiere evitar los mensajes de error del tipo "pocos puntos en el prisma", conseguir cerrar una spline no lineal, no es tán fácil para POV-Ray como trazar una línea entre los puntos primero y último si nos equivocamos a la hora de determinar los puntos de control.
En primer lugar, recuerde que las splines cuadráticas que determinan una curva requieren de tres puntos, dos para conectar la curva y uno previo para calcular la trayectoria (y que no está conectado con la curva), así que el primer punto de cualquier spline cuadrática es sólo un punto de control que no forma parte de la figura. Debemos conectar (y con esto queremos decir igualar) el segundo y último puntos para cerrar la trayectoria de la figura.
De igual modo, las spline cúbicas requieren un primer y último punto de control (y que tampoco están conectados con la curva) para ajustar la trayectoria de la curva. Así que para cerrar el área, debemos conectar (igualar) el segundo punto con el penúltimo. Si no conectamos correctamente estos puntos, es cuando aparece el mensaje de error "pocos puntos en el prisma", ya que POV-Ray no encuentra los puntos necesarios para cerrar el área.
¿Un ejemplo?. Reemplazaremos el prisma del ejemplo anterior con este
otro (ver fichero prismdm2.pov
)
prism { cubic_spline 0, // arrastrar el área desde aquí ... 1, // ... hasta aquí 6, // número de puntos que forman la figura ... < 3, -5>, // point#1 (punto de control, no conectado a la curva) < 3, 5>, // point#2 ... ESTE PUNTO ... <-5, 0>, // point#3 < 3, -5>, // point#4 < 3, 5>, // point#5 ... DEBE COINCIDIR CON ESTE PUNTO <-5, 0> // point#6 (punto de control, no conectado a la curva) pigment { Green } }
Este sencillo prisma produce lo que parece ser un triángulo extrusionado con sus esquinas suavizadas. Los puntos dos, tres y cuatro son los vértices del triángulo, el punto cinco cierra el área del triángulo volviendo sobre el punto dos. Los puntos uno y seis son puntos de control para determinar la curva (no forman parte de ella)
Una cosa que es conveniente remarcar, es que hemos hecho el punto
uno igual al punto cuatro, y el punto seis igual al punto tres.
Aunque el prisma hubiera estado correctamente cerrado si no
hubiéramos tenido en cuenta este pequeño detalle, las transiciones
entre las curvas no hubieran sido tan suaves. Cambiemos los puntos
uno y seis a <4,6> y <0,7> respectivamente y volvamos
a generar la imagen para ver cómo se altera el contorno de la figura
(ver fichero prismdm3.pov
) .
En otras palabras, si queremos una spline cúbica de contorno suavizado, haremos que el primer punto de control coincida con el antepenúltimo, y el último punto de control con el tercero. En una spline cuadrática, el truco es similar, pero sólo necesitamos hacer coincidir el primer punto de control con el penúltimo.
Al igual que el objeto polígono (ver sección "Objeto Polígono") el prisma
es muy flexible, y nos permite crear un prisma a partir de varios
sub-prismas. Para ello, hay que seguir listando puntos de control
después de haber cerrado la primera forma. La segunda forma puede
ser añadida en otra dirección a partir de la primera o, en el caso
de que se solape con una forma anterior, restarse a la primera
figura creada. Veamos otro ejemplo en el que mantenemos el código para
la cámara y la fuente de luz, pero sustituimos el prisma por este otro
(ver archivo prismdm4.pov
).
prism { linear_sweep cubic_spline 0, // arrastrar el área desde aquí ... 1, // ... hasta aquí 18, // número de puntos que forman la figura ... <3,-5>, <3,5>, <-5,0>, <3, -5>, <3,5>, <-5,0>,//sub-forma #1 <2,-4>, <2,4>, <-4,0>, <2,-4>, <2,4>, <-4,0>, //sub-forma #2 <1,-3>, <1,3>, <-3,0>, <1, -3>, <1,3>, <-3,0> //sub-forma #3 pigment { Green } }
Para mejorar la legibilidad del ejemplo anterior hemos separado las figuras en líneas distintas, aunque el programa reconoce dónde acaba cada figura cuando detecta que un área ha sido cerrada (como dijimos más arriba). Generamos este nuevo prisma y veamos qué hemos conseguido. La misma figura de antes, de la cual ha sido recortada una versión más pequeña de sí misma, y que incluye otra versión aún más pequeña encajada en el hueco.
La región exterior está formada por la subforma #1, el agujero recortado es donde las subformas #1 y #2 se superponen. En el centro, el objeto reaparece debido a que las subformas #1, #2 y #3 se superponen, devolviendo un número impar de piezas superpuestas. Usando esta técnica podemos construir prismas extremadamente complejos.
En nuestro prisma original, la palabra linear_sweep
es
opcional. Es el modo por defecto en el que el prisma será generado
si no se especifica otro tipo de desplazamiento, como por ejemplo
el desplazamiento cónico (conic_sweep). La idea es que, teniendo
una forma básica creada mediante puntos de control, ésta se vaya
estrechando desde una altura 2, hasta la altura 1, en que el
contorno de la figura queda reducido a un punto. Veamos qué clase
de efectos se pueden conseguir con el siguiente ejemplo (ver fichero prismdm4.pov
):
prism { conic_sweep linear_spline 0, // altura 1 1, // altura 2 5, // número de puntos que forma la figura <4,4>,<-4,4>,<-4,-4>,<4,-4>,<4,4> rotate <180, 0, 0> translate <0, 1, 0> scale <1, 4, 1> pigment { gradient y scale .2 } }
Hemos elegido un degradado para el pigmento para aumentar la definición del mismo sin tener que cambiar las luces y el ángulo de la cámara. Lo que tenemos aquí es una pirámide a bandas horizontales en la que podemos reconocer una spline lineal uniendo los cuatro puntos de un cuadrado y un último punto para cerrar el área del spline.
También hemos tenido que realizar unos pequeños cambios para situar correctamente el objeto, ya que, normalmente, un prisma creado usando el desplazamiento cónico (conic_sweep) se va estrechando de arriba a abajo, hasta y=0, en que del contorno de la figura sólo queda un punto. Ya que estamos generando una pirámide, (y queremos que se reconozca como tal), invertimos la figura rotándola sobre el eje X para colocarla correctamente. Después la elevamos sobre el eje Y para hacerla reposar de nuevo sobre Y=0 (advierta que la anterior rotación ha causado que la pirámide "orbite" sobre el eje X).
El escalado es para ajustar las proporciones a este ejemplo. La base es de ocho por ocho unidades, pero la altura (de y=1 a y=0) sólo tiene una unidad, así que hemos estirado la figura un poquito. ¿Qué por qué no desplazamos la figura de y=0 a y=4 para ahorrarnos esta sentencia de escalado? ¡Buena pregunta!
Para comprender qué es lo que no funciona con desplazamientos cónicos, modificaremos el ejemplo anterior (ver fichero prismdm5.pov), eliminando la línea de escalado y reemplazando la linea donde dice:
1, // altura 2
por
4, // altura 2.
Esto ajustará la segunda altura a y=4, generemos la imagen y veamos si el efecto es el mismo.
Vaya... La altura es correcta, pero la base de nuestra pirámide es enorme.. ¿Qué es lo que ha ido mal? Sencillo. La base, tal como la hemos descrito con los puntos que hemos usado, está (siempre) situada en y=1, sin importar dónde hayamos situado la segunda altura. Pero si definimos la segunda altura mayor que 1, una vez que el desplazamiento ha pasado por y=1, continúa expandiendo el objeto a lo largo de las mismas líneas que ha seguido hasta la base original, haciendo que la nueva base sea cada vez más grande. Para evitar perder el control de un prisma construido a partir de un desplazamiento cónico, es mejor dejar la segunda altura en y=1 y hacer un escalado para ajustar la altura desde tu tamaño unitario. De esta forma siempre podremos estar seguros de que las esquinas de la base permanecen donde creemos que deben estar.
Pero ¿qué pasa si por alguna razón, no queremos que la disminución llegue al colapso en un punto? Si desearámos algo más parecido a un zigurat escalonado, nuestro código se parecería a esto :
prism { conic_sweep linear_spline 0.251, // altura 1 1, // altura 2 5, // número de puntos que forma la figura <4,4>,<-4,4>,<-4,-4>,<4,-4>,<4,4> rotate <180, 0, 0> translate <0, 1, 0> scale <1, 4, 1> pigment { gradient y scale .2 } }
Incrementar la primera altura para el
desplazamiento cónico
Cuando redibujamos, vemos que el barrido de la figura se detiene antes de llegar al punto final (donde Y=0), creando una pirámide sin cúspide. La cantidad de cresta que es eliminada en nuestro prisma depende de próximos que estén la primera y segunda alturas.
|