PHYSX
1
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
ROTEIRO
Introdução
 Motivação
 Entidades Básicas






Scene
Actor
Shape
Joints
Material
Compilação no Visual Studio 2008
 Praticando
 Referências

2
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.
3
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
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

5
Motivação
6
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

7
Entidades Básicas
Scene
 Actor
 Shape
 Joints
 Material

8
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 cena
gScene = gPhysicsSDK->createScene(sceneDesc);
9
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);
10
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();
11
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);
12
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);
13
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:
14
Compilação no Visual Studio 2008
- 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
15
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
16
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.
17
Compilação no Visual Studio 2008
6. Vá em propriedades do projeto > General >
Character Set: - "Use Multi-Byte Character Set"
18
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 janela
5. Pode-se passear pela cena usando as setas do
teclado e o mouse
19
Praticando – Exercício 1

Criando um plano para servir de chão:
NxPlaneShapeDesc planeDesc;
NxActorDesc actorDesc;
actorDesc.shapes.pushBack(&planeDesc);
gScene->createActor(actorDesc);
20
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);
21
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)
22
Praticando – Exercício 1
O comando para adicionar uma força é:



A rotina do teclado é feita em no método:
KeyboardCallback(...)
Você pode adicionar uma força à um ator?




addForce(NxVec3 (x, y, z))
addTorque(NxVec3 (x, y, z))
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
23
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!
4. Deverá aparecer simplesmente uma janela
5. Pode-se passear pela cena usando as setas do
teclado e o mouse
24
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
25
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!
26
REFERÊNCIAS
http://www.nvidia.com/object/nvidia_physx.html
 http://en.wikipedia.org/wiki/PhysX
 http://www.delta3d.org/filemgmt_data/files/SDD_
Ageia_2008_01_11_release_v0.4.pdf
 https://www.gprt.ufpe.br/~grvm/pdfs/Minicursos/
2007/SVR2007_ApostilaTutorialPhysX.pdf

27
Download

08-PhysXP