[ Índice ]

2 - Primeira imagem

2.1 - Visão Geral

Neste capítulo vamos criar a nossa primeira imagem. Em primeiro lugar, e para poder seguir com todo o cuidade este conjunto de passos, aconselhamos a ter disponivel uma vers∆o acutalizada do POV-Ray (versão três) instalada num computador, perto de sí!

Se está a utilizar uma verão com IDE (como por exemplo a do Windows'95) entre no POV-Ray e prepare-se para digitar, passo a passo, os comandos que permitem criar a nossa imagem objectivo! Se está a utilizar uma versão sem IDE, como a de UNIX ou MS-DOS, entre num editor de texto ASCII como o vi ou edit.

2.2 - O sistema de eixos

Para definir-mos um qualquer elemento de um 'programa' POV, temos de saber utilizar o seu sitema de eixos. Este sistema de eixos cartezianos permite especificar precisamente qualquer ponto no universo POV.

Considere-se um sistema coordenado de eixos (tipicamente denominados de x,y e z ou abcissas, ordenadas e cotas).

Sistema de coordenadas

Como se pode verificar no sistema de coordenadas apresentado na imagem anterior, o eixo das abcissas aponta da esquerda para a direita. Portanto, quanto mais um objecto está para a direita, maior é o seu valor das abcissas. Respectivamente, no eixo das coordenadas, quanto mais 'alto' está um objecto, maior é o seu valor de coordenadas. Por ultimo, temos o eixo das cotas. Este, aponta para as tripas do seu monitor. Portanto, quanto maior é a cota de um objecto, mais distante ele está do utilizador.

Note-se que este sistema de eixos é ligeiramente diferente do que estamos habituados quando falamos de geometria (para os que falaram...)!

Para especificar-mos um ponto em POV, usamos a notação <a,b,c> em que a,b e c devem ser substituidos pelos valores respectivos dos eixos das abcissas, ordenadas e cota. Existem ainda três outros vectores (a <a,b,c> chama-se vector!) pre-definidos: são vectores unitários, denominados de x, y e z para definir, respectivamente <1,0,0>, <0,1,0> e <0,0,1>!

Se já compreendeu este sistema de coordenadas, não vai sentir a mínima dificuldade em programar POV! Caso contrário, aconselho a consultar livros mais especificos de geometria!

2.3 - Including

Em POV-Ray podemos utilizar primitivas e conjuntos de objectos definidos em outros ficheiros. Portanto, permite-nos dividir desenhos por ficheiros, por exemplo. Permitiu também, aos criadores do POV-Ray, definir um conjunto de Bibliotecas de cores, formas e texturas.

Qualquer desenho que façamos, deve utilizar bibliotecas, visto que precisariamos de redefinir tudo para as não utilizar. No nosso exemplo, vamos precisar de utilizar algumas: colors.inc, shapes.inc, textures.inc, stones.inc e skies.inc que incluem, respectivamente, definições de cores, formas, texturas, texturas de pedras e padrões para céus.

Para a inclusão de bibliotecas, temos de as ter ou na directoria include da nossa versão de POV-Ray ou então, na directoria onde estamos a trabalhar. Para mais informações sobre directorias, consulte o manual do seu sistema operativo.

No seu programa (até agora vazio...) digite as seguintes linhas de código:

    // Os nossos includes...
    #include "colors.inc"
    #include "shapes.inc"
    #include "textures.inc"
    #include "stones.inc"
    #include "skies.inc"

Deve estar agora à voltas a pensar para que serve as duas barras na primeira linha. Essa linha permite escrever um comentário. Um comentário é uma linha de texto que o ajuda a movimentar-se no seu código. Evidentemente que o POV-Ray ignora essa linha, desde as duas barras (//) até ao fim da linha!

Outra forma de incluir coment´rios, de várias linhas, digite o comentário entre /* e */ e será também ignorado.

As cinco linhas seguintes instruem o POV-Ray para que inclua os ficheiros especificados, como se tivessem sido digitados naquele momento no ínicio do nosso texto.

2.4 - Camera

Para definir-mos uma camera temos que especificar a sua localização e o seu alvo. Para tal, utiliza-se o sistema de coordenadas de que falamos no capítulo 2.2. Considere o seguinte exemplo:

    camera {
      location <.5, .5, -4>
      up <0, 1, 0>
      right <1.33, 0, 0>
      look_at <0, 0, 0>
    }

Vamos agora analisar o código anterior linha por linha:

A primeira linha diz ao POV-Ray que vamos definir a posição da camera. Note-se que num programa POV só se pode definir uma única! Nas quatro linhas seguintes definimos outros atributos desta camera.

A primitiva location permite definir a posição da camera no universo POV. Neste caso, está a cinco décimas para a direita e para a esquerda do centro do universo, e quatro unidades para fora do monitor ;-). Note-se que o POV-Ray aceita numeros decimais e/ou inteiros positivos e/ou negativos!

As duas linhas seguintes definem o que em inglês é apelidado de aspect ratio. Define a relação entre as unidades dos dois principais eixos (abcissas e ordenadas). Visto que este desenho foi originalmente concebido para colocar no fundo do X-Windows, a sua resolução de compilação foi de 800x600. Se dividir-mos 800 por 600 obtemos um resultado de 1.333333333333333... Portanto, o nosso aspect ratio tem que ser definido de forma a comunicar isso ao POV-Ray, pelo que temos estas duas linhas de código.

Temos ainda uma última linha a explicar: a primitiva look_at. Esta especifica o alvo da camera. Mais uma vez, o parametro que recebe é um vector definido no sistema POV. Neste caso, o nosso alvo é o centro de uma esfera (sshhh... não era para dizer já!) que vamos definir.

2.5 - Uma esfera!

Vamos agora definir o nosso primeiro objecto! Uma esfera. Existe uma primitiva (definida na bilbioteca shapes.inc) que permite definir uma esfera apenas pelo seu centro e raio. Portanto, basta-nos um vector para definir o centro da nossa esfera, um valor real para definir o raio.

O código a aumentar nesta secção é o seguinte:

    sphere {
      <0, 0, 0>, 1
      texture {
        T_Stone1
      }
    }

Depois de ler a primeira linha, o POV-Ray fica a saber que queremos definir uma esfera, pelo que lê de seguida um vector definindo o centro da nossa esfera e o raio da mesma. Queremos a esfera centrada na origem e com raio de uma unidade.

De seguida, temos uma novidade! Vamos aplicar uma textura à nossa esfera! Dentro do primitiva sphere, definimos uma textura com a primitiva pigment (que pode ser utilizada com todas as primitivas). T_Stone1 é uma definição de uma textura pré-definida na biblioteca stones.inc.

Para saber todas as texturas definidas numa biblioteca, consulte alguns ficheiros de texto na mesma directoria onde estão as texturas, ou as próprias texturas.

Falaremos de novo em texturas, mais para a frente!

2.6 - Agora temos um Plano!

Não... não é um plano de assalto! Vamos criar um plano para que a nossa esfera não fique a flutuar no nosso universo! Para tal, utilizamos a primitiva plane. Temos como parametros, um vector e um real.

O vector aponta na direcção normal ao plano e para o lado exterior do plano (lado onde a textura vai ser aplicada). Este vector faz um ângulo de 90 graus em relação ao plano a criar!

O real que definimos de seguida é a distância entre o plano e a origem no seu vector normal! Considere o código do nosso plano:

    plane {
      <0, 1, 0>, -1
      pigment {
        White_Marble
      }
      rotate <0, 45, 0>
    }

Depois de ler este código deve ter tido dificuldade apenas na primitiva rotate. Esta primitiva permite fazer uma rotação a um objecto em relação a um dos três eixos. No nosso caso estamos a dar uma rotação à volta do eixo das ordenadas para que a textura (White_Marble) fique numa posição mais bonita. Como vemos, esta primitiva não tem nada que saber. É necessário pelo menos alguma prática para o utilizar decentemente!

2.7 - Céu

Uma coisa que nos faz falta além de um plano onde pousar a esfera e a própria esfera, é o céu ou o tecto do nosso universo! No caso da imagem que estamos a tentar criar, queria um céu!

Exite, a partir da versão três do POV-Ray uma primitiva denominada sky_sphere que faz isso mesmo: cria um céu transparente à luz e à sombra. Para definir um céu basta-nos especificar uma textura! Esta textura é normalmente uma das da biblioteca skies.inc uma vez que define quase todos os céus de que alguma vez precisaremos (pelo menos para já!).

O código referente ao nosso céu é:

    sky_sphere {
      S_Cloud1
    }

2.8 - Luz..

Para a definição simples de uma fonte de luz, basta-nos um ponto, e uma cor! Uma cor sim! A luz tem cor. Podemos defini-las verdes, amarelas, pretas (não iluminam :-)), brancas, etc, etc...

