Computação Gráfica I
Exercícios para P2 - 2011/1
Processo
de Visualização 3D
- Imagine os cubos A
(0,0,0)-(10,10,10) e B (-10,0,0)-(0,10,10). Se um observador está no
centro do cubo A, olhando para o centro do cubo B, qual das imagens
abaixo pode representar sua visão APENAS das faces laterais do cubo B ?
Não é necessário mostrar os cálculos da obtenção da projeção.
- Quais os parâmetros da função gluLookAt
para desenhar a projeção lateral direita de um cubo centrado na
coordenada (0,0,0) ? Considere que o eixo Z cresce para fora da tela.
- Crie a projeção perspectiva do
cubo(0,0,0)-(10,10,10), estando o observador na posição (0,5,0) e o
alvo na posição (0,5,5). Mostre os cálculos. Considere o ângulo de
visão igual a 90 graus.
- Crie a projeção perspectiva do
cubo(0,0,0)-(10,10,10), estando o observador na posição (5,10,0) e o
alvo na posição (5,0,0). Mostre os cálculos. Considere o ângulo de
visão igual a 90 graus.
- Considere o seguinte programa em OpenGL:
glTranslatef(-5.00, 10.00, 0.00);
glutSolidCube(3);
glTranslatef(5.00, 10.00, 0.00);
glutSolidCube(3);
Desenhe as vistas ortográficas(frontal, lateral direita e superior) da cena representada por este programa.
- Imagine o
cubo(0,0,0)-(10,10,10). Se um observador está olhando para a posição
(0,5,10) e está vendo uma imagem conforme o desenho abaixo, qual será
sua visão se passar a olhar para (10,5,0) ?
- Gere a projeção perspectiva do cubo desenhado pelo trecho de programa a seguir. Considere que o angulo de visão é de 90 graus.
gluLookAt(0,0,-10,0,0,0, 0,1,0);
glTranslatef(5,0,0);
glutSolidCube(10);
Curvas Paramétricas
- Crie
4 pontos e trace uma curva de Catmull-Rom que passe por eles. Calcule
as coordenadas do vetores necessários para o traçado. Cuide a
nomenclatura e as coordenadas dos vetores e dos pontos.
- Defina uma estrutura de dados capaz de guardar os pontos de controle de uma seqüência de curvas Bèzier.
- Explique a criação de uma curva Bèzier por 3 pontos a partir da equação paramétrica da reta
- Como
se pode garantir continuidade de derivada entre dois segmentos de curva
Bèzier. Mostre com desenhos e apresente as fórmulas para o cálculo dos
vetores. Tome muito cuidado com a nomenclatura dos vetores e dos
pontos. Crie uma rotina para gerar o(s) dados(s) necessários a
manutenção da continuidade.
- Imagine um sistema em que usuário clique 4 pontos
- Após
a marcação destes pontos, o programa ativa uma rotina de traçado de
curvas Hermite chamada TracaHermite(PA, PB, VA, VB), que deve receber o
pontos inicial e final da curva (PA e PB) e os vetores nestes pontos
(VA e VB).
- Se
os pontos clicados pelo usuário fossem P1, P2, P3 e P4, como poderia
ser a chamada da rotina de traçado da Hermite. Faça o código necessário
à chamada.
- Trace as curvas Bèzier a partir dos pontos a abaixo.
class Ponto{
public:
float X, Y;
};
class Curva{
public:
Ponto p[4];
} ;
Curva Curvas[10];
- Trace a Curva de Catmull-Rom a partir dos pontos a abaixo.
Iluminação
- Qual a diferença entre os modelos de Sombreameto e de Reflexão ?
-
Explique como funcionam os algoritmos de cálculo de cor de um ponto no espaço.
- Mostre como funciona o modelo de
iluminação difusa. Apresente (com os cálculos) um exemplo que contenha
pelo menos 2 pontos com luminosidades diferentes.
- Imagine um cubo (0,0,0)-(10,10,10), uma luz pontual colocada em (15, 5, 15) e os pontos: A:(10, 5, 5); B:(10, 5, 7.5). Calcule a intensidade da iluminação difusa nos pontos A e B.
- Segundo os
modelo de iluminação difusa quais as faces do
desenho abaixo são mais claras e quais são mais escuras?(Considere a
cena vista de cima). Enumere as faces em ordem crescente de
luminosidade. Liste as faces que não são vistas pela luz.
- Faça o mesmo para o modelo de iluminação ambiente
- Faça o mesmo para o modelo de iluminação especular
Remoção de Elementos Ocultos
- Descreva como funciona o algortimo de remoção de faces traseiras e a que tipo de objeto se aplica.
- Mostre, com cálculos, se as
faces frontal e lateral direita do cubo (0,0,0)-(10,10,10) são visíveis
por um observador colocado nas seguintes posições:
(0,5,15)
(15,15,5)
(5,15,5)
- Mostre o
funcionamento do algoritmo do Zbuffer nas faces frontais dos dois cubos
gerados pelo trecho de programa abaixo. Desenhe um quadriculado de 20x20 apra apresnetar os resultados.
gluLookAt(0,0,-10,0,0,0, 0,1,0);
glTranslatef(5,0,0);
glutSolidCube(10);
glTranslate(2,0,5); <<< atenção: esta transformação é cumulativa em relação à anterior!!
glutSolidCube(10);
FIM.