3.3.2  Unión CSG

Intentemos construir una unión simple. Abrimos el editor y creamos un fichero al que titulamos cgsdemo.pov, y escribimos lo siguiente:

  #include "colors.inc"
  camera {
    location <0, 1, -10>
    look_at 0
    angle 36
  }
  light_source { <500, 500, -1000> White }
  plane { y, -1.5
    pigment { checker Green White }
  }

Ahora añadimos dos esferas y las trasladamos .5 unidades a lo largo del eje X en cada dirección. Las "pintaremos" una de color rojo y la otra de color azul.

  sphere { <0, 0, 0>, 1
    pigment { Blue }
    translate -0.5*x
  }
  sphere { <0, 0, 0>, 1
    pigment { Red }
    translate 0.5*x
  }

Generamos esta escena y vemos los resultados. Ahora situamos un bloque de unión alrededor de las dos esferas. Esto creará una sola union CSG de los dos objetos.

  union{
    sphere { <0, 0, 0>, 1
      pigment { Blue }
      translate -0.5*x
    }
    sphere { <0, 0, 0>, 1
      pigment { Red }
      translate 0.5*x
    }
  }

Generamos el fichero de nuevo. La unión no parece causar mucha diferencia entre el anterior aspecto de las esferas y el actual, pero lo cierto es que ahora podemos tratarlas como un conjunto, podemos darles una única textura, o transformarlas al tiempo. Por ejemplo.

  union{
    sphere { <0, 0, 0>, 1
      translate -0.5*x
    }
    sphere { <0, 0, 0>, 1
      translate 0.5*x
    }
    pigment { Red }
    scale <1, .25, 1>
    rotate <30, 0, 45>
  }

Generamos el fichero de nuevo. Como podemos ver, el objeto ha cambiado notoriamente. Experimente con diferentes valores de escala y rotación, pruebe también texturas diferentes.

Hay muchas ventajas a la hora de asignar una única textura a un objeto CSG en lugar de asignar una textura a cada componente individual. Primero, es mucho más fácil manejar una sola textura si nuestro objeto CSG está formado por muchos componentes, ya que cambiar la apariencia de los objetos sólo implicará modificar una sola textura. Segundo, el fichero se procesará más rápidamente si sólo se ha de calcular la textura una vez. Éste puede ser un factor relevante cuando se están procesando grandes imágenes o animaciones. Tercero, usar sólo una textura ahorra memoria, ya que la textura es almacenada una vez y referenciada por todos los componentes del objeto CSG. Asignar la misma textura por separado a cada componente significa que la textura será almacenada n número de veces (por cada componente).