[ Í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: |
|
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: |
|
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: |
|
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: |
|
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! |