physics engines
play

Physics engines Wolfgang Knecht Institute of Computer Graphics and - PowerPoint PPT Presentation

Physics engines Wolfgang Knecht Institute of Computer Graphics and Algorithms Vienna University of Technology Topics for today What is a physics engine? Available engines How to use NVIDIA PhysX Create Scene Actors Actors Shapes Dynamic,


  1. Physics engines Wolfgang Knecht Institute of Computer Graphics and Algorithms Vienna University of Technology

  2. Topics for today What is a physics engine? Available engines How to use NVIDIA PhysX Create Scene Actors Actors Shapes Dynamic, static and kinematic actors Joints Simulation Debugging Institute of Computer Graphics and Algorithms 1

  3. What is a physics engine? Handles collision detection Physical simulation Independent form what you see Low resolution approximation of scene Graphical representation Approximation for physical simulation Institute of Computer Graphics and Algorithms 2

  4. Available engines PhysX Havok Bullet OpenSource ODE ODE OpenSource Institute of Computer Graphics and Algorithms 3

  5. PhysX by NVIDIA Institute of Computer Graphics and Algorithms 4

  6. Get the PhysX SDK Download form NVIDIA Developer website [1] free, but you have to register (takes some time) Also get the PhysX SystemSoftware Hardware acceleration on all GeForce 8- Hardware acceleration on all GeForce 8- series, 9-series and 200-series Institute of Computer Graphics and Algorithms 5

  7. Prepare your project to use the SDK Specify include directories ' SDKs\Physics\include ‘ ' SDKs\Foundation\include ‘ ' SDKs\PhysXLoader\include ‘ ' SDKs\Cooking\include ' (optional) ' SDKs\Cooking\include ' (optional) ' SDKs\NxCharacter\include ' (optional) Identify Library ' SDKs\lib\win32\PhysXLoader.lib ‚ PhysXLoader.dll Institute of Computer Graphics and Algorithms 6

  8. Init the SDK #include "NxPhysics.h" NxPhysicsSDK *gPhysicsSDK = NxCreatePhysicsSDK(NX_PHYSICS_SDK_VERSION, &myAllocator, &myOutputStream); if(!gPhysicsSDK) Error("Wrong SDK DLL version?"); ... gPhysicsSDK->release(); Institute of Computer Graphics and Algorithms 7

  9. The scene and it‘s actors Scene Static objects Dynamic objects Kinematic objects - Levelgeometry - Levelgeometry - Boxes - Boxes - Elevators - Elevators - Walls - Barrels - Doors - Stairs - … - Platforms -… - … Actors Institute of Computer Graphics and Algorithms 8

  10. Create a physics scene NxScene NxSceneDesc sceneDesc; sceneDesc.gravity.set(0,-9.8f,0); NxScene *gScene = gPhysicsSDK->createScene(sceneDesc); if (!gScene) Error("Can't create scene!"); Institute of Computer Graphics and Algorithms 9

  11. Actors NxActorDesc actorDesc; NxScene actorDesc.globalPose = ...; // initial modelmatrix NxActor NxActor gScene->createActor(actorDesc); Institute of Computer Graphics and Algorithms 10

  12. Actors contain shapes NxActorDesc actorDesc; NxScene actorDesc.globalPose = ...; // initial modelmatrix NxSphereShapeDesc shapeDesc; shapeDesc.radius = 2.0; NxActor NxActor shapeDesc.localPose = ...; // Pose of the shape NxShape NxShape NxShape actorDesc.shapes.pushBack(&shapeDesc); gScene->createActor(actorDesc); Institute of Computer Graphics and Algorithms 11

  13. Actors contain shapes NxActorDesc actorDesc; NxScene actorDesc.globalPose = ...; // initial modelmatrix NxSphereShapeDesc shapeDesc; shapeDesc.radius = 2.0; NxActor NxActor shapeDesc.localPose = ...; // Pose of the shape NxShape NxShape NxShape actorDesc.shapes.pushBack(&shapeDesc); gScene->createActor(actorDesc); Institute of Computer Graphics and Algorithms 12

  14. Actors contain shapes NxActorDesc actorDesc; NxScene actorDesc.globalPose = ...; // initial modelmatrix NxSphereShapeDesc shapeDesc; shapeDesc.radius = 2.0; NxActor NxActor shapeDesc.localPose = ...; // Pose of the shape NxShape NxShape NxShape actorDesc.shapes.pushBack(&shapeDesc); gScene->createActor(actorDesc); Institute of Computer Graphics and Algorithms 13

  15. Shapes have materials NxActorDesc actorDesc; NxScene actorDesc.globalPose = ...; // initial modelmatrix NxSphereShapeDesc shapeDesc; shapeDesc.radius = 2.0; NxActor NxActor shapeDesc.localPose = ...; // Pose of the shape NxMaterialDesc materialDesc; materialDesc.restitution = 0.7f; materialDesc.staticFriction = 0.5f; materialDesc.staticFriction = 0.5f; NxShape NxShape materialDesc.dynamicFriction = 0.5f; NxShape NxMaterial *newMaterial= gScene->createMaterial(materialDesc); shapeDesc.materialIndex= newMaterial->getMaterialIndex(); NxMaterial NxMaterial actorDesc.shapes.pushBack(&shapeDesc); gScene->createActor(actorDesc); Institute of Computer Graphics and Algorithms 14

  16. Dynamic Actors – Rigid Bodies Actor needs a body User can add forces and torques NxActorDesc actorDesc; NxBodyDesc bodyDesc; // add some shapes to the actor // add some shapes to the actor bodyDesc.mass=10; actorDesc.body = &bodyDesc; actorDesc.globalPose.t = NxVec3(0.0f,10.0f,0.0f); // set initial position. NxActor *dynamicActor=gScene->createActor(actorDesc); Institute of Computer Graphics and Algorithms 15

  17. Static Actors Set actor‘s body to NULL NxActorDesc actorDesc; NxBodyDesc bodyDesc; // add some shapes to the actor // add some shapes to the actor bodyDesc.mass=10; actorDesc.body = &bodyDesc; actorDesc.globalPose.t = NxVec3(0.0f,10.0f,0.0f); // set initial position. NxActor *staticActor=gScene->createActor(actorDesc); Institute of Computer Graphics and Algorithms 16

  18. Kinematic Actors Does not move in response to forces, gravity, collision impulses, or if tugged by joints Moving platforms, elevators, … actor1->raiseBodyFlag(NX_BF_KINEMATIC); actor1->raiseBodyFlag(NX_BF_KINEMATIC); actor1->moveGlobalPose(mat34); actor1->moveGlobalPosition(vec3); actor1->moveGlobalOrientation(mat33); // do NOT use actor1->setGlobal*() Institute of Computer Graphics and Algorithms 17

  19. Joints Connect two actors Several Joint Types Motors, Springs and Special Limits Institute of Computer Graphics and Algorithms 18

  20. Character Controller Controllable kinematic actor Only boxes (NxBoxController) and capsules (NxCapsuleController) are supported NxControllerManager* gManager = NxCreateControllerManager(myAllocator); NxCapsuleControllerDesc desc; NxCapsuleControllerDesc desc; desc.radius = 0.5; desc.height = 2.0; desc.stepOffset = 0.5; NxController* c = gManager->createController(scene, desc); ... c->move(disp, 0xffffffff, 0.000001f, collisionFlags, sharpness); ... NxReleaseControllerManager(gManager); Institute of Computer Graphics and Algorithms 19

  21. Trigger Very useful to trigger events Open a door Start an elevator Change background music shapeDesc.shapeFlags |= NX_TRIGGER_ENABLE; // myTriggerCallback: // instance from user defined trigger class // derived from NxUserTriggerReport gScene->setUserTriggerReport(&myTriggerCallback); Institute of Computer Graphics and Algorithms 20

  22. Simulate and fetch results Simulations runs in the background - Your calculations fetchResults() simulate() - Render the scene Gameloop gScene->setTiming(1.0f/60.f, 8,NX_TIMESTEP_FIXED); gScene->setTiming(1.0f/60.f, 8,NX_TIMESTEP_FIXED); // gameloop { gScene->simulate(elapsedTime); gScene->flushStream(); // do your calculations and the rendering gScene->fetchResults(NX_RIGID_BODY_FINISHED, true); // } Institute of Computer Graphics and Algorithms 21

  23. Connect PhysX to the Renderer Create your model matrices using the actor‘s pose actor1->getGlobalPose(); // returns NXMat34 actor1->getGlobalPosition(); // returns NxVec3 actor1->getGlobalOrientation(); // returns NxMat33 Institute of Computer Graphics and Algorithms 22

  24. Cleanup Nx…::release… � releases Child and all associated objects NxScene::releaseActor � releases Actor and all associated shapes and all associated shapes NxPhysicsSDK::releaseScene � releases Scene and all actors, joints, materials, … created in the scene gPhysicsSDK->release(); Institute of Computer Graphics and Algorithms 23

  25. Debugging Debug rendering inside your application or Visual Debugger [2] Institute of Computer Graphics and Algorithms 24

  26. Several more features Fluids Cloth Soft Bodies Force Fields … Institute of Computer Graphics and Algorithms 25

  27. Do you really need a physics engine? Physics engines come with new problems Finding right parameters is not easy … Creating vehicle physics „by hand“ can be easier than using a physics engine easier than using a physics engine Collision detection for simple objects like spheres or boxes can be done with less effort E.g. Labyrinth games need no physics engine Institute of Computer Graphics and Algorithms 26

  28. References [1] PhysX Developer Zone, http://developer.nvidia.com/object/physx.html [2] PhysX Visual Debugger, http://developer.nvidia.com/object/pvd_home.html Havok, http://www.havok.com Bullet, http://bulletphysics.org Bullet, http://bulletphysics.org ODE, http://www.ode.org Institute of Computer Graphics and Algorithms 27

  29. The End Thanks for your attention! Questions? Institute of Computer Graphics and Algorithms 28

Recommend


More recommend