1 physx artur ribeiro de aquino bruno feitosa marques joão paulo fernandes barbosa lucas aranha...
TRANSCRIPT
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
6
Motivação
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
8
Entidades Básicas
Scene Actor Shape Joints Material
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