EA978 - Sistemas de Informações Gráficas

Atividades Práticas (Opcionais - Bônus de 1.0 ponto)

Segundo Semestre de 2007


Todos os exercícios práticos utilizarão a interface OpenGL. Recomendamos o site para acessar uma variedade de tutoriais. Especificamente, uma introdução básica aos comandos de OpenGL é dada no tutorial de Nate Robins.
Exercício
Dia de Entrega
Problemas
Exercício 1 22/08 Em Computação Gráfica, modelos 3D são usualmente aproximados por malhas triangulares ou poligonais definidas por uma sequência de vértices.
  1. Quais são as vantagens e desvantagens desta representação?
  2. Implemente uma função equivalente à  função glutWireSphere e substitua-a no programa sphere.c/Sphere.java (como no programa demo_cube.c/Demo_cube.java ). Observe que a esfera está centrada na origem e que você pode controlar o modo de desenho das facetas poligonais através da função glPolygonMode.
  3. Como as coordenadas dos vértices foram determinados para uma esfera de raio R com m linhas longitudinais e n linhas paralelas?
  4. Quantas vezes cada vértice foi "desenhado"? É possível desenhar somente cada vértice uma única vez? Justifique.
Exercício 2 Alterar a forma da esfera que você modelou.
  1. Aplicar escalas diferenciadas nas três direções (glScale): (0.275,0.152,0.153),(0.45,0.153,0.12),(0.2,0.23,0.3), (0.306,0.21,0.5). Qual é a figura geométrica resultante? Justifique.
  2. Escolher uma das figuras resultantes e aplicar sobre ela rotações em torno do eixo x, y e z de 30o, acumulativamente (glRotate). Registre as formas que você visualizou.
  3. Analisar o efeito visual de deslocamento relativo (shearing) sobre a esfera na direção de x com sh13 = 0.5, na direção de y com sh23 = 1.5, e o mesmo montante, porém com sinal trocado, em ambas as direções. Observe que para aplicar a transformação de shearing, deve-se utilizar a função glMultMatrix. (Ver as transformações utilizadas no programa transf_cube.c/Transf_cube.java)
Exercício 3 03/09 Construir dois blobbymen, a partir da esfera, conforme a descrição apresentada no artigo "Nested Transformations and Blobby Man", de Jim Blinn, IEEE Trans. Graphics Oct. 1987, 59-65 (disponível na Xerox/FEEC).
  1. Utilizar o displaylist para criar o modelo da esfera, como a construção do triângulo no programa list.c/List.java
  2. Utilizar os elipsóides que você modelou e posicioná-los devidamente para formar um blobbyman. Qual é a sequência mais apropriada: mudança de escala -> rotaço -> translação ou translação -> mudança de escala -> rotaço? Ou existe uma outra sequência melhor? Justificar a sua solução. (Ver um exemplo de composição de cena implementada no programa boneco.c/Boneco.java)
  3. Posicionar os dois blobbymen numa cena, a seu critério.
Exercício 4 - Gerar diferentes imagens da cena constituída de dois blobbymen. Para facilitar a percepção da projeção, crie uma caixa envoltória (bounding box) em torno dos blobbymen
  1. em projeções paralelas ortogonais: em vistas, isométricas, dimétricas e trimétricas. Especificar em cada imagem os fatores de proporção utilizados.
  2. em projeções paralelas oblíquas: cavalier, cabinet e um com ângulo de inciência menor que 45o. Especificar em cada imagem os fatores de proporção. Vale observar que em OpenGL não é implementada a transformação SH. Ela deve ser provida pelo aplicativo (Ver um exemplo no programa projecao.c/Projecao.java).
  3. em projeções perspectivas: de um ponto de fuga, de dois pontos de fuga e de três ponts de fuga. Especificar as posições dos pontos de fuga. Vale observar que em OpenGL o eixo óptico é sempre coincidente com o eixo z; portanto só há um ponto de fuga. Para ter mais de um ponto de fuga, transformações adicionais devem ser providas pelo aplicativo.
  4. Posicionar a sua cena de tal forma que a câmera fique "dentro" de um blobbyman. Analisar a imagem obtida.
