![]() |
||||
|
Introdução |
Esta atividade tem como principal objetivo a construção de uma imagem monocromática do logotipo da UNICAMP, utilizando a biblioteca gráfica OpenGL. No caso deste trabalho, já foi adiantado também o uso de iluminação e cores. Para isso, foram observados alguns passos principais:
|
Passo 1 - Modelagem Geométrica |
Modelos Geométricos são peças fundamentais em síntese e análise de imagens. Para a formulação de algoritmos de síntese, como no caso deste projeto, duas informações geométricas são essenciais: a posição de cada ponto (vértices) e o vetor normal de superfície associado a cada posição. Para a determinação dos vértices, haviam várias opções:
Neste trabalho foi escolhido trabalhar com dados extraídos de um arquivo texto. As coordenadas foram armazenadas em constantes dentro do próprio programa, ao invés de se fazer a leitura de arquivo. De posse destes dados, o passo seguinte é unir estes vértices, com coerência, de modo a formar os polígonos que vão formar as faces dos sólidos do logotipo. Esta etapa é trabalhosa, pois deve-se ordenar os polígonos para que as faces possuam suas normais voltadas para fora. Como o projeto requer a construção de um sólido 3D, é preciso fazer a extrusão da figura do logotipo. Esta etapa é feita adicionando-se um valor à coordenada z dos vértices obtidos. A modelagem foi dividida em 3 etapas distintas: a modelagem da parte da frente dos sólidos; a modelagem da parte de trás (parte da frente extrudada); e a modelagem da parte lateral, que faz o "fechamento" dos sólidos. Inicialmente, tentou-se modelar as partes da frente e de trás diretamente, com o comando glBegin(GL_POLYGON). No entanto, como alguns sólidos não eram convexos, esta alternativa não foi satisfatória. Foi necessária a utlização do GLU Tesselator, uma série de comandos do GLUT que automaticamente cria uma malha triangular em um polígono, seja ele côncavo ou convexo. Essa técnica foi adotada para a construção da parte da frente e da parte de trás dos polígonos. Abaixo podemos ver um trecho de código que exemplifica a aplicação do GLU Tesselator no projeto:
Para os três círculos do logotipo não foi necessário usar o GLU Tesselator, de forma que um simples glBegin(GL_POLYGON) foi necessário para construí-los. Na parte lateral dos sólidos, foi utilizada a função glBegin novamente, no entanto com o parâmetro GL_TRIANGLE_STRIP. O desenho abaixo ilustra a ordem em que devem ser fornecidos os vértices para construirmos o “triangle strip”: Como possuimos
as coordenadas dos vértices da parte superior
e da parte inferior, basta combiná-los de forma alternada para construirmos
a parte lateral. Com esses passos já é possível se visualizar o modelo geométrico do logotipo, ainda que sem efeitos de iluminação nem de cor. Abaixo podemos observar o logotipo apenas com sua estrutura de "aramado" (wireframe) (clique para ampliar): |
Passo 2 - Tranformações Geométricas e Projetivas |
Para uma correta visualização da figura, é necessário que se efetuem transformações geométricas e projetivas no modelo geométrico. Entende-se como transformação uma aplicação f que faz corresponder um ponto P do domínio Rn a um ponto do contra-domínio Sn. Em sistemas de informações gráficas, as transformações são muito utilizadas para mudar sistemas de referência (Rn diferente de Sn) ou mudar a posição dos pontos num mesmo sistema de referência (Rn igual a Sn). Este projeto se enquadra na segunda classe. No aplicativo do Projeto 1 foram implementadas teclas de atalho que correspondem a diversas transformações sobre o logotipo. São elas:
Existem dois tipos básicos de projeções perspectivas possíveis em OpenGL: ortográfica e perspectiva. Neste trabalho foi utilizada a projeção ortográfica. Na projeção ortográfica, simplesmente descartamos uma das dimensões. Por exemplo, um ponto (x,y,z) será mapeado para simplesmente (x,y). Este tipo de projeção é bastante utilizada em projetos arquitetônicos e de peças mecânicas, pois os desenhos assim obtidos podem ser utilizados para medirmos as dimensões dos objetos representados. Na projeção ortográfica, não importa a distância entre o objeto e o observador, o objeto vai sempre ser visualizado do mesmo tamanho, diferentemente da projeção perspectiva, como veremos abaixo. Em OpenGL a chamada que especifica uma projeção ortográfica no espaço 3D é: glOrtho(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax); Esta chamada define no espaço 3D um paralelepípedo. Somente serão visualizados os objetos que estiverem dentro deste paralelepípedo, denominado o Volume de Visualização (veja ilustração abaixo). |
Passo 3 - Cores e Iluminação |
Como último passo, foi feita a aplicação de um modelo de iluminação e de cores ao modelo do logotipo. Para a aplicação do modelo de iluminação é necessária a determinação de diversos parâmetros, tais como a posição da fonte de luz (GL_POSITION), a intensidade ambiente(GL_AMBIENT), a intensidade lambertiana (GL_DIFFUSE), a intensidade especular (GL_SPECULAR), a direção da fonte spot (GL_SPOT_DIRECTION) (em nosso caso esse foi o tipo de fonte utilizado), o expoente de decaimento da intensidade (GL_SPOT_EXPONENT), o ângulo de abrangência do spot (GL_SPOT_CUTOFF) e os fatores de atenuação (GL_CONSTANT_ATTENUATION, GL_LINEAR_ATTENUATION e GL_QUADRATIC_ATTENUATION). O modelo de tonalização utilizado foi a interpolação de luminância de Gourand (comando GL_SMOOTH). A tabela a seguir mostra os valores utilizados. |
Resultados |
O resultado final do aplicativo pode ser visto nas figuras abaixo, que mostram o logotipo de ângulos diferentes. Clique nas figuras para visualizá-las em um tamanho maior (e também com melhor qualidade). |
Última atualização: 01-Ago-2003
©2003 Célio Flores Siqueira Jr. | Home Projeto 1 Projeto 2 Projeto 3 |