physx
DESCRIPTION
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. 1. ROTEIRO. Introdução Motivação Entidades Básicas Scene Actor Shape - PowerPoint PPT PresentationTRANSCRIPT
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
2
ROTEIRO
Introdução Motivação Entidades Básicas
Scene Actor Shape Joints Material
Compilação no Visual Studio 2008 Praticando Referências
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.
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
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
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
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);
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);
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();
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);
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);
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
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
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
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
Compilação no Visual Studio 2008
6. Vá em propriedades do projeto > General > Character Set: - "Use Multi-Byte Character Set"
1818
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
20
Praticando – Exercício 1
Criando um plano para servir de chão:
NxPlaneShapeDesc planeDesc;
NxActorDesc actorDesc;
actorDesc.shapes.pushBack(&planeDesc);
gScene->createActor(actorDesc);
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);
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)
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
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!
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
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!
27
REFERÊNCIAS
http://www.nvidia.com/object/nvidia_physx.html
http://en.wikipedia.org/wiki/PhysX http://www.delta3d.org/filemgmt_data/files/S
DD_Ageia_2008_01_11_release_v0.4.pdf https://www.gprt.ufpe.br/~grvm/pdfs/Minicur
sos/2007/SVR2007_ApostilaTutorialPhysX.pdf