Sie sind auf Seite 1von 20

22/06/11

Biblioteca de Fsica Box2D


Mrcio Sarroglia Pinho Isabel Harb Manssour

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

CORPOS Atributos - type


struct b2BodyDef::type
Dene o epo do corpo. obrigatrio.
b2_sta.cBody b2_kinema.cBody b2_dynamicBody


Computao Grca 2D 8

22/06/11

CORPOS Atributos - type


b2_sta.cBody
No se move durante a simulao Tem massa innita e velocidade zero Pode ser movido manualmente pelo programa Usado para criar obstculos


Computao Grca 2D 9

CORPOS Atributos - type


b2_kinema.cBody
Move-se de acordo com sua velocidade. No responde a foras. Pode ser movido manualmente pelo programa, mas em geral deve ser movido por sua velocidade.


Computao Grca 2D 10

22/06/11

CORPOS Atributos - type


b2_dynamicBody
tem seu comportamento totalmente simulado Pode ser movido manualmente pelo programa, mas em geral deve ser movido pelas foras a ele aplicadas. Tem massa nita e diferente de zero. Se for tentado colocar massa zero, ela convereda para 1kg.

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

struct b2BodyDef::bullet Conenuous Collision Deteceon


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

Um valor 1 dene uma coliso perfeitamente elseca


A velocidade do objeto depois da coliso a mesma de antes da coliso
Computao Grca 2D 29

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);

Se for feito fora do Centro de Massa, causa rotao do corpo


Computao Grca 2D 38

19

22/06/11

Aplicao de Foras
Impulso Linear
b2Vec2 impulso(0,-1000); b2Vec2 pos; pos = Corpo->GetWorldCenter(); Corpo->ApplyLinearImpulse(impulso, pos);

Se for feito fora do Centro de Massa, causa rotao do corpo


Computao Grca 2D 39

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);

Se for feito fora do Centro de Massa, causa rotao do corpo


Computao Grca 2D 40

20

Das könnte Ihnen auch gefallen