6.5.3  Primitivas sólidas infinitas

Existen cinco formas primitivas polinómicas, infinitas en potencia, y que no responden al acotado automático. Son el plano y las curvas cúbicas, cuádricas, cuárticas y polinómicas. Tienen un interior definido y pueden usarse en operación de CSG, o dentro de una sentencia clipped_by. Como el resto de formas, pueden trasladarse, rotarse o escalarse.

6.5.3.1  Plano

La primitiva plane es la manera más simple de definir una superficie plana infinita. El plano no es como una hoja de papel, si no que es un objeto sólido de tamaño infinito que divide en dos partes el POV-espacio: el interior y el exterior del plano. El plano se especifica de la siguiente forma:

PLANE:
    plane
    {
        <Normal>, Distancia
        [MODIFICADORES_DE_OBJETOS...]
    }

El vector <Normal> define la normal a la superficie del plano, esto es, el vector que apunta hacia arriba desde la superficie en un ángulo de 90 grados. El valor de coma flotante siguiente es la distancia desde el origen a la que se sitúa el plano, en la dirección de la normal (esto es sólo cierto si el vector de la normal es unitario: véase más abajo). Por ejemplo:

  plane { <0, 1, 0>, 4 }

Éste es un plano cuya normal se define en la dirección +y, a 4 unidades de distancia del origen en esa misma dirección. Ya que la mayoría de los planos se definen con normales orientadas en la dirección de los ejes, los verás a menudo definidos mediante los identificadores predefinidos x, y o z. El plano del ejemplo anterior podría definirse también como:

  plane { y, 4 }

Este plano se extiende infinitamente en las direcciones x y z. Divide efectivamente el mundo en dos partes. Por definición, el vector de la normal apunta hacia el exterior del plano, mientras que los puntos por debajo de él pertenecen al interior. Esta distinción entre exterior e interior es importante cuando se usan los planos en operaciones CSG o con clipped_by. También es importante cuando se usa niebla o medios atmosféricos. Si sitúas la cámara en el interior de un plano, la niebla o el medio no serán visibles. Esto sucede con cualquier objeto sólido, pero suele ocurrir más a menudo con los planos. El usuario normalmente se da cuenta cuando ha puesto la cámara dentro de una caja o esfera, pero el interior de un plano es un concepto inusual. En general, puedes invertir el interior/exterior de un objeto con el modificador inverse. Mira las secciones "Inverse" y "Objetos sólidos y huecos" para conocer más detalles.

El plano es una forma polinómica ya que se define como una ecuación polinómica de primer orden. Dado el plano:

  plane { <A, B, C>, D }

éste puede representarse mediante la ecuación A*x + B*y + C*z - D*sqrt(A^2 + B^2 + C^2) = 0.

Así, nuestro ejemplo plane{y,4} es realmente la ecuación polinómica y=4. Puedes imaginarlo como el conjunto de puntos del espacio para los que el valor de y es 4, sin importar los valores de x o z.

Esta ecuación es un polinomio de primer orden ya que cada término contiene sólo potencias de 1 de x, y o z. Una ecuación de segundo orden tiene términos como x x^2, y^2, z^2, xy, xz o yz. Otro nombre de las ecuaciones de segundo orden es "ecuación cuádrica". Las de tercer orden son "cúbicas", y las de cuarto orden "cuadráticas". Dichas formas se describen en las siguientes secciones.

6.5.3.2  Poly (polinomio), Cubic (cúbica) y Quartic (cuártica)

Pueden definirse superficies polinómicas de mayor orden usando la forma poly. Su sintaxis es la siguiente:

POLY:
    poly
    {
        Orden, <A1, A2, A3,... An>
        [MODIFICADORES_POLINOMICOS...]
    }
MODIFICADORES_POLINOMICOS:
    sturm | MODIFICADOR_DE_OBJETO

Valores por defecto:

sturm : off

donde Orden es un entero de 2 a 7 inclusive, que especifica el orden de la ecuación. A1, A2, ... An son los valores de coma flotante de los coeficientes de la ecuación. Existen n términos donde n = ((Orden+1)*(Orden+2)*(Orden+3))/6.

El objeto cubic es una manera alternativa de especificar polinomios de 3er orden. Su sintaxis es:

CUBIC:
    cubic
    {
        <A1, A2, A3,... A20>
        [MODIFICADORES_POLINOMICOS...]
    }

