Beruflich Dokumente
Kultur Dokumente
Computao Grca 2D
Introduo
Biblioteca
2D
Objetos
no
deformveis
Mdulos
Common
Collison
Dynamics
No
faz
rendering
Computao
Grca
2D
2
22/06/11
Unidades
Metros
Kilogramas
Segundos
Computao Grca 2D
Unidades
Converses
entre
Pixels
e
Metros
A
Box2D
funciona
bem
em
universos
de
1
a
10
metros
Pode
ser
necessrio
converter
as
coordenadas
da
tela
para
funcionar
com
a
Box2D
Computao Grca 2D
22/06/11
Mundo
Ambiente
onde
ocorre
a
simulao
b2World
*world;
b2Vec2
gravity(0.0f,
-10.0f);
bool
doSleep
=
true;
//objetos
dormir
?
world
=
new
b2World(gravity,
doSleep);
Computao Grca 2D
Mundo
Formado
por
CORPOS
So
objetos
que
parecipam
da
simulao
Componentes
Atributos
Fixtures
Computao Grca 2D
22/06/11
CORPOS
Criao
de
Corpo
//
Cria
as
denicoes
do
CORPO.
b2BodyDef
bodyDef;
bodyDef.posieon.Set(posx,
posy);
bodyDef.type
=
b2_dynamicBody
;
//
Cria
um
novo
corpo
a
parer
da
informaes
da
bodyDef
//
Nunca
use
NEW
ou
MALLOC
para
criar
um
corpo
b2Body*
body
=
world->CreateBody(&bodyDef);
Computao
Grca
2D
7
Computao
Grca
2D
8
22/06/11
Computao
Grca
2D
9
Computao
Grca
2D
10
22/06/11
Computao Grca 2D
11
CORPOS
Atributos
struct
b2BodyDef::Posieon
Dene
a
posio
do
corpo.
Deve
ser
usado
antes
de
criar
o
objeto
struct
b2BodyDef::angle
Dene
a
orientao
do
corpo.
Em
radianos
Computao Grca 2D
12
22/06/11
CORPOS
Atributos
struct
b2BodyDef::linearDamping
Reduz
a
velocidade
do
objetos
durante
uma
translao.
No
depende
de
frico.
Usar
entre
0
e
0.1.
struct
b2BodyDef::angularDamping
Reduz
a
velocidade
do
objetos
durante
uma
rotao.
No
depende
de
frico.
Usar
entre
0
e
0.1.
Computao Grca 2D
13
CORPOS
Atributos
true/false
Dene
manualmente
como
o
objeto
est
Um
objeto
com
awake
==
false
no
simulado
Permite
melhorar
o
desempenho
da
simulao
Se
esever
dormindo
e
outro
objeto
colidir
nele,
ele
acorda.
struct b2BodyDef::awake
Computao
Grca
2D
14
22/06/11
CORPOS
Atributos
struct
b2BodyDef::allowSleep
true/false
Permite
que
um
objeto
deixe
de
ser
simulado.
A
deteco
feita
pela
prpria
BOX
Melhora
a
performance
Computao Grca 2D
15
CORPOS
Atributos
struct
b2BodyDef::xedRotaeon
true/false
Evita
que
o
corpo
sofra
rotaes
Mesmo
que
alguma
fora
seja
aplicada
sobre
ele.
Computao Grca 2D
16
22/06/11
CORPOS
Atributos
struct
b2BodyDef::bullet
true/false
Afeta
somente
corpos
dinmicos.
Usado
para
forar
o
uso
de
CCD(conenuous
collision
deteceon)
Reduz
o
desempenho
Usa-se
em
objetos
que
se
movem
muito
rpido
no
cenrio
Computao
Grca
2D
17
CORPOS Atributos
Computao
Grca
2D
18
22/06/11
CORPOS
Atributos
struct
b2BodyDef::aceve
true/false
Dene
se
um
objeto
parecipa
ou
no
dos
clculos
da
usica.
Computao Grca 2D
19
CORPOS
Atributos
struct
b2BodyDef::userData
ponteiro
void
Pode
ser
usado
para
guardar
dados
da
aplicao.
usado
em
geral
para
guardar
uma
referncia
ao
objeto
que
simulado
pelo
corpo
Computao Grca 2D
20
10
22/06/11
CORPOS
Fixtures
Denem
as
propriedades
usicas
do
objeto
A
estrutura
de
dados
para
isto
a
b2FixtureDef
Atributos
Forma
Densidade
Frico
Resetuio
Computao
Grca
2D
21
CORPOS
Fixtures
Criao
de
uma
Fixure
b2FixtureDef
xture;
//
Cria
uma
nova
Fixture
a
parer
dos
parmetros
da
usica
do
objeto
a
parer
dos
dados
da
b2FixtureDef
//
Nunca
use
malloc
ou
New
body->CreateFixture(&xture);
......
body->DestroyFixture(&xture);
Computao
Grca
2D
22
11
22/06/11
CORPOS
Fixtures
struct
b2FixtureDef::shape
Dene
a
forma
do
objeto
Pode
ser
uma
AABB
ou
uma
OOBB.
Isto
deve
ser
denido
com
o
mtodo
SetAsBox
Computao Grca 2D
23
CORPOS
Fixtures
struct
b2FixtureDef::shape
AABB
void
SetAsBox(oat32
hx,
oat32
hy);
hx:
metade
da
altura
da
AABB
hy:
metade
da
largura
da
AABB
Computao Grca 2D
24
12
22/06/11
CORPOS
Fixtures
struct
b2FixtureDef::shape
OOBB
void
SetAsBox(oat32
hx,
oat32
hy,
const
b2Vec2&
center,
oat32
angle);
center
:
centro
da
box
em
coordenadas
locais
angle:
angulo
de
rotao
da
box
Computao Grca 2D
25
CORPOS
Fixtures
struct
b2FixtureDef::density
Usada
para
calcular
a
massa
do
objeto
Toma
como
base
a
rea
Pode
ser
posieva
ou
nula.
Computao Grca 2D
26
13
22/06/11
CORPOS
Fixtures
struct
b2FixtureDef::friceon
Dene
o
coeciente
de
atrito
entre
objetos
Usada
para
simular
o
deslocamento
de
um
objeto
sobre
outro.
O
atrito
dinmico
e
o
esteco
so
iguais
Usa-se
entre
0
e
1,
mas
pode
ser
qualquer
nmero
no
negaevo.
Computao
Grca
2D
27
CORPOS
Fixtures
struct
b2FixtureDef::friceon
A
frico
resultante
entre
dois
objetos
FR = F1* F2
Computao Grca 2D
28
14
22/06/11
CORPOS
Fixtures
struct
b2FixtureDef::resetueon
Usado
para
fazer
objetos
saltarem
no
momento
de
uma
coliso.
Usa-se
valores
entre
0
e
1.
Um
valor
0
dene
uma
coliso
inelseca
o
objeto
no
salta
CORPOS
Fixtures
struct
b2FixtureDef::resetueon
A
resetuio
resultante
entre
dois
objetos
dada
pela
frmula
RR = max( R1,R2)
Para
velocidades
muito
baixas
Usa
colises
inelsecas
Evita
jiyer
!
Computao
Grca
2D
30
15
22/06/11
Simulao
Executada
em
duas
fases
Velocity
phase
Determina
os
impulsos
produzidos
pelos
objetos
uns
nos
outros
Posieon
Phase
Ajusta
a
posio
dos
objetos
apra
reduzir
as
colises
Processos
iteraevos
Geram
aproximaes
cada
vez
melhores
Muitas
iteraes
Simulao
mais
realista
Maior
tempo
de
simulao
Computao
Grca
2D
31
Simulao
Executa
com
base
em
Time
Steps
Dene-se
o
tempo
em
que
se
quer
saber
o
resultado
da
simulao
emeStep
=
1/60
world->Step(emeStep,
velocityIteraeons,
posieonIteraeons);
Computao Grca 2D
32
16
22/06/11
Simulao
Gera
posies
e
Orientaes
para
cada
corpo
//
obtm
o
valor
atualizado
do
personagem
b2Vec2
posieon
=
CorpoPersona->GetPosieon();
oat32
angle
=
CorpoPersona->GetAngle();
//
converte
para
a
Pixels
//
atualiza
o
personagem
Computao
Grca
2D
33
Simulao
Obter
Informaes
de
todos
os
objetos
void
PrintBodies()
{
b2Body
*b;
oat
ang;
b2Vec2
pos;
for(b
=
world->GetBodyList();
b;
b=b->GetNext())
{
pos
=
b->GetPosieon();
ang
=
b->GetAngle();
prin{("%4.2f
%4.2f
%4.2f\n",
pos.x,
pos.y,
ang);
}
}
Computao
Grca
2D
34
17
22/06/11
Detalhes
de
Posicionamento
Sprites/Tiles
(0,0)
(0,0)
Box2D
Computao Grca 2D
35
Aplicao
de
Rotaes
Torque
Provoca
um
giro
no
objeto
ao
redor
de
seu
centro
de
massa
Corpo->ApplyTorque
(-1000);
Computao Grca 2D
36
18
22/06/11
Aplicao
de
Rotaes
Impulso
Angular
Provoca
um
giro
no
objeto
ao
redor
de
seu
centro
de
massa
Corpo->ApplyAngularImpulse(-1000);
Computao Grca 2D
37
Aplicao
de
Foras
Usa
vetores
e
posies
globais
b2Vec2
Pos
(0.0f,
0.0f);
b2Vec2
Forca
(1000.0f,
0);
Pos
=
Corpo->GetWorldPoint(Pos);
Forca
=
Corpo->GetWorldVector(Forca);
19
22/06/11
Aplicao
de
Foras
Impulso
Linear
b2Vec2
impulso(0,-1000);
b2Vec2
pos;
pos
=
Corpo->GetWorldCenter();
Corpo->ApplyLinearImpulse(impulso,
pos);
Aplicao
de
Foras
Impulso
Linear
b2Vec2
impulso(0,-1000);
b2Vec2
pos;
pos
=
Corpo->GetWorldCenter();
//
altera
o
vetor
de
impulso
impulso
=
Corpo->GetWorldVector(impulso);
Corpo->ApplyLinearImpulse(impulso,
pos);
20