Computação Gráfica

Aula de laboratório 00 - Objetos poligonais

 

Valdemir Carrara

Programas: Pov e Moray

 

Próxima aula

 

 

Download do material desta aula

 

            Nesta aula será visto a criação de objetos poligonais no Moray. O objetivo é demonstrar os conceitos vistos no Capítulo 4 da apostila (Representação tridimensional), com as tabelas de vértices e polígonos.

 

Existem diversos algoritmos que foram desenvolvidos nos últimos anos para converter uma representação tridimensional de objetos armazenados no computador numa imagem. Todos os programas gráficos 3D utilizam uma ou mais destas formas. Duas delas se destacam: a elaboração poligonal e a traçagem de raios.

 

A primeira delas tem por objetivo gerar uma cena rapidamente para poder fazer animações interativas. A sua principal utilização é em jogos e simuladores tridimensionais. Existem diversas implementações desta forma de elaboração, mas as mais importantes são o OpenGl e o DirectX. Ambos são, na verdade, pacotes de funções gráficas que podem ser utilizados por programas gráficos ou jogos. O OpenGl é uma especificação aberta (isto é, um conjunto de regras que estabelece como deve ser a implementação). Portanto, existem diversas versões dele, como o da Silicon Graphics, da Mesa e da Microsoft (acompanha o Windows). O DirectX, por outro lado, foi desenvolvido pela Microsoft para suporte a jogos, e, ao contrário do OpenGl, manipula também sons e vídeo. Em virtude da necessidade de grande velocidade de elaboração da imagem, a elaboração poligonal deixa de lado o realismo gráfico. Fazer sombras com ele, por exemplo, é uma tarefa bastante complicada e lenta.

 

A segunda forma de elaboração é a traçagem de raios. Ela é voltada para o realismo gráfico, sem preocupação com o tempo de elaboração. Da mesma forma que a elaboração poligonal, existem diversos programas gráficos comerciais que trabalham com traçagem de raios ou com uma mistura dele com a elaboração poligonal. São exemplos de programas: Povray, 3D Studio, Carrara, Cinema 4D, Lightwave, Maya, Rayshade, Renderpark, Strata3D e True Space (ver links).

 

A elaboração poligonal necessita de objetos descritos por fronteira, isto é, as superfícies dos objetos são representadas por polígonos planos (triângulos, quadrângulos, etc.). Na traçagem de raios os objetos são também descritos por fronteira, mas a traçagem de raios suporta objetos algébricos (descritos por equações), além dos objetos descritos por polígonos.

 

O Moray, que iremos utilizar nesta aula, é um editor de objetos (e também de materiais) para o Pov. Em outras palavras, o Moray cria objetos algébricos e os envia para o Pov (por meio de arquivos com extensão .pov, .inc, e .ini) para que ele gere a imagem. Para tornar a edição de objetos mais simples, o Moray apresenta a cena em 4 vistas ou janelas na sua tela principal: uma vista de cima (“Top”), uma de lado (“Side”), uma de frente (“Front”) e outra em perspectiva a partir da câmera (“StdCam”), como mostra a figura abaixo. Para permitir uma rápida visualização da cena, o Moray emprega, por “default”, a elaboração por estrutura de arame (somente as arestas dos polígonos são representadas). Objetos algébricos são convertidos, pelo Moray, em objetos poligonais para serem apresentados na tela. A partir da versão 3.3 o Moray passou a utilizar nesta apresentação, além da visualização em estrutura de arame, também a elaboração poligonal com o OpenGl. Iremos visualizar estes recursos nesta aula.

 

 

O primeiro passo é descrever o objeto poligonal para o Moray, que deve ser fornecido por um arquivo contendo as coordenadas dos vértices dos polígonos. Considere então um tetraedro descrito pelas tabelas de vértices e de polígonos mostradas abaixo. Para o Moray, os polígonos devem ser descritos na forma ASCII (texto) de um polígono por linha, com as 3 coordenadas de cada vértice numa seqüência.

 


Tabela de vértices

V1

30

0

-6

V2

-6

20

-6

V3

-6

-20

-6

V4

6

0

30

 

Tabela de polígonos em função dos vértices

S1

V1

V2

V3

S2

V1

V4

V2

S3

V1

V3

V4

S4

V2

V4

V3

 


 

O arquivo gerado por esta tabela denomina-se “tetraedro.raw”, e seu conteúdo é:

 

Tetraedro

30    0     -6    -6    20    -6    -6    -20   -6

30    0     -6    6     0     30    -6    20    -6

30    0     -6    -6    -20   -6    6     0     30

-6    20    -6    6     0     30    -6    -20   -6

 

Nota-se que pode ser inserido qualquer comentário em qualquer linha do arquivo, desde que não seja uma linha de dados.

 

O próximo passo é inserir este objeto no Moray, selecionando-se o botão objeto do tipo RAW, (ver figura abaixo, à esquerda) ou “Raw triangles” no menu. O Moray irá pedir então que seja selecionado o arquivo contendo a descrição do objeto (arquivo com extensão “raw”). O Moray deverá mostrar o objeto em estrutura de arame, conforme mostra a figura abaixo, à direita.

 


      

 

Obs: para visualizar o objeto na forma com que ele aparece na figura acima, deve-se mudar a posição da câmera para afastá-la do objeto. Eis algumas dicas de como fazer isso:

 