También existe el objeto quartic para especificar ecuaciones polinómicas de cuarto orden. Su sintaxis es:

QUARTIC:
    quartic
    {
        <A1, A2, A3,... A35>
        [MODIFICADORES_POLINOMICOS...]
    }

La siguiente tabla muestra los factores x,y,z y sus términos polinómicos correspondientes. Recuerda que cubic es realmente un polinomio de 3er orden y quartic de cuarto orden.

         
A1 x2 x3 x4 x5 x6 x7   A41 y3 xy3 x2y3   A81 z3 xz3
A2 xy x2y x3y x4y x5y x6y   A42 y2z3 xy2z3 x2y2z3   A82 z2 xz2
A3 xz x2z x3z x4z x5z x6z   A43 y2z2 xy2z2 x2y2z2   A83 z xz
A4 x x2 x3 x4 x5 x6   A44 y2z xy2z x2y2z   A84 1 x
A5 y2 xy2 x2y2 x3y2 x4y2 x5y2   A45 y2 xy2 x2y2   A85   y7
A6 yz xyz x2yz x3yz x4yz x5yz   A46 yz4 xyz4 x2yz4   A86   y6z
A7 y xy x2y x3y x4y x5y   A47 yz3 xyz3 x2yz3   A87   y6
A8 z2 xz2 x2z2 x3z2 x4z2 x5z2   A48 yz2 xyz2 x2yz2   A88   y5z2
A9 z xz x2z x3z x4z x5z   A49 yz xyz x2yz   A89   y5z
A10 1 x x2 x3 x4 x5   A50 y xy x2y   A90   y5
A11   y3 xy3 x2y3 x3y3 x4y3   A51 z5 xz5 x2z5   A91   y4z3
A12   y2z xy2z x2y2z x3y2z x4y2z   A52 z4 xz4 x2z4   A92   y4z2
A13   y2 xy2 x2y2 x3y2 x4y2   A53 z3 xz3 x2z3   A93   y4z
A14   yz2 xyz2 x2yz2 x3yz2 x4yz2   A54 z2 xz2 x2z2   A94   y4
A15   yz xyz x2yz x3yz x4yz   A55 z xz x2z   A95   y3z4
A16   y xy x2y x3y x4y   A56 1 x x2   A96   y3z3
A17   z3 xz3 x2z3 x3z3 x4z3   A57   y6 xy6   A97   y3z2
A18   z2 xz2 x2z2 x3z2 x4z2   A58   y5z xy5z   A98   y3z
A19   z xz x2z x3z x4z   A59   y5 xy5   A99   y3
A20   1 x x2 x3 x4   A60   y4z2 xy4z2   A100   y2z5
A21     y4 xy4 x2y4 x3y4   A61   y4z xy4z   A101   y2z4
A22     y3z xy3z x2y3z x3y3z   A62   y4 xy4   A102   y2z3
A23     y3 xy3 x2y3 x3y3   A63   y3z3 xy3z3   A103   y2z2
A24     y2z2 xy2z2 x2y2z2 x3y2z2   A64   y3z2 xy3z2   A104   y2z
A25     y2z xy2z x2y2z x3y2z   A65   y3z xy3z   A105   y2
A26     y2 xy2 x2y2 x3y2   A66   y3 xy3   A106   yz6
A27     yz3 xyz3 x2yz3 x3yz3   A67   y2z4 xy2z4   A107   yz5
A28     yz2 xyz2 x2yz2 x3yz2   A68   y2z3 xy2z3   A108   yz4
A29     yz xyz x2yz x3yz   A69   y2z2 xy2z2   A109   yz3
A30     y xy x2y x3y   A70   y2z xy2z   A110   yz2
A31     z4 xz4 x2z4 x3z4   A71   y2 xy2   A111   yz
A32     z3 xz3 x2z3 x3z3   A72   yz5 xyz5   A112   y
A33     z2 xz2 x2z2 x3z2   A73   yz4 xyz4   A113   z7
A34     z xz x2z x3z   A74   yz3 xyz3   A114   z6
A35     1 x x2 x3   A75   yz2 xyz2   A115   z5
A36       y5 xy5 x2y5   A76   yz xyz   A116   z4
A37       y4z xy4z x2y4z   A77   y xy   A117   z3
A38       y4 xy4 x2y4   A78   z6 xz6   A118   z2
A39       y3z2 xy3z2 x2y3z2   A79   z5 xz5   A119   z
A40       y3z xy3z x2y3z   A80   z4 xz4   A120   1

