desmontando
uma engine
de física
Adriano Melo
Engenhero de Software (INdT)
Mestrando em IA (UFPE)
Membro do CInLUG
http://adrianomelo.com
http://github.com/adrianomelo
the incredible circus!
nas lojas: meego, symbian, windows phone
em breve: facebook e android
o que é uma
engine de física?
(ou motor de física)
simulações de sistemas físicos como dinâmica de
corpos rígidos, de corpos
maciose de fluidos
representação
gráfica
representação
geomé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
positionold
positioncurrent
positionnew-g*t2
positioncurrent - positionold
trajetória livre
p1
p2
p2
p1
p0
trajetória com colisão
p0
p1
p2
p2 terá sua posição corrigida
para não entrar no outro objeto
detectando
colisões
e1
e2
e3
colidem!
(e2 e e3)
problema não trivial e de alto custo de processamento!
e4
volumes delimitadores
representação geométrica que otimiza a detecção de
colisões
http://en.wikipedia.org/wiki/Bounding_volume
alguns tipos..
e1
e2
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
e3
usando Oriented
Bounding Boxes
e1
e2
e3
v1
v2
v5
v6
v4
v3
resolução
de 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ções
usadas 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
d4
d5 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
obrigado
Adriano Melo
adrianomelo.com

FISL14 - Desmontando uma engine de física