Exercício
|
Dia de Entrega
|
Problemas |
Exercício 1 |
21/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.
- Quais são as vantagens e desvantagens desta representação?
- Implemente uma função equivalente à função glutWireSphere e
substitua-a no programa sphere.c/Sphere.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.
- Como as coordenadas dos vértices foram determinados para uma esfera de
raio R com m linhas longitudinais e n linhas
paralelas?
- 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.
- 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.
- 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.
- 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 |
27/08 |
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).
- Utilizar o displaylist para criar o modelo da esfera, como a
construção
do triângulo
no programa list.c/List.java
- 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)
- Posicionar os dois blobbymen numa cena, a seu critério.
|
Exercício 4 |
06/09 |
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
- em projeções paralelas ortogonais: em vistas, isométricas, dimétricas
e trimétricas. Especificar em cada imagem os fatores de proporção
utilizados.
- 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).
- 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.
- Posicionar a sua cena de tal forma que a câmera fique "dentro" de um blobbyman. Analisar a imagem obtida.
|
Exercício 5 |
20/09 |
Colorir a superfície dos blobbymen com uma cor.
- 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.
- Como se obtém os tons de cinza, variando de preto a branco, no
modelo RGB?
- Implementar o
algoritmo de conversão HSV--RGB.
- 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.
- Como se obtém os tons de cinza, variando de preto a branco, no
modelo RGB?
- 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 |
09/10 |
Iluminar a superfície dos blobbymen.
- Definir as cores para os blobbymen, a seu critério.
- 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?
- 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)
- 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.
- 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)
- Desenhar o boneco com o teste de profundidade desabilitado
(glDisable(GL_DEPTH_TEST)).
- 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.
- Compare as imagens obtidas em termos da profundidade dos pixels
visíveis.
|
Exercício 7 |
30/10 |
Texturizar o cenário de blobbymen.
- 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.
- 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.
- 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.)
- 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?
- 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 |
07/12 |
Aumentar o contraste da intensidade das duas das três imagens disponíveis
aqui com uso das funções
do MatLab.
- através do ajuste dos valores num intervalo específico
- 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 |
07/12 |
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
- operador Roberts
- operador Prewitt
- 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.
|