A primitiva usada é light_source seguida de um vector especificando a localização da fonte de luz e a sua cor!

Para o nosso desenho, temos como exemplo:

  
    light_source {
      <-9, 1, -9> color White}
    light_source {
      <0, 0.01, 4> color Blue}
    light_source {
      <1.5, 0.01, 5> color Red}
    light_source {
      <-1.5, 0.01, 5> color Green}

Para definir-mos uma cor, podemos utilizar uma declarada numa biblioteca (neste exemplo, na colors.inc) ou então, definir-mos a nossa cor. Para isso utiliza-se a primitiva color da seguinte forma:

    color red 1 green .6 blue 1

Em que os valores numéricos indicam a quantidade dessa cor a misturar. Os valores devem estar compreendidos entre 0 e 1, respectivamente, sendo o 0 o não existir essa cor e o 1, o máximo dessa cor!

2.9 - Compilar

Se utiliza a versão para Windows'95, basta premir um botão para compilar o seu desenho! Prima as teclas Ctrl + G (G=Go!) e aparecerá uma janela com a sua imagem, enquanto que o POV a vai compilando!

Se utiliza uma versão sem IDE, tem um pouco mais de trabalho! Em primeiro lugar vai ter de chamar o POV-Ray pela linha de comando de modo a compilar o seu desenho e depois utilizar um programa de tratamento gráfico para ver a imagem!

Vamos apenas explicar a primeira metade do parágrafo anterior. Execute o seguinte comando:

    povray +Iname.pov +Oname.tga
           +V +W320 +H240

Em que deve substituir name.pov pelo nome do ficheiro com que gravou o código, e name.tga pelo nome do ficheiro tga que quer obter! O +V indica ao POV-Ray para ir dando informações acerca da compilação! O +W e o +H especificam, respectivamente, a largura e a altura da imagem! Note que para o desenho que fizemos convem que a largura a dividir pela largura seja igual a 1.333333!

2.10 - O resultado!!

esfera.jpg

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