Material de Auxílio Didático

EA978 - Sistemas de informações gráficas

Primeiro semestre de 2003

DCA/FEEC/Unicamp


2o Projeto

Atividade 3 - Processamento de Imagens

Objetivo: Deformar uma imagem da cena do primeiro projeto usando um algoritmo de warping.


Warping

Use o seguinte esqueleto de código para implementar essa atividade: warping.c

Os métodos de warping que podem ser implementados a partir do esqueleto de código dado seguem a estratégia de warping por malha. Inicialmente a cena do projeto anterior é desenhada no frame buffer, cujo conteúdo é então armazenado numa array para ser utilizada como mapa de textura numa malha retangular. A deformação é feita através do deslocamento dos vértices da malha retangular. Automaticamente o mecanismo de texturização do OpenGL gera a imagem resultante com interpolação bilinear da textura.

No código dado, coloque seu código anterior de geração e desenho da cena nas funções init(), display() e reshape() conforme indicam os comentários no código. O algoritmo de warping deve ser implementado na parte indicada em display(). Várias técnicas podem ser utilizadas nesse caso. As mais simples consistem em descrições de malhas retangulares com a aplicação da textura da cena. Algumas idéias são dadas a seguir:

Para mostrar a imagem sem qualquer tipo de deformação, construa apenas um quadrado do tamanho da janela de visualização e texturize-o com a textura da cena. O código deverá ficar assim:

glBegin(GL_QUADS);
  glTexCoord2f(0.0, 0.0); glVertex3f(0.0, 0.0, 0.0);
  glTexCoord2f(0.0, 1.0); glVertex3f(0.0, (float)winHeight, 0.0);
  glTexCoord2f(1.0, 1.0); glVertex3f((float)winWidth, (float)winHeight.0, 0.0);
  glTexCoord2f(1.0, 0.0); glVertex3f((float)winWidth, 0.0, 0.0);
glEnd();

Para adicionar pontos de controle, construa uma malha retangular com vários vértices internos, como mostra a imagem abaixo:


Malha de pontos de controle (4x4).

Para realizar a deformação, altere ligeiramente a posição dos vértices internos (usando glVertex*) mas sem alterar as respectivas coordenadas de texturas especificadas com glTexCoord*. Uma forma mais sofisticada de gerar essa malha de pontos de controle é através de uma superfície de Bézier como aquela que foi utilizada na modelagem do estofamento das cadeiras no primeiro projeto. Um exemplo de deformação das coordenadas usando essa estratégia sobre a malha de pontos descrita anteriormente é mostrado abaixo:


Malha de pontos de controle deformadas segundo o algortimo de curvas de Bézier.

Um exemplo de aplicação do algoritmo de warping na imagem da cena é mostrado abaixo:


Imagem da cena sendo deformada por um algoritmo simples de warping.


Autor: Harlen Costa Batagelo (harlen@dca.fee.unicamp.br)