+ All Categories
Home > Documents > Physics Character Controller

Physics Character Controller

Date post: 22-Feb-2016
Category:
Upload: satya
View: 38 times
Download: 0 times
Share this document with a friend
Description:
Physics Character Controller. Physical representation of a game character. Basics. http://cg.iit.bme.hu/gamedev/KIC/05_PhysicsEngine/ 05_02_Bullet_CharacterControl _ Base . zip Extract Run : CharacterControl . sln Set i nclude and library paths (if not correct) - PowerPoint PPT Presentation
12
Physics Character Controller Physical representation of a game character
Transcript
Page 1: Physics Character Controller

Physics Character Controller

Physical representation of a game character

Page 2: Physics Character Controller

Basicshttp://cg.iit.bme.hu/gamedev/KIC/

05_PhysicsEngine/05_02_Bullet_CharacterControl_Base.zipExtractRun: CharacterControl.slnSet include and library paths (if not correct)Set working directory (if not

$(SolutionDir)/bin)CompileRun

Page 3: Physics Character Controller

Run

Page 4: Physics Character Controller

ExerciseGive the character a physical representationUse a capsule shape as a bounding objectMake the capsule dynamicDisable rotationAdd forces to move it in the sceneThe physical representation of the scene is

already loaded (static boxes)(examine the source code!!)

Play with the parameters until the movement feels natural

(Next slides show one solution)

Page 5: Physics Character Controller

PlayerCharacter.h#include "btBulletDynamicsCommon.h"

class PlayerCharacter{public: PlayerCharacter(Ogre::SceneManager* sm, btDiscreteDynamicsWorld*

phyW);

protected: btRigidBody* mPhysicsController;

Page 6: Physics Character Controller

PlayerCharacter.cppPlayerCharacter::PlayerCharacter(Ogre::SceneManager* sm, btDiscreteDynamicsWorld* phyW){

… btCollisionShape* physicsShape = new btCapsuleShape(2.0,5.0);

btDefaultMotionState* physicsMotionState = new btDefaultMotionState(btTransform(btQuaternion(0,0,0,1), btVector3(0,5,0))); btScalar mass = 1; btVector3 inertia(0,0,0); physicsShape->calculateLocalInertia(mass,inertia);

btRigidBody::btRigidBodyConstructionInfo rigidBodyCI(mass, physicsMotionState, physicsShape, inertia); mPhysicsController = new btRigidBody(rigidBodyCI);

mPhysicsController->setAngularFactor(0); //disable rotation//mPhysicsController->setDamping(0.3,0);

phyW->addRigidBody(mPhysicsController);}

Page 7: Physics Character Controller

PlayerCharacter.cppvoid PlayerCharacter::update(float t, float dt){

… btTransform worldTrans;

mPhysicsController->getMotionState()->getWorldTransform(worldTrans); //we don’t need rotation as it is fixed

//btQuaternion rot = worldTrans.getRotation(); //node->setOrientation(rot.w(), rot.x(), rot.y(), rot.z());

node->setPosition(worldTrans.getOrigin().x(), worldTrans.getOrigin().y()-5, worldTrans.getOrigin().z());

mPhysicsController->setLinearVelocity(btVector3(0,0,0));

}

Page 8: Physics Character Controller

PlayerCharacter.cppvoid PlayerCharacter::move(float amount){

if(inAction())return;

Ogre::Vector3 m = amount * getDirection() * 150;Ogre::LogManager::getSingleton().logMessage("Applying force: " + Ogre::StringConverter::toString(m));mPhysicsController->activate(true);mPhysicsController->applyImpulse(btVector3(m.x,m.y,m.z), btVector3(0,-0.5,0));

if(hasWeapon)action = PA_WEAPON_HOLD;elseaction = PA_NONE;

pose = PP_RUN;}

Page 9: Physics Character Controller

OgreCharacter.cppplayerCharacter = new

PlayerCharacter(sceneManager, physxHandler->getScene());

Page 10: Physics Character Controller

Test

Page 11: Physics Character Controller

More physicsConstraints/jointsRay casting (bullets, terrain, vehicle)Complex geometries

ConvexConcaveHeight field

Collision filteringSoft bodiesParticles, fluids

Page 12: Physics Character Controller

The End


Recommended