Material de Auxílio Didático
EA978 - Sistemas de informações gráficas
Primeiro semestre de 2003
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)