FISL14 - Desmontando uma engine de física

Post on 27-Jun-2015

301 views 1 download

Transcript of FISL14 - Desmontando uma engine de física

desmontandouma engine

de física

Adriano MeloEngenhero de Software (INdT)

Mestrando em IA (UFPE)Membro do CInLUG

http://adrianomelo.comhttp://github.com/adrianomelo

the incredible circus!

nas lojas: meego, symbian, windows phoneem breve: facebook e android

o que é umaengine de física?

(ou motor de física)

simulações de sistemas físicos como dinâmica de

corpos rígidos, de corpos macios e de f luidos

representaçãográfica

representaçãogeométrica

motor de físicaframework gráfico

como integrar a representação geométrica

com a repre. gráfica?

main loop•alimenta o sistema com eventos, atualiza a

simulação física e desenha os elementos na tela

*16ms = 1 seg / 60 fps

exemplo de main loop #1

*16ms = 1 seg / 60 fpshttp://entropyinteractive.com/2011/02/game-engine-design-the-game-loop/

exemplo de main loop #2

movendo objetos

•Verlet integration•Euler method•Runge-kutta methods•Symplectic integrator

métodos numéricos

https://en.wikipedia.org/wiki/Numerical_ordinary_differential_equations

position verlet - equações

Positionnew = Positioncurrent

+ Acceleration * Timestep2+ (Positioncurrent - Positionold)

Positionold = Positioncurrent

http://www.pagines.ma1.upc.edu/~susin/files/AdvancedCharacterPhysics.pdf

positionoldpositioncurrent

positionnew-g*t2

positioncurrent - positionold

trajetória livre

p1

p2

p2

p1p0

trajetória com colisãop0 p1

p2

p2 terá sua posição corrigida para não entrar no outro objeto

detectandocolisões

e1e2

e3

colidem!(e2 e e3)

problema não trivial e de alto custo de processamento!

e4

volumes delimitadoresrepresentação geométrica que otimiza a detecção de

colisões

http://en.wikipedia.org/wiki/Bounding_volume

alguns tipos..

e1e2

e3

e4

usando AABBs como volumes delimitadores (bounding volumes)

a checagem de colisão seria feita apenas entre e2 e e3

teorema dos eixos de separação

dois objetos convexos não se intersectam se e somente se existe uma linha (chamada de eixo) em que as projeções

dos objetos não se cruzam.

http://en.wikipedia.org/wiki/Separating_axis_theorem

relembrando o que é uma projeção...

ponto P

reta R

projeção de P em R

http://en.wikipedia.org/wiki/Vector_projection

25º

70º

quais eixos testar?

e1

e2

e3usando OrientedBounding Boxes

e1

e2

e3

v1

v2 v5

v6

v4

v3

resoluçãode colisões

informações para a resolução

•normal do contato•tamanho da interseção•a depender da engine:•ponto do contato•vértice ou aresta envolvida na colisão•formas dos objetos colididos•...

restriçõesusadas para remover liberdades entre corpos

restrição de distância

longe..perto..

x0

x1

|x1 - x0| = d

restrição de angulo

x0

x1 x2

(x2 − x0) ⋅ (x1 − x0) < α

uma engine simples...

•verlet integration

•modelar corpos rígidos como partículas com restrições

•colisões usando as informações do teorema dos eixos de separação

•constraint solver (resolve o comportamento das restrições)

d1

d2

d3

d4d5 d6

•Advanded Character Physics•Thomas Jakobsen

•Real-time collision detection•Christer Ericson

referências

palestras relacionadas

•Arquitetura para jogos multi-plataforma•Sala P09 - quinta das 10 às 11 horas

•Workshop de Jogos em HTML5•Sala 714 - quinta das 14 às 17 horas

obrigadoAdriano Melo

adrianomelo.com