1 physx artur ribeiro de aquino bruno feitosa marques joão paulo fernandes barbosa lucas aranha...

27
1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro Rodrigo Emanoel Araújo de Freitas Wagner de Souza Rolim

Upload: internet

Post on 18-Apr-2015

108 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

1

PHYSXArtur Ribeiro de AquinoBruno Feitosa Marques

João Paulo Fernandes BarbosaLucas Aranha Barreto

Lucas Praciano MarinhoPablo Carvalho Pinheiro

Rodrigo Emanoel Araújo de FreitasWagner de Souza Rolim

Page 2: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

2

ROTEIRO

Introdução Motivação Entidades Básicas

Scene Actor Shape Joints Material

Compilação no Visual Studio 2008 Praticando Referências

Page 3: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

3

Introdução

O NVIDIA PhysX é um poderoso mecanismo de física, que introduz a física em tempo real nos mais modernos jogos para PC e para console. O software PhysX é amplamente adotado por mais de 150 jogos. Com mais de 10 mil desenvolvedores de todos os tipos, é compatível com Sony Playstation 3, Microsoft Xbox 360, Nintendo Wii e PC. O PhysX é otimizado a fim de acelerar o hardware através de processadores com alto nível de computação paralela.

Page 4: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

Motivação

Não é fácil introduzir elementos de física nos jogos. É um ambiente com altíssima atividade computacional, baseado em um conjunto único de algoritmos físicos que exigem volumes imensos de cálculos matemáticos e lógicos simultâneos.

4

Page 5: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

5

Motivação

Processamento paralelo de elementos físicos Introduz maior realismo nas colisões Fogs que interagem com os corpos Interação realista com o ambiente Em suma: Simula a física real no ambiente

virtual Pode ser muito proveitoso seu uso em jogos NVIDIA PhysX SDK é de graça

Page 6: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

6

Motivação

Page 7: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

Motivação - Vídeos

Nesses videos estão exemplos do uso do Physx em algumas aplicações

http://www.youtube.com/watch?v=UQtjY-Q2BB8 http://www.youtube.com/watch?v=dZ1PPzCyNcg

77

Page 8: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

8

Entidades Básicas

Scene Actor Shape Joints Material

Page 9: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

9

Entidades Básicas – Scene

Simula o comportamento de objetos de acordo com sua interação (tais como corpos ou forças) com o passar do tempo

Pode manipular elementos do ambiente – gravidade

Exemplo:

NxSceneDesc sceneDesc;sceneDesc.gravity = NxVec3(0.0f, -9.81f, 0.0f); //Seta a gravidade da cenagScene = gPhysicsSDK->createScene(sceneDesc);

Page 10: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

10

Entidades Básicas – Actor

É o principal objeto de simulação e é criado por uma cena.

Pode ser dinâmico ou estático

Exemplo:

// Cria um ator estático

NxPlaneShapeDesc planeDesc;

NxActorDesc actorDesc;

actorDesc.shapes.pushBack(&planeDesc);

NxActor *staticActor = gScene->createActor(actorDesc);

Page 11: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

11

Entidades Básicas – Shape

Modelam o objeto São usadas para detectar e controlar

colisões Vários tipos: caixa, cápsula, esfera, dentre

outros

Exemplo:

NxBoxShapeDesc boxDesc;

boxDesc.dimensions.set(0.5f,0.5f,0.5f); // Cubo de 1m.

NxBoxShape *boxShape=actor->createShape(boxDesc)->isBox();

Page 12: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

12

Entidades Básicas – Joints

São conexões entre corpos rígidos (atores) Define como se dá a movimentação dos

atores sobre o ponto da junta Exemplo:

NxVec3 globalAnchor = NxVec3(0,5,0);NxVec3 globalAxis = NxVec3(0,1,0);NxSphericalJointDesc sphericalDesc;sphericalDesc.actor[0] = a0;sphericalDesc.actor[1] = a1;sphericalDesc.setGlobalAnchor(globalAnchor);sphericalDesc.setGlobalAxis(globalAxis);sphericalDesc.flags |= NX_SJF_SWING_LIMIT_ENABLED;sphericalDesc.swingLimit.value = 0.3*NxPi;sphericalDesc.flags |= NX_SJF_TWIST_LIMIT_ENABLED;sphericalDesc.twistLimit.low.value = -0.05*NxPi;sphericalDesc.twistLimit.high.value = 0.05*NxPi;NxSphericalJoint *j = (NxSphericalJoint*)gScene->createJoint(sphericalDesc);

Page 13: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

13

Entidades Básicas – Material

Descreve as propriedades da superfície Pode ser anisotrópica também

Exemplo:

// Cria um material anisotrópico

NxMaterialDesc material;

// Atrito anisotrópico

material.restitution = 0.0f;

material.staticFriction = 0.1f;

material.dynamicFriction = 0.1f;

material.dynamicFrictionV = 0.8f;

