[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