Exercício 5 12/09 Colorir a superfície dos blobbymen com uma cor.
  1. Programar as teclas "R", "G" e "B" para alterar gradativamente as componentes da cor R, G e B, respectivamente. Qual é o menor passo para o qual a alteração das cores é perceptível? Calibrar o passo da mudança dos componentes com este menor passo.
  2. Como se obtém os tons de cinza, variando de preto a branco, no modelo RGB?
  3. Implementar o algoritmo de conversão HSV--RGB.
  4. Programar as teclas "H", "S" e "V" para alterar gradativamente as componentes da cor H, S e V do modelo de cor HSV. Qual é o menor passo para o qual a alteração das cores é perceptível? Calibrar o passo da mudança dos componentes com este menor passo.
  5. Como se obtém os tons de cinza, variando de preto a branco, no modelo RGB?
  6. Comparar os modelos de cor RGB e HSV, em termos da interpolação linear entre duas cores e em termos de intuitividade do modelo.
Exercício 6 15/10 Iluminar a superfície dos blobbymen.
  1. Definir as cores para os blobbymen, a seu critério.
  2. Inserir os recursos de iluminação no seu programa, habilitando o modelo de iluminação (glEnable(GL_LIGHTING)) e fontes luminosas (glEnable(GL_LIGHTi)), onde i=0,1,2,3,4,5,6 ou 7. Definir no mínimo duas fontes luminosas, conforme o programa light.c/Light.java. Iluminar os blobbymen com a luz branca. Qual é a cor visualizada?
  3. Substituir a cor "pintada" da superfície dos blobbymen pelos parâmetros de material, de tal forma que visualmente a cor final fique igual à cor "pintada". (Ver um exemplo de atribuição de parâmetros do material no programa material.c/Material.java)
  4. Comparar o controle do efeito de especularidade nas imagens de cores "pintadas" e nas de cores resultantes da interação entre o material e a luz incidente.
  5. Sempre é possível obter imagens com pontos especulares ao incidir uma luz sobre uma superfície altamente especular utilizando o modelo de tonalização disponível em OpenGL? Justificar.
Visibilidade: O algoritmo de visibilidade implementado em OpenGL é o algoritmo z-buffer. Podemos iniciar o z-buffer com valores diferentes de 1.0, com os comandos glClearDepth e glClear(GL_DEPTH_BUFFER_BIT)
  1. Desenhar o boneco com o teste de profundidade desabilitado (glDisable(GL_DEPTH_TEST)).
  2. Desenhar o boneco, com o teste de profundidade habilitado (glEnable(GL_DEPTH_TEST)), para todos os possíveis modos de teste de profundidade: GL_NEVER, GL_ALWAYS, GL_LESS, GL_LEQUAL, GL_EQUAL, GL_GEQUAL, GL_GREATER, GL_NOTEQUAL. Você pode selecionar um destes modos com o comando glDepthFunc.
  3. Compare as imagens obtidas em termos da profundidade dos pixels visíveis.
Exercício 7 05/11 Texturizar o cenário de blobbymen.
  1. Adicionar a operação de diferença absoluta e as operaçõe lógicas NAND, NOR, NXOR ao programa op_images.c/Op_images.java.
  2. Observar que no programa op_images.c/Op_images.java foi implementada uma função de warping com uso das funções de textura de OpenGL. Explicar a relação entre warping e texturização. Implementar mais uma função de warping, a sua escolha (consultar, por exemplo, as funções aqui ou aqui.
  3. O que você entende por filtragem mipmap? Substituir a função gluBuild2DMipmaps no programa op_images.c/Op_images.java por glTexTexImage2D. Quais foram as diferenças observadas? (Observação: glTexTexImage2D só aceita imagens com dimensões em potência de 2. Pode utilizar gluScaleImage para redimensionar as imagens.)
  4. Texturizar a superfície dos blobbymen e o cenário do fundo a seu critério. O boneco de cubos é texturizado pelo programa tex_boneco.c/Tex_boneco.java. O que aconteceu com os pontos especulares?
  5. Rotacionar a imagem da cena de blobbymen texturizada por um ângulo de 45o.
Quantização: Comparar as imagens obtidas com glEnable(GL_DITHER) e com glDisable(GL_DITHER). Houve diferenças? Por quê?
Exercício 8 14/11 Aumentar o contraste da intensidade das duas das três imagens disponíveis aqui com uso das funções do MatLab.
  1. através do ajuste dos valores num intervalo específico
  2. através da equalização do histograma
Comparar as imagens em nívies de cinza resultantes, comentando as principais caracterísitcas das duas técnicas.
Exercício 9 28/11 Detecção da borda das quatro imagens em níveis de cinza geradas no Exercício 8, duas de cada imagem original, com uso das funções do MatLab
  1. operador Roberts
  2. operador Prewitt
  3. operador Sobel
As técnicas de contraste influenciaram nos resultados de detecção da borda? Qual é a influência do parâmetro thresh? E o parâmetro direction? Comparar os resultados obtidos com os três operadores.

Voltar para a página do curso.