a)      Para aproximar ou afastar a câmera de qualquer uma das projeções (frontal, lateral, ou topo), deve-se clicar com o botão direito do “mouse” na janela, selecionar “Zoom”, clicar na janela com o botão esquerdo e mover o mouse para cima ou para baixo. Outra forma de conseguir o mesmo resultado é pressionar a tecla “Alt” com a mão esquerda, clicar na janela como botão esquerdo e mover o mouse.

b)      Para deslocar a câmera de qualquer janela nas direções vertical e horizontal (sem afetar a proximidade dos objetos), utiliza-se o mesmo procedimento indicado acima, porém seleciona-se “Pan” (“panoramic”). Outra forma é pressionar a tecla “Control” com a mão esquerda. Note que o cursor do mouse muda de nome para “Pan”.

c)      Para alterar a posição da câmera na janela de perspectiva, selecione a câmera “StdCam” na lingüeta “Select”, como mostrado na imagem abaixo. A seguir, deve-se efetuar um Zoom para se afastar do objeto nas telas Top, Side ou Front, clicar com o mouse em uma destas janelas, e arrastar na direção de afastar a câmera.

d)      Para centralizar o objeto na câmera, deve-se pressionar a tecla “Control” e, na janela de perspectiva (StdCam), clicar com mouse e movê-lo na direção de centralização. Esta opção funciona mesmo se a câmera não estiver selecionada.

 

 

A visualização do objeto na forma poligonal é feita ao clicar com o botão direito do mouse sobre a legenda “StdCam” na janela de perspectiva, e selecionar a opção “OpenGl display”, como mostra a figura abaixo.

 

 

            Para praticar, deve-se agora selecionar a câmera novamente, clicar com o botão esquerdo do mouse na janela de perspectiva e arrastar o mouse. A câmera irá girar ao redor do objeto, e a cada nova posição é gerada uma nova imagem. O número de imagens geradas por segundo é mostrado no canto superior direito da janela (na imagem acima, o valor é de 103 fsp, ou “frames per second”).

 

            Um último comentário deve ser feito com relação à forma de exibição do OpenGl. Como a descrição dos objetos é feita pela superfície, os objetos podem ser visualizados tanto externamente como internamente, ou mesmo ambos. Uma garrafa, por exemplo, é visualizada externamente, enquanto que um quarto de uma casa é visualizado internamente. A forma com que os objetos são mostrados, se internamente ou externamente, depende de como as normais aos polígonos são definidas. Estas, por sua vez, dependem da ordem com que são fornecidas as coordenadas dos vértices. Um triângulo formado pelos vértices V1, V2 e V3, pode ser fornecido na ordem V1-V2-V3, ou então V1-V3-V2. Outras combinações são possíveis, mas são equivalentes a estas duas apresentadas. Por definição, uma normal é externa quando ao se percorrer os vértices na ordem fornecida com o sentido da mão direita, a normal assume a direção do polegar. Em outras palavras, se a ordem for V1-V2-V3, a normal é calculada pelo produto vetorial (ver o Capítulo 4 da apostila):

 

 

            O OpenGl permite que seja selecionado a direção na qual se deseja visualizar uma superfície. Poder-se-ia perguntar porque não mostrar ambas as faces (a interna e a externa), para simplificar o problema. A resposta é que se gasta processamento para mostrar cada superfície, e como há a necessidade de gerar a imagem no menor tempo possível, então adota-se este artifício.

 

Surpreendemente, porém, o Moray assume que a visualização externa é realizada quando a normal é interna. Portanto, a normal deve apontar para dentro do objeto quando se deseja visualizar a parte externa dele e vice-versa. Este é o motivo pelo qual a tabela de polígonos do tetraedro possui uma ordem de vértices que resultam em normais internas.

 

Para visualizar um caso onde as normais são externas, deve-se carregar o arquivo “peixe.raw”. Antes disso, é conveniente iniciar uma nova cena (“File / New Scene”). Após criar um objeto do tipo RAW com um arquivo contendo as coordenadas do peixe mostradas abaixo, deve-se obter uma imagem na janela em perspectiva como a mostrada na figura a seguir. Pode-se perceber que o objeto está mostrando suas faces internas posteriores (aquelas nas quais a normal aponta na direção da câmera). Veja que é necessário efetuar alguns ajustes na posição da câmera e da fonte de luz (objeto “Light1”) para se conseguir o mesmo ângulo de visualização. Além disso, para conseguir um contraste melhor entre o objeto e o fundo, foi alterada a cor deste último, por meio de “View / Configuration / Interface / Color Scheme of Views” onde foi selecionado o “Hamapatch”.

 

Peixe

0     4     0     0     2     2     1     2     0

0     4     0     1     2     0     0     2     -2

0     4     0     -1    2     0     0     2     2

0     4     0     0     2     -2    -1    2     0

0     -2    0     1     2     0     0     2     2

0     -2    0     0     2     -2    1     2     0

0     -2    0     0     2     2     -1    2     0

0     -2    0     -1    2     0     0     2     -2

0     -2    0     0     -4    2     0     -3    0

0     -2    0     0     -3    0     0     -3    -2

 

 

Há uma forma, porém de modificar a regra de apresentação de polígonos no Moray. Deve-se clicar no canto superior direito da janela de perspectiva, sobre a identificação StdCam, e selecionar “OpenGl Settings”. Uma nova janela irá se abrir, mostrando as opções disponíveis (figura abaixo).

 

 

 

            A seguir, deve-se eliminar a seleção de “Backface Culling” (significa que ambos os lados dos polígonos serão mostrados). O peixe deve ficar então na forma mostrada abaixo.

 

 

Download do material desta aula

 

Próxima aula