material.staticFrictionV = 1.0f;

material.dirOfAnisotropy.set(0,0,1);

material.flags = NX_MF_ANISOTROPIC;

NxMaterial *anisoMaterial = gScene->createMaterial(material);

Page 14: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

Compilação no Visual Studio 2008

1.Criar um Win32 Console Application (Empty Project)

2.Vá em propriedades do projeto > C/C++ > General > Additional Include Directories:

1414

Page 15: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

Compilação no Visual Studio 2008

1515

- C:\Program Files\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.1\SDKs\Cooking\include - C:\Program Files\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.1\SDKs\Foundation\include - C:\Program Files\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.1\SDKs\Physics\include - C:\Program Files\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.1\SDKs\PhysXLoader\include - C:\Program Files\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.1\Graphics\include\win32 - C:\Program Files\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.1\Samples\SampleCommonCode\src

Page 16: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

Compilação no Visual Studio 2008

3.Vá em propriedades do projeto > Linker > General > Additional Library Directories:

- C:\Program Files\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.1\SDKs\lib\Win32

- C:\Program Files\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.1\Graphics\lib\win32\glut

1616

Page 17: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

Compilação no Visual Studio 2008

4.Vá em propriedades do projeto > Linker > Input > Additional Dependencies:

- PhysXLoader.lib

5.Copie o glut32.dll (de C:\Program Files\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.1\Bin\win32) para a pasta do projeto.

1717

Page 18: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

Compilação no Visual Studio 2008

6. Vá em propriedades do projeto > General > Character Set: - "Use Multi-Byte Character Set"

1818

Page 19: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

19

Praticando – Exercício 1

1. Crie um novo projeto e o configure como explicado anteriormente

2. Copie os arquivos DrawObjects.cpp, GLFontRenderer.cpp, PerfRenderer.cpp, Timing.cpp e Ex1.cpp

3. Pode compilar e rodar!4. Deverá aparecer simplesmente uma

janela5. Pode-se passear pela cena usando as

setas do teclado e o mouse

Page 20: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

20

Praticando – Exercício 1

Criando um plano para servir de chão:

NxPlaneShapeDesc planeDesc;

NxActorDesc actorDesc;

actorDesc.shapes.pushBack(&planeDesc);

gScene->createActor(actorDesc);

Page 21: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

21

Praticando – Exercício 1

Criando um cubo:

// Create body

NxBodyDesc bodyDesc;

bodyDesc.angularDamping = 0.5f;

NxBoxShapeDesc boxDesc;

boxDesc.dimensions = NxVec3(size, size, size); // size: definido no método

NxActorDesc actorDesc;

actorDesc.shapes.pushBack(&boxDesc);

actorDesc.body = &bodyDesc;

actorDesc.density = 0.5f;

actorDesc.globalPose.t = pos; // pos: definido no método

cube = gScene->createActor(actorDesc);

Page 22: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

22

Praticando – Exercício 1

Pode criar outros tipos de figuras O código já se encontra preparado para

se fazer uma esfera e uma cápsula A criação dos objetos é análoga Dica, assim como uma caixa tem 3

dimensões Esfera possui um raio (radius) Cápsula possui um raio e uma altura (radius e

height)

Page 23: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

23

Praticando – Exercício 1

O comando para adicionar uma força é: addForce(NxVec3 (x, y, z)) addTorque(NxVec3 (x, y, z))

A rotina do teclado é feita em no método: KeyboardCallback(...)

Você pode adicionar uma força à um ator? ator-> addForce(NxVec3 (x, y, z))

Se a nada acontecer cheque o peso (densidade), atritos (estático e dinâmico) e a intensidade da força aplicada

Page 24: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

24

Praticando – Exercício 2

1. Crie um novo projeto e o configure como explicado anteriormente

2. Copie os arquivos SampleD6Joint.h, cooking.cpp, Actors.cpp, DebugRenderer.cpp, Timing.cpp, DrawObjects.cpp, GLFontRenderer.cpp, Joints.cpp, Stream.cpp, PerfRenderer.cpp, e Ex2.cpp

3. Pode compilar e rodar!

Page 25: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

25

Praticando – Exercício 2

Neste exercício vocês podem ver vários tipos de junções diferentes

Os comandos aparecem no prompt de comando

Lembrem-se de apertar ‘B’ para visualizar o tipo de junta selecionada

Page 26: 1 PHYSX Artur Ribeiro de Aquino Bruno Feitosa Marques João Paulo Fernandes Barbosa Lucas Aranha Barreto Lucas Praciano Marinho Pablo Carvalho Pinheiro

26

Praticando – Exemplos

Para quem já acabou existem vários exemplos prontos

Os exemplos estão em: Start >> All Programs >> NVIDIA Corporation >> PhysX SDK 2.8.1 >> Samples >> Executables

Sugestões: SampleBoxes SampleCloth

Divirtam-se!