[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49373] trunk/blender/extern/bullet2: Fixing [#32210] "Character physics type colliding with sensor type" reported by Daniel Stokes (kupoman) by applying a patch found in this Bullet bug report: https://code.google. com/p/bullet/issues/detail?id=525
Mitchell Stokes
mogurijin at gmail.com
Mon Jul 30 05:45:20 CEST 2012
Revision: 49373
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49373
Author: moguri
Date: 2012-07-30 03:45:15 +0000 (Mon, 30 Jul 2012)
Log Message:
-----------
Fixing [#32210] "Character physics type colliding with sensor type" reported by Daniel Stokes (kupoman) by applying a patch found in this Bullet bug report: https://code.google.com/p/bullet/issues/detail?id=525
Modified Paths:
--------------
trunk/blender/extern/bullet2/readme.txt
trunk/blender/extern/bullet2/src/BulletDynamics/Character/btKinematicCharacterController.cpp
Added Paths:
-----------
trunk/blender/extern/bullet2/patches/ghost_character.patch
Added: trunk/blender/extern/bullet2/patches/ghost_character.patch
===================================================================
--- trunk/blender/extern/bullet2/patches/ghost_character.patch (rev 0)
+++ trunk/blender/extern/bullet2/patches/ghost_character.patch 2012-07-30 03:45:15 UTC (rev 49373)
@@ -0,0 +1,28 @@
+Index: extern/bullet2/src/BulletDynamics/Character/btKinematicCharacterController.cpp
+===================================================================
+--- extern/bullet2/src/BulletDynamics/Character/btKinematicCharacterController.cpp (revision 49183)
++++ extern/bullet2/src/BulletDynamics/Character/btKinematicCharacterController.cpp (working copy)
+@@ -77,6 +77,9 @@
+ if (convexResult.m_hitCollisionObject == m_me)
+ return btScalar(1.0);
+
++ if (!convexResult.m_hitCollisionObject->hasContactResponse())
++ return btScalar(1.0);
++
+ btVector3 hitNormalWorld;
+ if (normalInWorldSpace)
+ {
+@@ -173,7 +176,12 @@
+ m_manifoldArray.resize(0);
+
+ btBroadphasePair* collisionPair = &m_ghostObject->getOverlappingPairCache()->getOverlappingPairArray()[i];
+-
++ btCollisionObject* obj0 = static_cast<btCollisionObject*>(collisionPair->m_pProxy0->m_clientObject);
++ btCollisionObject* obj1 = static_cast<btCollisionObject*>(collisionPair->m_pProxy1->m_clientObject);
++
++ if ((obj0 && !obj0->hasContactResponse()) || (obj1 && !obj1->hasContactResponse()))
++ continue;
++
+ if (collisionPair->m_algorithm)
+ collisionPair->m_algorithm->getAllContactManifolds(m_manifoldArray);
+
Modified: trunk/blender/extern/bullet2/readme.txt
===================================================================
--- trunk/blender/extern/bullet2/readme.txt 2012-07-29 23:53:21 UTC (rev 49372)
+++ trunk/blender/extern/bullet2/readme.txt 2012-07-30 03:45:15 UTC (rev 49373)
@@ -13,3 +13,7 @@
Apply patches/make_id.patch to prevent duplicated define of MAKE_ID macro in blender
side and bullet side.
Sergey
+
+Apply patches/ghost_character.path to prevent characters from colliding with ghost objects.
+Mitchell
+
Modified: trunk/blender/extern/bullet2/src/BulletDynamics/Character/btKinematicCharacterController.cpp
===================================================================
--- trunk/blender/extern/bullet2/src/BulletDynamics/Character/btKinematicCharacterController.cpp 2012-07-29 23:53:21 UTC (rev 49372)
+++ trunk/blender/extern/bullet2/src/BulletDynamics/Character/btKinematicCharacterController.cpp 2012-07-30 03:45:15 UTC (rev 49373)
@@ -77,6 +77,9 @@
if (convexResult.m_hitCollisionObject == m_me)
return btScalar(1.0);
+ if (!convexResult.m_hitCollisionObject->hasContactResponse())
+ return btScalar(1.0);
+
btVector3 hitNormalWorld;
if (normalInWorldSpace)
{
@@ -173,7 +176,12 @@
m_manifoldArray.resize(0);
btBroadphasePair* collisionPair = &m_ghostObject->getOverlappingPairCache()->getOverlappingPairArray()[i];
-
+ btCollisionObject* obj0 = static_cast<btCollisionObject*>(collisionPair->m_pProxy0->m_clientObject);
+ btCollisionObject* obj1 = static_cast<btCollisionObject*>(collisionPair->m_pProxy1->m_clientObject);
+
+ if ((obj0 && !obj0->hasContactResponse()) || (obj1 && !obj1->hasContactResponse()))
+ continue;
+
if (collisionPair->m_algorithm)
collisionPair->m_algorithm->getAllContactManifolds(m_manifoldArray);
More information about the Bf-blender-cvs
mailing list