2º Exame de Animação e Visualização Tridimensional Licenciatura em Eng. Informática e de Computadores pólo Alameda Prof. responsável João Madeiras Pereira 3 de Fevereiro de 27 Nº Nome: Sala: Responda às questões seguintes justificando adequadamente todas as respostas. Se necessário utilize o verso da respectiva folha; O exame tem a duração de 1h3m com tolerância máxima de 3m 1. (1 valor) Os comandos OpenGL podem ser executados em modo imediato ou em modo retenção. Explique, no contexto do último modo, o conceito de lista de desenho (display-list) e as vantagens da sua utilização. Uma Lista de Desenho (Display List) é uma sequência não editável de comandos GL que têm que ser armazenados para posterior execução. Quando a lista é criada os comandos podem ser só armazenados ou também executados. Uma Lista de Desenho pode conter uma chamada a outra Lista de Desenho (hierarquia de listas). Comandos que não possam ser armazenados são executados imediatamente. Em termos de desempenho: Num ambiente distribuido, em que a aplicação se encontra numa máquina cliente e o processo OpenGL reside numa máquina-servidora, as display-lists são armazenadas no servidor, com consequente redução do tráfego da rede e aumento de desempenho. Em modo local, o mecanismo de display-list pode tornar-se mais eficiente dado que os comandos podem ser préprocessados e armazenados da forma mais compatível possível com as características do hardware gráfico de base (ex: cálculo dos coeficientes das matrizes de transformação a partir dos parâmetros de transformação). Em certas implementações de OpenGL mais sofisticadas, pode mesmo proceder-se à fusão de comandos adjacentes, como a concatenação de matrizes de transformação. 2. A API OpenGL disponibiliza funções para a criação de efeitos de nevoeiro. a) (1 valor) Explique como é realizado o efeito, identificando o mecanismo utilizado O efeito de fog é realizado em OpenGL misturando a cor do nevoeiro (formato RGBA) com a cor de cada pixel (ou fragmento) da imagem utilizando um função de mistura. Este mecanismo é de facto um blending similar ao processo utilizado para efectuar transparências. A única diferença é que a função de blend utiliza um factor que calculado em função da profundidade z de cada pixel. b) (1 valor) Indique como é possível configurar esse efeito em OpenGL e descreva os seus atributos. 1/6
Este efeito pode ser ligado ou desligado através da funções glenable e gldisable graças ao parâmetro GL_FOG. Existem várias configurações possíveis disponibilizadas através das funções glfog*(): O comportamento do factor de blend (linear, exponencial): glfogi(gl_fog_mode, GL_LINEAR GL_EXP GL_EXP2 ) A cor em formato RBGA: glfogfv(gl_fog_color, cor ) A densidade: glfogf(gl_fog_density, densidade ) A profundidade z de inicio: glfogf(gl_fog_start, z_inicio ) A profundidade z de fim: glfogf(gl_fog_end, z_fim ) c) (1 valor) O efeito de nevoeiro em OpenGl não possibilita realizar certas configurações. Identifique um tipo de nevoeiro que não consiga realizar usando as funções de OpenGL? Dado que a função de mistura utiliza exclusivamente a profundidade z (informação retida no z-buffer), não é possível criar um efeito de nevoeiro em que a densidade é variável na altura (ao longo do up da câmara). Este cenário é exequível utilizando um sistema de partículas para representar o nevoeiro em vez de recorrer a funções do OpenGL. 3. Na definição do processo de visualização de um programa em OpenGL, foram definidos os seguintes comandos: gluperspective(9.f, 1.33f, 25., 12.) para a definição da topologia do volume de visualização glulookat(2.,.,., 2.,., 1.,.77, -.77,.) para o posicionamento e orientação da Câmara Virtual Responda às seguintes questões: a) (1,5 valores) Calcule no referencial da Câmara Virtual, as coordenadas dos cantos da janela de visualização. Coordenadas dos 4 cantos são: (bottom,right,near); (bottom,left, near); (top,right,near); (top,left,near) gluperspective define um frustum simétrico, logo left=-right e bottom=-top O ângulo fornecido como primeiro argumento respeita a abertura vertical em graus. A relação existente entre a semi-altura e a distância à janela de visualização (definida pelo argumento near) é a tangente da semi-abertura vertical ou seja: top = tg (9/2) * 25 = 25 bottom= -top = -25; Dado que a relação de aspecto é 1,33 temos que right= 1,33*top = 33,25 e left = -right = -33,25 near = 25 b) (1 valor) No referencial do Mundo, calcule as coordenadas do canto superior esquerdo da janela de visualização Canto Superior Esquerdo (CSE) no referencial da câmara é: (-w/2, h/2, near) CSE no Mundo vale: VRP + near*n + (h/2)*v - (w/2)*u 2/6
Cálculo dos versores u, v e n no referencial do Mundo: VRP (1º argumento) é o (2 ) e o observador está olhar para (2 1) (2º argumento) logo VPN [ 1] => n [ 1] View-up [.77 -.77 ] (3º argumento) = v pois o vector já está normalizado referencial mão esquerda: u = n x v; então u=[.77.77 ] CSE = (2 ) + [ 1]*25 + [.77 -.77 ]*25 - [.77.77 ]*33,25 CSE = ( c) (1 valor) Indique matricialmente a transformação de translação realizada internamente pelo pipeline OpenGL de modo a posicionar os objectos da cena no referencial da câmara A matriz de translação é definida pelo vector de translacção [-VRPx VRPy VRPz]. Translacçã o 1 = 1 1 2 1 d) (1,5 valores) Calcule a matriz de rotação realizada internamente pelo pipeline OpenGL de modo a orientar os objectos da cena no referencial da câmara A matriz de rotação é dada em termos de linhas, respectivamente, pelas componentes dos versores u,v e -n. Logo:.77.77 Rotação =.77.77 1 1 4. (1,5 valores) Considere uma cena constituída por objectos tridimensionais opacos e transparentes, a qual será visualizada utilizando o mecanismo do Z-Buffer do OpenGL. Indique a ordem pela qual os objectos devem ser dados ao pipeline de visualização, quais os testes a serem aplicados sobre fragmentos, quais os buffers do OpenGL a serem utilizados bem como o seu modo de utilização. Justifique cuidadosamente a sua resposta. Dado existirem objectos não opacos, é necessário, a fim que o Z-buffer seja bem sucedido, que sejam desenhados em primeiro lugar os opacos e depois os translúcidos. Assim: Activa-se o teste da profundidade. Em seguida desenham-se os objectos opacos; para isso activa-se o teste alpha de modo a rejeitar os fragmentos com valor de alpha diferentes de 1. Depois desactiva-se a escrita no z-buffer (para evitar que em caso de um translúcido à frente de um objecto opaco altere o conteúdo do z-buffer removendo este último o que seria indesejável), activa-se o teste de blending (especificando a respectiva função de blending) e desenham-se os objectos transparentes (teste de alpha para rejeitar fragmentos com valores iguais a 1). Neste 3/6
desenho é fundamental que a ordem de rasterização se faça do objecto mais distante para o objecto mais próximo 5. (1 valor) Uma fonte de luz é posicionada na cena através do comando gllightfv(gl_light, light_position). Se alterar a posição do observador na cena através do comando glulookat(), qual a sequência de comandos na rotina de desenho de modo a que a fonte de luz acompanhe sempre esse movimento (efeito capacete do mineiro)? gllightfv(gl_light, light_position) glulookat(...); drawobjects(); Isto significa que a transformação de visualização afecta apenas a posição os objectos de desenho e não a fonte de luz. Assim, ao movimentar-se a câmara, a posição dos objectos é alterada mas a fonte de luz não: esta mantém sempre a mesma posição relativa à câmara. Assim observar-se-á, que à medida que a câmara se movimenta, a fonte de luz acompanha sempre do mesmo modo esse movimento 6. Considere a técnica de mapeamento de texturas conhecida como Bump Mapping a) (1 valor) Descreva essa técnica. Em modelos de iluminação local o sombreamento de uma quadrículo depende da normal à superfície nesse ponto. Se alterarmos essa normal obtemos sombreamento mais escuros ou mais claros que corresponderiam a termos uma superfície com relevos ou com concavidades. b) (,5 valor) O que acontece ao observar-se a superfície do objecto segundo um ângulo rasante? Uma vez que a geometria da superfície do objecto não é alterada mas tão só as normais a cada quadrícula os relevos e as concavidades deixam de ser visualizadas. Isto porque o ângulo formado entre a direcção de visualização e a normal à face é de 9º ou seja, o produto interno presente no cálculo do sombreamento é nulo. 7. (1,5 valores) Suponha que especificou uma técnica de filtragem que produza a melhor qualidade de visualização no código de mapeamento de uma textura do logo do IST, com uma resolução de 256x128, num rectângulo com uma dimensão de 32x4 quadrículas. Indique o nome dessa técnica, justifique-a e descreva-a detalhadamente no caso prático em questão. Em termos de mapeamento de texturas estamos perante um problema de minification. A técnica de melhor qualidade implica invocar o filtro de mipmampping. Este método caracteriza-se pela construção de níveis de mapas de textura cuja resolução é progressivamente ¼ (1/2 em cada direcção) da resolução anterior até se atingir a resolução 1x1. Neste caso ter-se-ia em termos de memória os seguintes mapas de textura: 256x128 (nível ), 128x64 (nível 1); 64x32 (nível 2); 32x16 (nível 3); 16x8 (nível 4); 8x4 (nível 5); 4x2 (nível 6), 2x1 (nível 7) e 1x1 (nível 8). O mecanismo do OpenGL que realiza o acesso ao mapa de textura correcto, baseia-se no cálculo do ρ que vale o máximo de (256/32; 128/4), ou seja 32. Significa deste modo que λ =log 2 ρ =4. Dado que se pretende a melhor visualização, usar-se-ia o GL_LINEAR_MIPMAP_LINEAR como opção de filtro o que implicava o acesso a dois mapas de memória (um deles seria o nível 4/6
5 calculado anteriormente); e o cálculo da cor final do texel implicaria uma interpolação linear dos valores de textura providenciados pelos mapas de textura mencionados 8. (1,5 valores) Considere uma curva B-Spline não-racional, cúbica e uniforme com sete pontos de controlo [p ;p 1 ;...;p 6 ]. Calcule o número de segmentos de curva que compõem o segmento, a dimensão do vector de nós de ligação bem como os valores extremos do parâmetro u entre os quais se encontra definida a referida curva. Represente a configuração do vector de nós. Justifique. K=4, 7 pts de controlo logo m=6. Assim: Numero de funções de base é 7 pois é igual ao número de pts de controlo; nº de segmentos de curva é m-k+2=4; K-1 u m+1, ou seja 3 u 7 vector com m+k+1=11 nós e configuração [ 1 2 3 4 5 6 7 8 9 1] visto ser uniforme 9. Considere ainda uma outra curva B-Spline não-racional, cúbica com sete pontos de controlo e cuja representação gráfica está ilustrada na figura abaixo. p 1 p 2 p 6 p 3 p p 4 p 5 a) (1,5 valores) Será esta uma curva uniforme? Justifique. Na sua justificação determine o vector de nós que caracteriza esta curva bem como o número de segmentos. Não. A curva é não-uniforme visto que a B-Spline interpola os pts de controlo extremos, P e P6, e interpola o ponto de controlo intermédio P3. Deste modo, a multiplicidade a ser aplicada aos nós é de 4 para os nós extremos e de 3 para o nó intermédio, resultando o seguinte vector de nós [ 1 1 1 2 2 2 2]. Como se pode constatar deste vector de nós só existem 2 segmentos, pois quando dois nós consecutivos são iguais, o segmento de curva definido por esses dois nós se anula. b) (1 valor) Esta curva B-Spline pode ser caracterizada como uma junção de duas curvas cúbicas de Bézier. Justifique esta afirmação. É verdadeira a afirmação. Cada curva de Bézier cúbica é definida por 4 pts de controlo e interpola os pts extremos, o que acontece neste caso. Cada uma das curvas evolui dentro do respectivo polígono de controlo, sendo a derivada em cada um dos pts extremos influenciada pelos pts de controlo intermédios Por outro lado, tem-se a junção de 2 curvas de Bézier, pois os pts de controlo P2, P3 e P4 são colineares. 5/6
1. (1,5 valores) Considere uma esfera que se encontra acima de um plano de chão espelhado em y=. Como implementaria a reflexão nesse plano? Não se esqueça de referir como evitar a visualização da geometria reflectida por detrás do espelho. Reflexão: escala [1-1 1] pois o chão está em y= Para impedir a visualização da geometria reflectida por detrás do espelho, ou seja na prática restringir o desenho da geometria reflectida à superficie do chão, era necessário usar o mecanismo de estêncil. Os alunos devem descrever com mais detalhe estes dois aspectos. ATENÇÃO: A resposta invocando um plano de recorte em y= está errada, pois isso significava que a geometria reflectida, que está para além do plano y=, nunca seria desenhada 6/6