Las formas polinómicas pueden usarse para describir un amplia gama de formas, incluyendo el toroide, lemniscata, etc.

Declarar una superficie cuártica requiere que cada uno de los coeficientes (A1 ... A35) se coloquen ordenados en un único y largo vector de 35 términos. Como ejemplo, definamos un toroide de la forma mas bruta. Un toroide puede representarse por la ecuación

x4 + y4 + z4 + 2 x2 y2 + 2 x2 z2 + 2 y2 z2 - 2 (r_02 + r_12) x2 + 2 (r_02 - r_12) y2 - 2 (r_02 + r_12) z2 + (r_02 - r_12)2 = 0

donde r_0 es el radio mayor del toroide (la distancia desde el agujero del donut hasta el centro del anillo del toroide), y r_1 es el radio menor del toroide (la distancia desde el centro del anillo hasta el borde de la superficie exterior). La siguiente declaración de objeto define un toroide con un radio mayor de 6.3 y un radio menor de 3.5 (haciendo que la anchura máxima sea casi 20).

  // Toroide con radio mayor = sqrt(40) y radio menor = sqrt(12)
  quartic {
    < 1,   0,   0,   0,   2,   0,   0,   2,   0,
   -104,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   1,   0,   0,   2,   0,  56,   0,
      0,   0,   0,   1,   0, -104,  0, 784 >
    sturm
  }

Los objetos poly, cubic y quartic se parecen al objeto quadric en el hecho de que tampoco requieren que los entiendas para poder usarlos. El archivo shapesq.inc contiene muchas cuárticas predefinidas para que juegues con ellas.

El objeto poly usa cálculos altamente complejos, y no siempre renderiza perfectamente. Si la superficie no es suave, tiene agujeros o píxeles aleatoriamente coloreados, prueba a usar el modificador sturm en la definición del objeto. Trazará más lentamente, pero se usará un método de cálculo más preciso. Normalmente el problema desaparecerá, pero no siempre. Si sturm no funciona, prueba a rotar o trasladar un poco el objeto.

Existe tal variedad de formas polinómicas, que nos sería imposible enumerarlas todas, y mucho menos describirlas. Te sugerimos que busques documentación adicional en Internet o libros de texto si deseas profundizar más en el tema.

6.5.3.3  Quadric (cuádrica)

El objeto quadric puede producir formas tales como paraboloides (forma de cuenco) y hiperboloides (forma de reloj de arena). También puede producir elipsoides, esferas, conos y cilindros, pero para estas formas es preferible usar los objetos predefinidos de POV-Ray como sphere, cone, y cylinder, ya que trazan más rápido que las cuádricas.

Nota: no confundas las "cuádricas" con las "cuárticas": las primeras son polinomios de segundo orden, mientras que las últimas son de cuarto orden.

Frente a otras polinómicas, las cuádricas trazan mucho más rápido y son menos proclives al error, pero producen objetos de menor complejidad. Su sintaxis es la siguiente:

QUADRIC:
    quadric
    {
        <A,B,C>,<D,E,F>,<G,H,I>,J
        [MODIFICADORES_DE_OBJETO...]
    }

Aunque la sintaxis realmente espera 3 vectores seguidos de un valor de coma flotante, tradicionalmente escribimos la sintaxis como 10 valores de coma flotante, ya que estos diez valores definen una superficie de puntos x,y,z que satisfacen la ecuación A x2 + B y2 + C z2 + D xy + E xz + F yz + G x + H y + I z + J = 0

Diferentes valores de A, B, C, ... J darán formas diferentes. Si coges cualquier punto tridimensional y usas sus coordenadas x,y,z en la ecuación anterior, el resultado será 0 si el punto está en la superficie del objeto. Si el resultado es negativo, entonces el punto está dentro del objeto, mientras que si es positivo se encuentra en el exterior del objeto. Veamos algunos ejemplos:

X2 + Y2 + Z2 - 1 = 0 Esfera
X2 + Y2 - 1 = 0 Cilindro infinito a lo largo del eje Z
X2 + Y2 - Z2 = 0 Cono infinito a lo largo del eje Z

La manera más sencilla de usar estas formas es incluir el archivo de inclusión estándar shapes.inc en tu escena. Este archivo contiene distintas cuádricas predefinidas que puedes transformar (trasladar, rotar y escalar). Para ver la lista completa, edita el archivo shapes.inc.