licenciatura em engenharia informática e de computadores ... · leic cg 1º teste 26/10/2013...

Post on 19-Nov-2018

217 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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