Просмотр исходного кода

Update to latest Bullet (not using Bullet 3 yet)

Ivan Safrin 10 лет назад
Родитель
Сommit
94928b0011

+ 6 - 2
CMake/ExternalBullet.cmake

@@ -12,6 +12,10 @@ SET(bullet_CMAKE_ARGS
     -DINSTALL_LIBS=ON
     -DINSTALL_LIBS=ON
     -DUSE_MSVC_RUNTIME_LIBRARY_DLL=ON
     -DUSE_MSVC_RUNTIME_LIBRARY_DLL=ON
     -DBUILD_DEMOS=OFF
     -DBUILD_DEMOS=OFF
+    -DBUILD_CPU_DEMOS=OFF
+    -DBUILD_OPENGL3_DEMOS=OFF
+    -DBUILD_BULLET2_DEMOS=OFF
+    -DBUILD_BULLET3=OFF
     -DBUILD_EXTRAS=OFF
     -DBUILD_EXTRAS=OFF
     -DBUILD_UNIT_TESTS=OFF
     -DBUILD_UNIT_TESTS=OFF
 )
 )
@@ -26,8 +30,8 @@ ExternalProject_Add(bullet
     
     
     DOWNLOAD_DIR ${POLYCODE_DEPS_DOWNLOAD_DIR}
     DOWNLOAD_DIR ${POLYCODE_DEPS_DOWNLOAD_DIR}
 
 
-    URL http://bullet.googlecode.com/files/bullet-2.78.zip
-    URL_MD5 99d4070864c9f73521481ba9cda25038
+    URL https://github.com/bulletphysics/bullet3/archive/2.83.5.tar.gz
+    URL_MD5 87e42fad2216801d5cef0af7e547ce08
 
 
     INSTALL_DIR ${POLYCODE_DEPS_MODULES_PREFIX} 
     INSTALL_DIR ${POLYCODE_DEPS_MODULES_PREFIX} 
     CMAKE_ARGS ${bullet_CMAKE_ARGS}
     CMAKE_ARGS ${bullet_CMAKE_ARGS}

+ 2 - 46
CMake/FindBullet.cmake

@@ -18,13 +18,11 @@ SET(BULLET_SEARCH_PATHS
   SET(BULLETCOLLISION "BulletCollision")
   SET(BULLETCOLLISION "BulletCollision")
   SET(BULLETMATH "LinearMath")
   SET(BULLETMATH "LinearMath")
   SET(BULLETSOFTBODY "BulletSoftBody")
   SET(BULLETSOFTBODY "BulletSoftBody")
-  SET(BULLETMULTITHREADED "BulletMultiThreaded")
 
 
   SET(BULLETDYNAMICS_DEBUG "BulletDynamics_d")
   SET(BULLETDYNAMICS_DEBUG "BulletDynamics_d")
   SET(BULLETCOLLISION_DEBUG "BulletCollision_d")
   SET(BULLETCOLLISION_DEBUG "BulletCollision_d")
   SET(BULLETMATH_DEBUG "LinearMath_d")
   SET(BULLETMATH_DEBUG "LinearMath_d")
   SET(BULLETSOFTBODY_DEBUG "BulletSoftBody_d")
   SET(BULLETSOFTBODY_DEBUG "BulletSoftBody_d")
-  SET(BULLETMULTITHREADED_DEBUG "BulletMultiThreaded_d")
 
 
 
 
 FIND_PATH(BULLET_INCLUDE_DIR NAMES btBulletCollisionCommon.h
 FIND_PATH(BULLET_INCLUDE_DIR NAMES btBulletCollisionCommon.h
@@ -119,27 +117,6 @@ IF(NOT LIBBULLETSOFTBODY)
     MESSAGE ("WARNING: Could not find Bullet SoftBody - depending targets will be disabled.")
     MESSAGE ("WARNING: Could not find Bullet SoftBody - depending targets will be disabled.")
 ENDIF(NOT LIBBULLETSOFTBODY)
 ENDIF(NOT LIBBULLETSOFTBODY)
 
 
-
-FIND_LIBRARY(LIBBULLETMULTITHREADED
-  NAMES 
-  ${BULLETMULTITHREADED}
-	HINTS
-	NO_DEFAULT_PATH
-	NO_CMAKE_ENVIRONMENT_PATH
-	NO_CMAKE_SYSTEM_PATH
-	NO_SYSTEM_ENVIRONMENT_PATH
-	NO_CMAKE_PATH
-	CMAKE_FIND_FRAMEWORK NEVER
-	$ENV{BULLETDIR}
-	$ENV{BULLET_PATH}
-	PATH_SUFFIXES lib lib64 win32/Dynamic_Release "Win32/${MSVC_YEAR_NAME}/x64/Release" "Win32/${MSVC_YEAR_NAME}/Win32/Release"
-	PATHS ${BULLET_SEARCH_PATHS}
-)
-
-IF(NOT LIBBULLETMULTITHREADED)
-    MESSAGE ("WARNING: Could not find Bullet MultiThreaded - depending targets will be disabled.")
-ENDIF(NOT LIBBULLETMULTITHREADED)
-
 # -------
 # -------
 
 
 FIND_LIBRARY(LIBBULLETDYNAMICS_DEBUG
 FIND_LIBRARY(LIBBULLETDYNAMICS_DEBUG
@@ -224,30 +201,9 @@ IF(NOT LIBBULLETSOFTBODY_DEBUG)
 ENDIF(NOT LIBBULLETSOFTBODY_DEBUG)
 ENDIF(NOT LIBBULLETSOFTBODY_DEBUG)
 
 
 
 
-FIND_LIBRARY(LIBBULLETMULTITHREADED_DEBUG
-  NAMES 
-  ${BULLETMULTITHREADED_DEBUG}
-	HINTS
-	NO_DEFAULT_PATH
-	NO_CMAKE_ENVIRONMENT_PATH
-	NO_CMAKE_SYSTEM_PATH
-	NO_SYSTEM_ENVIRONMENT_PATH
-	NO_CMAKE_PATH
-	CMAKE_FIND_FRAMEWORK NEVER
-	$ENV{BULLETDIR}
-	$ENV{BULLET_PATH}
-	PATH_SUFFIXES lib lib64 win32/Dynamic_Release "Win32/${MSVC_YEAR_NAME}/x64/Release" "Win32/${MSVC_YEAR_NAME}/Win32/Release"
-	PATHS ${BULLET_SEARCH_PATHS}
-)
-
-IF(NOT LIBBULLETMULTITHREADED_DEBUG)
-    MESSAGE ("WARNING: Could not find Bullet MultiThreaded Debug - depending targets will be disabled.")
-ENDIF(NOT LIBBULLETMULTITHREADED_DEBUG)
-
-
-SET(BULLET_LIBRARIES ${LIBBULLETMULTITHREADED} ${LIBBULLETSOFTBODY} ${LIBBULLETDYNAMICS} ${LIBBULLETCOLLISION} ${LIBBULLETMATH})
+SET(BULLET_LIBRARIES ${LIBBULLETSOFTBODY} ${LIBBULLETDYNAMICS} ${LIBBULLETCOLLISION} ${LIBBULLETMATH})
 
 
-SET(BULLET_LIBRARIES_DEBUG ${LIBBULLETMULTITHREADED_DEBUG} ${LIBBULLETSOFTBODY_DEBUG} ${LIBBULLETDYNAMICS_DEBUG} ${LIBBULLETCOLLISION_DEBUG} ${LIBBULLETMATH_DEBUG})
+SET(BULLET_LIBRARIES_DEBUG ${LIBBULLETSOFTBODY_DEBUG} ${LIBBULLETDYNAMICS_DEBUG} ${LIBBULLETCOLLISION_DEBUG} ${LIBBULLETMATH_DEBUG})
 
 
 IF(BULLET_INCLUDE_DIR AND BULLET_LIBRARIES)
 IF(BULLET_INCLUDE_DIR AND BULLET_LIBRARIES)
   SET(BULLET_FOUND TRUE)
   SET(BULLET_FOUND TRUE)

+ 5 - 5
Modules/Contents/3DPhysics/Source/PolyCollisionScene.cpp

@@ -102,8 +102,8 @@ bool CollisionScene::isColliding(Entity *ent1) {
         {
         {
             btPersistentManifold* contactManifold = world->getDispatcher()->getManifoldByIndexInternal(i);
             btPersistentManifold* contactManifold = world->getDispatcher()->getManifoldByIndexInternal(i);
           
           
-            btCollisionObject* obA = static_cast<btCollisionObject*>(contactManifold->getBody0());
-            btCollisionObject* obB = static_cast<btCollisionObject*>(contactManifold->getBody1());
+            btCollisionObject* obA = (btCollisionObject*)contactManifold->getBody0();
+            btCollisionObject* obB = (btCollisionObject*)contactManifold->getBody1();
             
             
             if(obA == cEnt1->collisionObject || obB == cEnt1->collisionObject) {
             if(obA == cEnt1->collisionObject || obB == cEnt1->collisionObject) {
                 return true;
                 return true;
@@ -130,8 +130,8 @@ CollisionResult CollisionScene::testCollisionOnCollisionChild_Convex(CollisionEn
 	for (int i=0;i<numManifolds;i++)
 	for (int i=0;i<numManifolds;i++)
 	{
 	{
 		btPersistentManifold* contactManifold = world->getDispatcher()->getManifoldByIndexInternal(i);
 		btPersistentManifold* contactManifold = world->getDispatcher()->getManifoldByIndexInternal(i);
-		btCollisionObject* obA = static_cast<btCollisionObject*>(contactManifold->getBody0());
-		btCollisionObject* obB = static_cast<btCollisionObject*>(contactManifold->getBody1());
+		btCollisionObject* obA = (btCollisionObject*)contactManifold->getBody0();
+		btCollisionObject* obB = (btCollisionObject*)contactManifold->getBody1();
  		if((obA == cEnt1->collisionObject && obB == cEnt2->collisionObject) ||
  		if((obA == cEnt1->collisionObject && obB == cEnt2->collisionObject) ||
 		   (obA == cEnt2->collisionObject && obB == cEnt1->collisionObject)) {
 		   (obA == cEnt2->collisionObject && obB == cEnt1->collisionObject)) {
 //			contactManifold->refreshContactPoints(obA->getWorldTransform(), obB->getWorldTransform());
 //			contactManifold->refreshContactPoints(obA->getWorldTransform(), obB->getWorldTransform());
@@ -177,7 +177,7 @@ RayTestResult CollisionScene::getFirstEntityInRay(const Vector3 &origin,  const
 	world->rayTest (fromVec, toVec, cb);	
 	world->rayTest (fromVec, toVec, cb);	
 	
 	
 	if (cb.hasHit ()) {
 	if (cb.hasHit ()) {
-		CollisionEntity *retEnt = getCollisionEntityByObject(cb.m_collisionObject);
+		CollisionEntity *retEnt = getCollisionEntityByObject((btCollisionObject*)cb.m_collisionObject);
 		if(retEnt) {
 		if(retEnt) {
 			ret.entity = retEnt->getEntity();
 			ret.entity = retEnt->getEntity();
 			ret.position = Vector3(cb.m_hitPointWorld.getX(), cb.m_hitPointWorld.getY(), cb.m_hitPointWorld.getZ());
 			ret.position = Vector3(cb.m_hitPointWorld.getX(), cb.m_hitPointWorld.getY(), cb.m_hitPointWorld.getZ());

+ 3 - 3
Modules/Contents/3DPhysics/Source/PolyPhysicsScene.cpp

@@ -116,8 +116,8 @@ void PhysicsScene::processWorldCollisions() {
 	for (int i=0;i<numManifolds;i++)
 	for (int i=0;i<numManifolds;i++)
 	{
 	{
 		btPersistentManifold* contactManifold =  world->getDispatcher()->getManifoldByIndexInternal(i);
 		btPersistentManifold* contactManifold =  world->getDispatcher()->getManifoldByIndexInternal(i);
-		btCollisionObject* obA = static_cast<btCollisionObject*>(contactManifold->getBody0());
-		btCollisionObject* obB = static_cast<btCollisionObject*>(contactManifold->getBody1());
+		btCollisionObject* obA = (btCollisionObject*)contactManifold->getBody0();
+		btCollisionObject* obB = (btCollisionObject*)contactManifold->getBody1();
 	
 	
 		
 		
 		int numContacts = contactManifold->getNumContacts();
 		int numContacts = contactManifold->getNumContacts();
@@ -207,7 +207,7 @@ PhysicsCharacter *PhysicsScene::trackCharacterChild(Entity *newEntity, Number ma
 	
 	
 	physicsWorld->getBroadphase()->getOverlappingPairCache()->cleanProxyFromPairs(newPhysicsEntity->ghostObject->getBroadphaseHandle(),physicsWorld->getDispatcher());
 	physicsWorld->getBroadphase()->getOverlappingPairCache()->cleanProxyFromPairs(newPhysicsEntity->ghostObject->getBroadphaseHandle(),physicsWorld->getDispatcher());
 	
 	
-	newPhysicsEntity->character->reset ();	
+	newPhysicsEntity->character->reset (world);
 	newPhysicsEntity->character->setUseGhostSweepTest(false);
 	newPhysicsEntity->character->setUseGhostSweepTest(false);
 	
 	
 	physicsChildren.push_back(newPhysicsEntity);
 	physicsChildren.push_back(newPhysicsEntity);