[ Índice ]

4 - Geometria de Construção Sólida

Em POV-Ray existe um sistema de construção de objectos aplicando operações de união, intersecção, diferença e junção de objectos.

A esta propriedade chamamos Geometria de Construção Sólida (CSG - constructive solid geometry). Podemos, então, criar objectos mais complicados juntando objectos simples, como sejam caixas, esferas, cilindros, cones, etc.

Os próprios objectos CSG podem ser usados para se criarem outros objectos mais complexos.

4.1 - União

A união de objectos é elementar. Para tal, utiliza-se a primitiva union, especificando dentro desta todos os objectos que queremos unir. Veja-se o seguinte exemplo:

   ...
      union {
        sphere {<0, 1, 0>, 1}
        box {<-1, 0, -1>, <1, 1, 1> }
        pigment { White_Marble }
      }
   ...
  

Este código desenharia uma esfera cuja base estaria incluida numa caixa. A sintaxe genérica é a seguinte:

   union {
     object...
     object...
     object...
   }
  

A imagem seguinte pretende ilustrar a união numa imagem a duas dimensões para ficar mais perceptivel:

Union

Normalmente, usa-se apenas um pigmento (textura, cor) mas não excluí a definição de um pigmento por objecto. Os objectos intervenientes numa imagem CSG, podem ser rodadas ( rotate), transladadas (translate) ou alterado o seu tamanho (scale)!

4.2 - Intersecção

A intersecção permite que fiquemos com um objecto cuja forma é a do espaço comum a todos os objectos intervenientes nesta intersecção.

Poderia agora perguntar: e podemos usar um plano? Bem. Para um plano temos que ter em consideração a forma como o definimos. Se nos relembrar-mos do que dissemos no capítulo 2, para definir um plano, temos que especificar um vector normal ao plano (perpendicular) e a distância do plano à origem. O lado interior de um plano (aquele lado que e' usado para a intersecção, ou união, é o lado oposto do que é apontado pelo vector definido. Portanto, se o vector fosse <1,0,0> estaríamos a definir um plano vertical e o seu interior seria o lado esquerdo deste.

Mais uma vez, vizualizando o exemplo dos circulos:

Intersection

A sua sintaxe é idêntica à da união:

      intersection {
        object...
        object...
        object...
        pigment...
      }

4.3 - Diferença

Além de podermos juntar e intersectar objectos, podemos trinca-los, i.e., podemos definir um objecto e ir, aos poucos "escavando" até termos o objecto desejado. A figura seguinte ilustra a funcionalidade da primitiva difference:

Difference

A sua sintaxe é:

      difference {
        object0...
        object1...
        object2...
        object3...
onde o object0 vai ser escavado. Ao object0 vão ser subtraidos todos os outros objectos.

4.4 - Merge

A função de merge é idêntica à de union. A unica e principal diferença é que esta elimina todas as faces de objectos dentro da união. Imaginemos que tentava-mos unir dois objectos transparentes. Com a primitiva 'union' notavam-se todas as faces que estão dentro do objecto. A função merge elimina isto. Evidentemente que é preferencial a união quando de objectos sólidos, pela sua rapidez.

Esta figura ilustra a primitiva merge:

Difference

A sua sintaxe é:

      merge {
        object...
        object...
        object...
      }

4.5 - Conclusão

Em conclusão, o sistema CSG permite que se crie objectos complicados, através da união de vários outros, mais simples. Permite também que se definam objectos em bibliotecas para uso futuro!

[ Anterior ] [ Índice ] [ Próximo ]