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?
0º
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
https://github.com/subprotocol/verlet-js
•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