From 5c5ce9b4b34a4daf645931df104ea8f07407ebb4 Mon Sep 17 00:00:00 2001 From: "erwin.coumans" Date: Thu, 18 Feb 2010 06:16:35 +0000 Subject: [PATCH] fixes_dialogmenu_capsule.patch --- Demos/CharacterDemo/CharacterDemo.cpp | 7 +++++-- Demos/OpenGL/GL_DialogDynamicsWorld.cpp | 2 ++ src/BulletCollision/CollisionShapes/btCapsuleShape.h | 12 ++++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/Demos/CharacterDemo/CharacterDemo.cpp b/Demos/CharacterDemo/CharacterDemo.cpp index cddd22196..68445dc6d 100644 --- a/Demos/CharacterDemo/CharacterDemo.cpp +++ b/Demos/CharacterDemo/CharacterDemo.cpp @@ -75,7 +75,9 @@ void CharacterDemo::initPhysics() btTransform startTransform; startTransform.setIdentity (); - startTransform.setOrigin (btVector3(0.0, 4.0, 0.0)); + //startTransform.setOrigin (btVector3(0.0, 4.0, 0.0)); + startTransform.setOrigin (btVector3(10.210098,-1.6433364,16.453260)); + m_ghostObject = new btPairCachingGhostObject(); m_ghostObject->setWorldTransform(startTransform); @@ -340,7 +342,8 @@ void CharacterDemo::clientResetScene() m_character->reset (); ///WTF - m_character->warp (btVector3(0, -2.0, 0.)); + m_character->warp (btVector3(10.210001,-2.0306311,16.576973)); + } void CharacterDemo::specialKeyboardUp(int key, int x, int y) diff --git a/Demos/OpenGL/GL_DialogDynamicsWorld.cpp b/Demos/OpenGL/GL_DialogDynamicsWorld.cpp index 38b447b06..16cc3a529 100644 --- a/Demos/OpenGL/GL_DialogDynamicsWorld.cpp +++ b/Demos/OpenGL/GL_DialogDynamicsWorld.cpp @@ -236,6 +236,7 @@ GL_SliderControl* GL_DialogDynamicsWorld::createSlider(GL_DialogWindow* dialog, body->setAngularFactor(btVector3(0,0,0)); m_dynamicsWorld->addRigidBody(body); + body->setCollisionFlags(body->getFlags()|btCollisionObject::CF_NO_CONTACT_RESPONSE); btRigidBody* dialogBody = btRigidBody::upcast(dialog->getCollisionObject()); btAssert(dialogBody); @@ -299,6 +300,7 @@ GL_ToggleControl* GL_DialogDynamicsWorld::createToggle(GL_DialogWindow* dialog, body->setAngularFactor(btVector3(0,0,0)); m_dynamicsWorld->addRigidBody(body); + body->setCollisionFlags(body->getFlags()|btCollisionObject::CF_NO_CONTACT_RESPONSE); btRigidBody* dialogBody = btRigidBody::upcast(dialog->getCollisionObject()); btAssert(dialogBody); diff --git a/src/BulletCollision/CollisionShapes/btCapsuleShape.h b/src/BulletCollision/CollisionShapes/btCapsuleShape.h index 19541a4ff..ab763abf8 100644 --- a/src/BulletCollision/CollisionShapes/btCapsuleShape.h +++ b/src/BulletCollision/CollisionShapes/btCapsuleShape.h @@ -43,6 +43,18 @@ public: virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors,btVector3* supportVerticesOut,int numVectors) const; + virtual void setMargin(btScalar collisionMargin) + { + //correct the m_implicitShapeDimensions for the margin + btVector3 oldMargin(getMargin(),getMargin(),getMargin()); + btVector3 implicitShapeDimensionsWithMargin = m_implicitShapeDimensions+oldMargin; + + btConvexInternalShape::setMargin(collisionMargin); + btVector3 newMargin(getMargin(),getMargin(),getMargin()); + m_implicitShapeDimensions = implicitShapeDimensionsWithMargin - newMargin; + + } + virtual void getAabb (const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const { btVector3 halfExtents(getRadius(),getRadius(),getRadius());