licenciatura em engenharia informática e de computadores ... · leic cg 1º teste 26/10/2013...
Post on 19-Nov-2018
216 Views
Preview:
TRANSCRIPT
Licenciatura em Engenharia Informática e de Computadores
Computação Gráfica
Animação e Colisões
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG1º Teste 26/10/2013Considere a cena 2D abaixo representada, onde a posição e direcção de um veículo são dadas pelo ponto E e pelo vector DOF, respectivamente.
a) Apresente a matriz de transformação composta 𝑀"#→%&', que realiza a mudança do referencial do veículo (UV) para o sistema de coordenadas do mundo.
b) Indique as coordenadas do pisca direito, 𝑃%&', no referencial do mundo.
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
WCS
DOF
UEV
P
𝐷𝑂𝐹%&' = 1 1 .
𝐸%&' = 2 2 .
𝑃"# = 2 4 .
LEIC CG
𝑀"#→%&' = 𝑇 2, 2 4 𝑅 −45
=1 0 20 1 20 0 1
4cos −45 − sin −45 0sin −45 cos −45 0
0 0 1
=
2�2?
2�2? 2
− 2�2?
2�2? 2
0 0 1
?
1º Teste 26/10/2013
a) Apresente a matriz de transformação composta 𝑀"#→%&', que realiza a mudança do referencial do veículo (UV) para o sistema de coordenadas do mundo.
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
WCS
DOF
UEV
P
𝐷𝑂𝐹%&' = 1 1 .
𝐸%&' = 2 2 .
𝑃"# = 2 4 .
LEIC CG
𝑃%&' =
2�2?
2�2? 2
− 2�2?
2�2? 2
0 0 1
4241=
2� + 2 2� + 2− 2� + 2 2� + 2
1=
3 2� + 22� + 21?
1º Teste 26/10/2013
b) Indique as coordenadas do pisca direito, 𝑃%&', no referencial do mundo.
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
WCS
DOF
UEV
P
𝐷𝑂𝐹%&' = 1 1 .
𝐸%&' = 2 2 .
𝑃"# = 2 4 .
LEICCG
AnimaçãoComputação Gráfica
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG
Animação
Tipos de Animação
Animação Tradicional
Claymation
Animação por key-frame
Animação por Interpolação Paramétrica
Animação Procedimental
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
CG
I
LEIC CGAnimação “tradicional”
LEIC CGClaymation
LEIC CGCGI
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG
Animação
Definição
Modificação da cena ao longo do tempo
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG
Animação
Definição
Modificação da cena ao longo do tempo
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
Objectos Câmaras Luzes
LEIC CG
Animação
Características
Modificação da cena ao longo do tempo
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
Objectos Câmaras Luzes
PosiçãoOrientaçãoDimensãoFormaCor
LEIC CG
Animação
Características
Modificação da cena ao longo do tempo
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
Objectos Câmaras Luzes
PosiçãoOrientaçãoFOV
PosiçãoOrientaçãoDimensãoFormaCor
LEIC CG
Animação
Características
Modificação da cena ao longo do tempo
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
Objectos Câmaras LuzesPosiçãoDireçãoIntensidadeCut-off
PosiçãoOrientaçãoFOV
PosiçãoOrientaçãoDimensãoFormaCor
LEIC CG
Animação
por Key-Frames
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
Apenas algumas frames especificadas
Sistema gera frames intermédias automaticamente
LEIC CG
Animação
Interpolação ParamétricaSéries de pares (tempo, parâmetros)
Interpola-se para determinar intermédios
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG
Animação
Procedimental
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
Baseada nas leis da física
Sistema gera frames a partir da aplicação de fórmulase.g. x = x0 + v0 t + ½ at2
LEIC CG
Animação Procedimental
Implementação Exemplo
Movimento de um carro ao longo de xxcom velocidade constante
now = getNow()delta = now-tx += v * deltat = now
limpa bufferdesenha cena
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
Update
Display
LEICCG
ColisõesComputação Gráfica
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGTratamento de Colisões
Detecção de Colisão Determinação da Colisão
Reacção à Colisão
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGTratamento de Colisões
Detecção de Colisão Determinação da Colisão
Reacção à Colisão
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGTratamento de Colisões
Detecção de Colisão Determinação da Colisão
Reacção à Colisão
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGTratamento de Colisões
Detecção de Colisão Determinação da Colisão
Reacção à Colisão
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGTratamento de Colisões
Detecção de Colisão Determinação da Colisão
Reacção à Colisão
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGTratamento de Colisões
Detecção de Colisão Determinação da Colisão
Reacção à Colisão
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGTratamento de Colisões
Detecção de Colisão Determinação da Colisão
Reacção à Colisão
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGDetecção de Colisões
Existem diversas bibliotecas que fornecem detecção de colisões
Bullet Physics LibraryV-ClipODE
ColDetHavocetc …
Não são necessárias em CG!Vamos implementar apenas colisões simples
baseadas em AABB e esferas
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGOnde começamos?� Primeiro têm de detectar collisões
§ Em intervalos de tempo discretos:• Em cada frame verificam se objectos se intersectam (overlapping)
� Testar se os volumes exactos dos modelo se intersectam é muito lento
� Usam-se volumes envolventes (bounding volumes)§ Para aproximar o volume real dos objectos
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGVolumes envolventes?
� Devem ser convexos§ esferas, cilindros, paralelepípedos, poliedros, etc…§ Esferas e paralelepípedos (boxes) são as formas mais usadas
� Para boxes, a intersecção começa com testes de ponto dentro/fora (point inside-outside tests)
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGOriented Bounding Boxes� Definidas por:
§ Centróide, 3 eixos normalizados, 3 meios-comprimentos
� Pode ser definido por 8 pontos§ Mais eficiente
� Eixos são as 3 normais das faces
� Melhor envolvência que esferas ou AABB’s§ Mas teste point inside/ouside mais complicado de calcular
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGAxis-Aligned Bounding Boxes: AABBs
� Especificadas por dois pontos:
� Normais simples de calcular
� Teste de point-inside muito simples:
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGAxis-Aligned Bounding Boxes
Especificadas por dois pontos:
Teste “point inside” muito simples:
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG
Detecção de Colisõesentre AABBs
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
(𝐴. 𝑥GHI, 𝐴. 𝑦GHI, 𝐴. 𝑧GHI)
(𝐵. 𝑥GMN, 𝐵. 𝑦GMN, 𝐵. 𝑧GMN)
𝐴. 𝑥GHI > 𝐵. 𝑥GMN𝐴. 𝑥GMN < 𝐵. 𝑥GHI𝐴. 𝑦GHI > 𝐵. 𝑦GMN𝐴. 𝑦GMN < 𝐵. 𝑦GHI𝐴. 𝑧GHI > 𝐵. 𝑧GMN𝐴. 𝑧GMN < 𝐵. 𝑧GHI
LEIC CGProblemas com AABB’s
� Não muito eficientes
� Rotação complicada§ Tem de se rodar modelo e reculcular AABB § Não é eficiente
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG
Detecção de Colisõesentre Esferas
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
d drA
rArB
rB
𝑟R + 𝑟S ≥ 𝑑Colide se:
LEIC CG
Detecção de Colisõesentre Esferas
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
𝑑 = 𝑐RI − 𝑐SI W + 𝑐RI − 𝑐SI W�
𝑟R + 𝑟S ≥ 𝑑Colide se:
Não é necessário calcular a raiz quadrada
LEIC CG
Detecção de Colisõesentre Esferas
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
d drA
rArB
rB
𝑟R + 𝑟S W ≥ 𝑐RI − 𝑐SI W + 𝑐RI − 𝑐SI WColide se:
LEIC CG
Detecção de Colisõesentre Esferas
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
d drA
rArB
rB
Vale sempre a pena testar com esferas antes fazer testes mais complexos
LEIC CGDeterminar Colisões
Detectada colisão entre objectos
Determinar colisão
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGDeterminar Colisão
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
Calcular nova posição
Manter nova posição
Validar nova posição
Calcular posição válida
LEIC CG
Exemplo
Colisão com limites verticais
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
Post-Δt
PostPost
LEIC CG
Exemplo
Colisão com limites verticais
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
Calcular nova posição
Manter nova posição
Validar nova posição
Calcular posição válida
LEIC CG
Exemplo
Colisão com limites verticaisupdate( delta_time )(...)
compute_position( pos, delta_time ) → tentative_poscheck_limits( pos, tentative_pos )→current_pos(...)
compute_position(pos, delta_time )pos+speed*delta_time → tentative_posreturn tentative_pos
check_limits(previous_pos )if (pos.x > limits.max_x)
compute_intersection (limits, previous_pos, tentative_pos) →current_pos(...)return current_pos
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG
Exemplo
Colisão com limites verticaisupdate( delta_time )(...)
compute_position( pos, delta_time ) → tentative_poscheck_limits( pos, tentative_pos )→current_pos(...)
compute_position(pos, delta_time )pos+speed*delta_time → tentative_posreturn tentative_pos
check_limits(previous_pos )if (pos.x > limits.max_x)
compute_intersection (limits, previous_pos, tentative_pos) →current_pos(...)return current_pos
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG
Exemplo
Colisão com limites verticaisupdate( delta_time )(...)
compute_position( pos, delta_time ) → tentative_poscheck_limits( pos, tentative_pos )→current_pos(...)
compute_position(pos, delta_time )pos+speed*delta_time → tentative_posreturn tentative_pos
check_limits(previous_pos )if (pos.x > limits.max_x)
compute_intersection (limits, previous_pos, tentative_pos) →current_pos(...)return current_pos
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG
Exemplo
Colisão com limites verticaisupdate( delta_time )(...)
compute_position( pos, delta_time ) → tentative_poscheck_limits( pos, tentative_pos )→current_pos(...)
compute_position(pos, delta_time )pos+speed*delta_time → tentative_posreturn tentative_pos
check_limits(previous_pos, tentative_pos )if (pos.x > limits.max_x)
compute_intersection (limits, previous_pos, tentative_pos) →current_pos(...)return current_pos
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG
Exemplo
Intersecção com limites verticais
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
Post-Δt Post
Post.x=limits.x
Post-Δt=p(0)
Post=p(1)
Post=p(i)
LEIC CGPróxima aula
CâmaraVirtual
Matrizes de Visualização e Projecção
© 2016 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
top related