diff --git a/Demos/CharacterDemo/CharacterDemo.cpp b/Demos/CharacterDemo/CharacterDemo.cpp index 07bb11223..97763f441 100644 --- a/Demos/CharacterDemo/CharacterDemo.cpp +++ b/Demos/CharacterDemo/CharacterDemo.cpp @@ -237,11 +237,20 @@ void CharacterDemo::clientMoveAndDisplay() btScalar walkVelocity = btScalar(1.1) * 4.0; // 4 km/h -> 1.1 m/s btScalar walkSpeed = walkVelocity * dt; + //rotate view if (gLeft) - walkDirection += strafeDir; + { + btMatrix3x3 orn = m_ghostObject->getWorldTransform().getBasis(); + orn *= btMatrix3x3(btQuaternion(btVector3(0,1,0),0.01)); + m_ghostObject->getWorldTransform ().setBasis(orn); + } if (gRight) - walkDirection -= strafeDir; + { + btMatrix3x3 orn = m_ghostObject->getWorldTransform().getBasis(); + orn *= btMatrix3x3(btQuaternion(btVector3(0,1,0),-0.01)); + m_ghostObject->getWorldTransform ().setBasis(orn); + } if (gForward) walkDirection += forwardDir; @@ -424,7 +433,29 @@ void CharacterDemo::updateCamera() backward.normalize (); m_cameraTargetPosition = characterWorldTrans.getOrigin(); - m_cameraPosition = m_cameraTargetPosition + up * 2.0 + backward * 12.0; + m_cameraPosition = m_cameraTargetPosition + up * 10.0 + backward * 12.0; + + //use the convex sweep test to find a safe position for the camera (not blocked by static geometry) + btSphereShape cameraSphere(0.2f); + btTransform cameraFrom,cameraTo; + cameraFrom.setIdentity(); + cameraFrom.setOrigin(characterWorldTrans.getOrigin()); + cameraTo.setIdentity(); + cameraTo.setOrigin(m_cameraPosition); + + btCollisionWorld::ClosestConvexResultCallback cb( characterWorldTrans.getOrigin(), cameraTo.getOrigin() ); + cb.m_collisionFilterMask = btBroadphaseProxy::StaticFilter; + + m_dynamicsWorld->convexSweepTest(&cameraSphere,cameraFrom,cameraTo,cb); + if (cb.hasHit()) + { + + btScalar minFraction = cb.m_closestHitFraction;//btMax(btScalar(0.3),cb.m_closestHitFraction); + m_cameraPosition.setInterpolate3(cameraFrom.getOrigin(),cameraTo.getOrigin(),minFraction); + } + + + //update OpenGL camera settings glFrustum(-1.0, 1.0, -1.0, 1.0, 1.0, 10000.0); diff --git a/Demos/ContinuousConvexCollision/ContinuousConvexCollision.h b/Demos/ContinuousConvexCollision/ContinuousConvexCollision.h index 4e5e2c6ed..128c8c7ba 100644 --- a/Demos/ContinuousConvexCollision/ContinuousConvexCollision.h +++ b/Demos/ContinuousConvexCollision/ContinuousConvexCollision.h @@ -15,10 +15,16 @@ subject to the following restrictions: #ifndef CONTINUOUS_CONVEX_COLLISION_DEMO_H #define CONTINUOUS_CONVEX_COLLISION_DEMO_H -#include "GlutDemoApplication.h" + ///ContinuousConvexCollisionDemo shows the working of the continuous collision detection, including linear and angular motion +#ifdef _WINDOWS +#include "Win32DemoApplication.h" +class btContinuousConvexCollisionDemo : public Win32DemoApplication +#else +#include "GlutDemoApplication.h" class btContinuousConvexCollisionDemo : public GlutDemoApplication +#endif { public: diff --git a/Demos/ContinuousConvexCollision/ContinuousConvexCollisionDemo.cpp b/Demos/ContinuousConvexCollision/ContinuousConvexCollisionDemo.cpp index 350a3ad5a..3e9752e7c 100644 --- a/Demos/ContinuousConvexCollision/ContinuousConvexCollisionDemo.cpp +++ b/Demos/ContinuousConvexCollision/ContinuousConvexCollisionDemo.cpp @@ -63,7 +63,7 @@ btTransform toTrans[maxNumObjects]; int screenWidth = 640; int screenHeight = 480; - +#ifndef _WINDOWS int main(int argc,char** argv) { btContinuousConvexCollisionDemo* ccdDemo = new btContinuousConvexCollisionDemo(); @@ -74,6 +74,17 @@ int main(int argc,char** argv) return glutmain(argc, argv,screenWidth,screenHeight,"Continuous Convex Collision Demo",ccdDemo); } +#else +DemoApplication* createDemo() +{ + btContinuousConvexCollisionDemo* ccdDemo = new btContinuousConvexCollisionDemo(); + + ccdDemo->setCameraDistance(40.f); + return ccdDemo; + +} +#endif //_WINDOWS + void btContinuousConvexCollisionDemo::initPhysics() { @@ -280,8 +291,7 @@ void btContinuousConvexCollisionDemo::displayCallback(void) { } } - glFlush(); - glutSwapBuffers(); + swapBuffers(); } diff --git a/Demos/Gpu3dDemo/BasicDemo3d.cpp b/Demos/Gpu3dDemo/BasicDemo3d.cpp index 8f255fc69..dab45fc87 100644 --- a/Demos/Gpu3dDemo/BasicDemo3d.cpp +++ b/Demos/Gpu3dDemo/BasicDemo3d.cpp @@ -74,7 +74,7 @@ subject to the following restrictions: #define START_POS_Y 5 #define START_POS_Z 0 -#include "BasicDemo3D.h" +#include "BasicDemo3d.h" #include "GlutStuff.h" ///btBulletDynamicsCommon.h is the main Bullet include file, contains most common include files. #include "btBulletDynamicsCommon.h" diff --git a/Demos/Gpu3dDemo/btGpuDemoDynamicsWorld3D.h b/Demos/Gpu3dDemo/btGpuDemoDynamicsWorld3D.h index d13de52bf..74d08e017 100644 --- a/Demos/Gpu3dDemo/btGpuDemoDynamicsWorld3D.h +++ b/Demos/Gpu3dDemo/btGpuDemoDynamicsWorld3D.h @@ -45,7 +45,7 @@ subject to the following restrictions: #undef BT_GPU_PREF #endif -#include "btGpuDemo3DSharedTypes.h" +#include "btGpuDemo3dSharedTypes.h" //#define CUDA_DEMO_DYNAMICS_WORLD3D_MAX_BATCHES 20 #define CUDA_DEMO_DYNAMICS_WORLD3D_MAX_BATCHES 15 diff --git a/Demos/Gpu3dDemo/main.cpp b/Demos/Gpu3dDemo/main.cpp index b008463ea..b3ab3c73b 100644 --- a/Demos/Gpu3dDemo/main.cpp +++ b/Demos/Gpu3dDemo/main.cpp @@ -13,7 +13,7 @@ subject to the following restrictions: 3. This notice may not be removed or altered from any source distribution. */ -#include "BasicDemo3D.h" +#include "BasicDemo3d.h" #include "GlutStuff.h" #include "GLDebugDrawer.h" #include "btBulletDynamicsCommon.h" @@ -58,4 +58,4 @@ int main(int argc,char** argv) //default glut doesn't return from mainloop return 0; -} \ No newline at end of file +} diff --git a/Demos/OpenGL/DemoApplication.h b/Demos/OpenGL/DemoApplication.h index f8dc597b4..4a7826ad4 100644 --- a/Demos/OpenGL/DemoApplication.h +++ b/Demos/OpenGL/DemoApplication.h @@ -67,7 +67,9 @@ class DemoApplication int m_mouseOldX; int m_mouseOldY; int m_mouseButtons; +public: int m_modifierKeys; +protected: float m_scaleBottom; float m_scaleFactor; diff --git a/Demos/OpenGL/GlutStuff.h b/Demos/OpenGL/GlutStuff.h index 82f8d6221..c9e4651f8 100644 --- a/Demos/OpenGL/GlutStuff.h +++ b/Demos/OpenGL/GlutStuff.h @@ -25,9 +25,9 @@ subject to the following restrictions: #include #include #else -#ifndef _WINDOWS + #include -#else +#ifndef _WINDOWS #include #include #include @@ -49,6 +49,8 @@ subject to the following restrictions: #define BT_KEY_PAGEDOWN VK_NEXT #define BT_KEY_END VK_END #define BT_KEY_HOME VK_HOME +#define BT_ACTIVE_ALT VK_LMENU + #else diff --git a/Demos/OpenGL/Win32AppMain.cpp b/Demos/OpenGL/Win32AppMain.cpp index 4b23a47c0..5cacc5d5f 100644 --- a/Demos/OpenGL/Win32AppMain.cpp +++ b/Demos/OpenGL/Win32AppMain.cpp @@ -32,7 +32,6 @@ DemoApplication* gDemoApplication = 0; DemoApplication* createDemo(); - // Function Declarations LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); @@ -86,7 +85,8 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, gDemoApplication->myinit(); //gDemoApplication->reshape(1024, 768); gDemoApplication->initPhysics(); - gDemoApplication->getDynamicsWorld()->setDebugDrawer(&debugDraw); + if (gDemoApplication->getDynamicsWorld()) + gDemoApplication->getDynamicsWorld()->setDebugDrawer(&debugDraw); // program main loop @@ -146,10 +146,35 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { + + switch (message) { + + case WM_SYSKEYDOWN: + { + if (lParam & 1<<29) + { + gDemoApplication->m_modifierKeys = VK_LMENU; + } + break; + } + case WM_SYSKEYUP: + { + if (lParam & 1<<29) + { + gDemoApplication->m_modifierKeys = VK_LMENU; + } else + { + gDemoApplication->m_modifierKeys = 0; + } + + break; + } + case WM_SIZE: // Size Action Has Taken Place + switch (wParam) // Evaluate Size Action { case SIZE_MINIMIZED: // Was Window Minimized? diff --git a/Demos/OpenGL/Win32DemoApplication.cpp b/Demos/OpenGL/Win32DemoApplication.cpp index 00eb02a7b..31a20e7c1 100644 --- a/Demos/OpenGL/Win32DemoApplication.cpp +++ b/Demos/OpenGL/Win32DemoApplication.cpp @@ -41,6 +41,12 @@ void Win32DemoApplication::clientResetScene() } #endif +void Win32DemoApplication::updateModifierKeys() +{ + //not yet +} + + void Win32DemoApplication::specialKeyboard(int key, int x, int y) { diff --git a/Demos/OpenGL/Win32DemoApplication.h b/Demos/OpenGL/Win32DemoApplication.h index 712b38191..4d2daac9a 100644 --- a/Demos/OpenGL/Win32DemoApplication.h +++ b/Demos/OpenGL/Win32DemoApplication.h @@ -32,6 +32,7 @@ public: void specialKeyboard(int key, int x, int y); + virtual void updateModifierKeys(); }; diff --git a/INSTALL b/INSTALL index d1057097f..2974f86a5 100644 --- a/INSTALL +++ b/INSTALL @@ -1,38 +1,100 @@ -Bullet Collision Detection and Physics Library - -Compile - -Under Windows, projectfiles for Visual Studio version 6,7,7.1 and 8 are available in msvc/. -For example, for Visual Studio 2005, open msvc/8/wksbullet.sln - -The ColladaDemo and ConvexDecomposition demo needs to be able to locate the data files (jenga.dae and file.obj) in the current directory. Make sure Visual Studio points to the right folder (..\..). - - -For other systems, for example Linux or Mac OS-X: - -Download/install CMake from www.cmake.org, and run cmake . -G Xcode (or replace Xcode with other available buildsystem). - -Alternatively use make or jam: - -./autogen.sh - -./configure - -jam or make - -If jam is not available for your system, you can compile it, jam sources are included with the Bullet sources in jam-2.5 - -compiling jam: - -cd jam-2.5 - -make - -(as root) - -su - -make install - -For more help, visit http://www.continuousphysics.com - +Bullet Collision Detection and Physics Library + +** Windows Compilation ** + +Under Windows, projectfiles for Visual Studio version 6,7,7.1 and 8 are +available in msvc/. For example, for Visual Studio 2005, open +msvc/8/wksbullet.sln + +The ColladaDemo and ConvexDecomposition demo needs to be able to locate the +data files (jenga.dae and file.obj) in the current directory. Make sure Visual +Studio points to the right folder (..\..). + +Alternatively use CMake to autogenerate a build system for Windows: + + - Download/install CMake from www.cmake.org or package manager + - List available build systems by running 'cmake' in the Bullet root folder + - Create a build system using the -G option for example: + + cmake . -G "Visual Studio 9 2008" or + cmake . -G "Visual Studio 9 2008 Win64" + + +** Linux Compilation ** + + - Download/install CMake from www.cmake.org or package manager + CMake is like autoconf in that it will create build scripts which are then + used for the actual compilation + + - There are some options for cmake builds: + BUILD_SHARED_LIBS: default 'OFF', set to 'ON' to build .so libraries + BUILD_EXTRAS: default 'ON', compiles additional libraries in 'Extras' + BUILD_DEMOS: default 'ON', compiles applications found in 'Demos' + CMAKE_INSTALL_PREFIX: default '/usr/local', the installation path. + CMAKE_INSTALL_RPATH: if you install outside a standard ld search path, + then you should set this to the installation lib path. + Other options may be discovered by 'cmake --help-variable-list' and + 'cmake --help-variable OPTION' + + - Run 'cmake' with desired options of the form -DOPTION=VALUE + By default this will create the usual Makefile build system, but CMake can + also produce Eclipse or KDevelop project files. See 'cmake --help' to see + what "generators" are available in your environment, selected via '-G'. + For example: + cmake -DBUILD_SHARED_LIBS=ON + + - Assuming using the default Makefile output from cmake, run 'make' to + build, and then 'make install' if you wish to install. + + +** Mac OS X Compilation ** + + - Download/install CMake from www.cmake.org or package manager + CMake is like autoconf in that it will create build scripts which are then + used for the actual compilation + + - There are some options for cmake builds: + BUILD_SHARED_LIBS: default 'OFF', set to 'ON' to build .dylib libraries + BUILD_EXTRAS: default 'ON', compiles additional libraries in 'Extras' + BUILD_DEMOS: default 'ON', compiles applications found in 'Demos' + CMAKE_INSTALL_PREFIX: default '/usr/local', the installation path. + CMAKE_INSTALL_NAME_DIR: if you install outside a standard ld search + path, then you should set this to the installation lib/framework path. + + To build framework bundles: + FRAMEWORK: default 'OFF', also requires 'BUILD_SHARED_LIBS' set ON + If both FRAMEWORK and BUILD_SHARED_LIBS are set, will create + OS X style Framework Bundles which can be placed in + linked via the -framework gcc argument or drag into Xcode projects. + (If not framework, then UNIX style 'include' and 'lib' will be produced) + + Other options may be discovered by 'cmake --help-variable-list' and + 'cmake --help-variable OPTION' + + - Run 'cmake' with desired options of the form -DOPTION=VALUE + By default this will create the usual Makefile build system, but CMake can + also produce Eclipse or KDevelop project files. See 'cmake --help' to see + what "generators" are available in your environment, selected via '-G'. + For example: + cmake -DBUILD_SHARED_LIBS=ON -DFRAMEWORK=ON \ + -DCMAKE_INSTALL_PREFIX=/Library/Frameworks \ + -DCMAKE_INSTALL_NAME_DIR=/Library/Frameworks + + - Assuming using the default Makefile output from cmake, run 'make' to build + and then 'make install'. + + +** Alternative Mac OS X and Linux via 'jam' or autoconf/make ** + - at the command line: + ./autogen.sh + ./configure + - 'jam' or 'make' depending on preference + - If jam is not available for your system, you can compile it, jam sources + are included with the Bullet sources in jam-2.5 + - compiling jam: + cd jam-2.5 + make + sudo make install + + +** For more help, visit http://www.bulletphysics.com ** diff --git a/src/BulletCollision/CMakeLists.txt b/src/BulletCollision/CMakeLists.txt index 4b4304f43..817d4813b 100644 --- a/src/BulletCollision/CMakeLists.txt +++ b/src/BulletCollision/CMakeLists.txt @@ -4,31 +4,31 @@ SET(BulletCollision_SRCS BroadphaseCollision/btAxisSweep3.cpp BroadphaseCollision/btBroadphaseProxy.cpp BroadphaseCollision/btCollisionAlgorithm.cpp - BroadphaseCollision/btDispatcher.cpp - BroadphaseCollision/btDbvtBroadphase.cpp BroadphaseCollision/btDbvt.cpp + BroadphaseCollision/btDbvtBroadphase.cpp + BroadphaseCollision/btDispatcher.cpp BroadphaseCollision/btMultiSapBroadphase.cpp BroadphaseCollision/btOverlappingPairCache.cpp BroadphaseCollision/btQuantizedBvh.cpp BroadphaseCollision/btSimpleBroadphase.cpp CollisionDispatch/btActivatingCollisionAlgorithm.cpp + CollisionDispatch/btBoxBoxCollisionAlgorithm.cpp + CollisionDispatch/btBoxBoxDetector.cpp CollisionDispatch/btCollisionDispatcher.cpp CollisionDispatch/btCollisionObject.cpp CollisionDispatch/btCollisionWorld.cpp CollisionDispatch/btCompoundCollisionAlgorithm.cpp CollisionDispatch/btConvexConcaveCollisionAlgorithm.cpp - CollisionDispatch/btDefaultCollisionConfiguration.cpp - CollisionDispatch/btSphereSphereCollisionAlgorithm.cpp - CollisionDispatch/btBoxBoxCollisionAlgorithm.cpp - CollisionDispatch/btBoxBoxDetector.cpp - CollisionDispatch/btGhostObject.cpp - CollisionDispatch/btSphereBoxCollisionAlgorithm.cpp - CollisionDispatch/btConvexPlaneCollisionAlgorithm.cpp - CollisionDispatch/btSphereTriangleCollisionAlgorithm.cpp CollisionDispatch/btConvexConvexAlgorithm.cpp + CollisionDispatch/btConvexPlaneCollisionAlgorithm.cpp + CollisionDispatch/btDefaultCollisionConfiguration.cpp CollisionDispatch/btEmptyCollisionAlgorithm.cpp + CollisionDispatch/btGhostObject.cpp CollisionDispatch/btManifoldResult.cpp CollisionDispatch/btSimulationIslandManager.cpp + CollisionDispatch/btSphereBoxCollisionAlgorithm.cpp + CollisionDispatch/btSphereSphereCollisionAlgorithm.cpp + CollisionDispatch/btSphereTriangleCollisionAlgorithm.cpp CollisionDispatch/btUnionFind.cpp CollisionDispatch/SphereTriangleDetector.cpp CollisionShapes/btBoxShape.cpp @@ -39,9 +39,9 @@ SET(BulletCollision_SRCS CollisionShapes/btConcaveShape.cpp CollisionShapes/btConeShape.cpp CollisionShapes/btConvexHullShape.cpp + CollisionShapes/btConvexInternalShape.cpp CollisionShapes/btConvexPointCloudShape.cpp CollisionShapes/btConvexShape.cpp - CollisionShapes/btConvexInternalShape.cpp CollisionShapes/btConvexTriangleMeshShape.cpp CollisionShapes/btCylinderShape.cpp CollisionShapes/btEmptyShape.cpp @@ -52,34 +52,34 @@ SET(BulletCollision_SRCS CollisionShapes/btOptimizedBvh.cpp CollisionShapes/btPolyhedralConvexShape.cpp CollisionShapes/btScaledBvhTriangleMeshShape.cpp - CollisionShapes/btTetrahedronShape.cpp - CollisionShapes/btSphereShape.cpp CollisionShapes/btShapeHull.cpp + CollisionShapes/btSphereShape.cpp CollisionShapes/btStaticPlaneShape.cpp CollisionShapes/btStridingMeshInterface.cpp - CollisionShapes/btTriangleCallback.cpp + CollisionShapes/btTetrahedronShape.cpp CollisionShapes/btTriangleBuffer.cpp + CollisionShapes/btTriangleCallback.cpp CollisionShapes/btTriangleIndexVertexArray.cpp CollisionShapes/btTriangleIndexVertexMaterialArray.cpp CollisionShapes/btTriangleMesh.cpp CollisionShapes/btTriangleMeshShape.cpp CollisionShapes/btUniformScalingShape.cpp Gimpact/btContactProcessing.cpp - Gimpact/btGImpactShape.cpp - Gimpact/gim_contact.cpp - Gimpact/btGImpactBvh.cpp Gimpact/btGenericPoolAllocator.cpp - Gimpact/gim_memory.cpp + Gimpact/btGImpactBvh.cpp Gimpact/btGImpactCollisionAlgorithm.cpp - Gimpact/btTriangleShapeEx.cpp - Gimpact/gim_tri_collision.cpp Gimpact/btGImpactQuantizedBvh.cpp + Gimpact/btGImpactShape.cpp + Gimpact/btTriangleShapeEx.cpp Gimpact/gim_box_set.cpp + Gimpact/gim_contact.cpp + Gimpact/gim_memory.cpp + Gimpact/gim_tri_collision.cpp NarrowPhaseCollision/btContinuousConvexCollision.cpp - NarrowPhaseCollision/btGjkEpa2.cpp - NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.cpp NarrowPhaseCollision/btConvexCast.cpp NarrowPhaseCollision/btGjkConvexCast.cpp + NarrowPhaseCollision/btGjkEpa2.cpp + NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.cpp NarrowPhaseCollision/btGjkPairDetector.cpp NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.cpp NarrowPhaseCollision/btPersistentManifold.cpp @@ -96,9 +96,9 @@ SET(BroadphaseCollision_HDRS BroadphaseCollision/btBroadphaseInterface.h BroadphaseCollision/btBroadphaseProxy.h BroadphaseCollision/btCollisionAlgorithm.h - BroadphaseCollision/btDispatcher.h - BroadphaseCollision/btDbvtBroadphase.h BroadphaseCollision/btDbvt.h + BroadphaseCollision/btDbvtBroadphase.h + BroadphaseCollision/btDispatcher.h BroadphaseCollision/btMultiSapBroadphase.h BroadphaseCollision/btOverlappingPairCache.h BroadphaseCollision/btOverlappingPairCallback.h @@ -107,6 +107,8 @@ SET(BroadphaseCollision_HDRS ) SET(CollisionDispatch_HDRS CollisionDispatch/btActivatingCollisionAlgorithm.h + CollisionDispatch/btBoxBoxCollisionAlgorithm.h + CollisionDispatch/btBoxBoxDetector.h CollisionDispatch/btCollisionConfiguration.h CollisionDispatch/btCollisionCreateFunc.h CollisionDispatch/btCollisionDispatcher.h @@ -114,18 +116,16 @@ SET(CollisionDispatch_HDRS CollisionDispatch/btCollisionWorld.h CollisionDispatch/btCompoundCollisionAlgorithm.h CollisionDispatch/btConvexConcaveCollisionAlgorithm.h - CollisionDispatch/btDefaultCollisionConfiguration.h - CollisionDispatch/btSphereSphereCollisionAlgorithm.h - CollisionDispatch/btBoxBoxCollisionAlgorithm.h - CollisionDispatch/btBoxBoxDetector.h - CollisionDispatch/btGhostObject.h - CollisionDispatch/btSphereBoxCollisionAlgorithm.h - CollisionDispatch/btConvexPlaneCollisionAlgorithm.h - CollisionDispatch/btSphereTriangleCollisionAlgorithm.h CollisionDispatch/btConvexConvexAlgorithm.h + CollisionDispatch/btConvexPlaneCollisionAlgorithm.h + CollisionDispatch/btDefaultCollisionConfiguration.h CollisionDispatch/btEmptyCollisionAlgorithm.h + CollisionDispatch/btGhostObject.h CollisionDispatch/btManifoldResult.h CollisionDispatch/btSimulationIslandManager.h + CollisionDispatch/btSphereBoxCollisionAlgorithm.h + CollisionDispatch/btSphereSphereCollisionAlgorithm.h + CollisionDispatch/btSphereTriangleCollisionAlgorithm.h CollisionDispatch/btUnionFind.h CollisionDispatch/SphereTriangleDetector.h ) @@ -133,50 +133,68 @@ SET(CollisionShapes_HDRS CollisionShapes/btBoxShape.h CollisionShapes/btBvhTriangleMeshShape.h CollisionShapes/btCapsuleShape.h - CollisionShapes/btCollisionMargin + CollisionShapes/btCollisionMargin.h CollisionShapes/btCollisionShape.h CollisionShapes/btCompoundShape.h CollisionShapes/btConcaveShape.h CollisionShapes/btConeShape.h CollisionShapes/btConvexHullShape.h + CollisionShapes/btConvexInternalShape.h CollisionShapes/btConvexPointCloudShape.h CollisionShapes/btConvexShape.h - CollisionShapes/btConvexInternalShape.h CollisionShapes/btConvexTriangleMeshShape.h CollisionShapes/btCylinderShape.h CollisionShapes/btEmptyShape.h CollisionShapes/btHeightfieldTerrainShape.h - CollisionShapes/btMinkowskiSumShape.h CollisionShapes/btMaterial.h + CollisionShapes/btMinkowskiSumShape.h CollisionShapes/btMultimaterialTriangleMeshShape.h CollisionShapes/btMultiSphereShape.h CollisionShapes/btOptimizedBvh.h CollisionShapes/btPolyhedralConvexShape.h CollisionShapes/btScaledBvhTriangleMeshShape.h - CollisionShapes/btTetrahedronShape.h - CollisionShapes/btSphereShape.h CollisionShapes/btShapeHull.h + CollisionShapes/btSphereShape.h CollisionShapes/btStaticPlaneShape.h CollisionShapes/btStridingMeshInterface.h - CollisionShapes/btTriangleCallback.h + CollisionShapes/btTetrahedronShape.h CollisionShapes/btTriangleBuffer.h + CollisionShapes/btTriangleCallback.h CollisionShapes/btTriangleIndexVertexArray.h CollisionShapes/btTriangleIndexVertexMaterialArray.h CollisionShapes/btTriangleMesh.h CollisionShapes/btTriangleMeshShape.h + CollisionShapes/btTriangleShape.h CollisionShapes/btUniformScalingShape.h ) SET(Gimpact_HDRS - Gimpact/btGImpactShape.h - Gimpact/gim_contact.h - Gimpact/btGImpactBvh.h + Gimpact/btBoxCollision.h + Gimpact/btClipPolygon.h + Gimpact/btContactProcessing.h Gimpact/btGenericPoolAllocator.h - Gimpact/gim_memory.h + Gimpact/btGeometryOperations.h + Gimpact/btGImpactBvh.h Gimpact/btGImpactCollisionAlgorithm.h - Gimpact/btTriangleShapeEx.h - Gimpact/gim_tri_collision.h + Gimpact/btGImpactMassUtil.h Gimpact/btGImpactQuantizedBvh.h + Gimpact/btGImpactShape.h + Gimpact/btQuantization.h + Gimpact/btTriangleShapeEx.h + Gimpact/gim_array.h + Gimpact/gim_basic_geometry_operations.h + Gimpact/gim_bitset.h + Gimpact/gim_box_collision.h Gimpact/gim_box_set.h + Gimpact/gim_clip_polygon.h + Gimpact/gim_contact.h + Gimpact/gim_geom_types.h + Gimpact/gim_geometry.h + Gimpact/gim_hash_table.h + Gimpact/gim_linear_math.h + Gimpact/gim_math.h + Gimpact/gim_memory.h + Gimpact/gim_radixsort.h + Gimpact/gim_tri_collision.h ) SET(NarrowPhaseCollision_HDRS NarrowPhaseCollision/btContinuousConvexCollision.h @@ -214,10 +232,17 @@ IF (BUILD_SHARED_LIBS) TARGET_LINK_LIBRARIES(BulletCollision LinearMath) ENDIF (BUILD_SHARED_LIBS) + + + #INSTALL of other files requires CMake 2.6 IF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5) + IF (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) + INSTALL(TARGETS BulletCollision DESTINATION .) + ELSE (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) INSTALL(TARGETS BulletCollision DESTINATION lib) INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} DESTINATION include FILES_MATCHING PATTERN "*.h") + ENDIF (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) ENDIF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5) IF (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) diff --git a/src/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.h b/src/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.h index 453472aa0..2a418de37 100644 --- a/src/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.h +++ b/src/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.h @@ -298,7 +298,7 @@ public: //algorithm details -//#define BULLET_TRIANGLE_COLLISION 1 +#define BULLET_TRIANGLE_COLLISION 1 #define GIMPACT_VS_PLANE_COLLISION 1 diff --git a/src/BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.cpp b/src/BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.cpp index fcbba5484..bbee73dea 100644 --- a/src/BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.cpp +++ b/src/BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.cpp @@ -47,6 +47,7 @@ bool btGjkEpaPenetrationDepthSolver::calcPenDepth( btSimplexSolverInterface& sim //resultOut->addContactPoint(results.normal,results.witnesses[1],-results.depth); wWitnessOnA = results.witnesses[0]; wWitnessOnB = results.witnesses[1]; + v = results.normal; return true; } else { @@ -54,6 +55,7 @@ bool btGjkEpaPenetrationDepthSolver::calcPenDepth( btSimplexSolverInterface& sim { wWitnessOnA = results.witnesses[0]; wWitnessOnB = results.witnesses[1]; + v = results.normal; return false; } } diff --git a/src/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.cpp b/src/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.cpp index 2b17d8126..c7baf80eb 100644 --- a/src/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.cpp +++ b/src/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.cpp @@ -310,28 +310,18 @@ void btGjkPairDetector::getClosestPoints(const ClosestPointInput& input,Result& if (isValid2) { - btVector3 tmpNormalInB = tmpPointOnB-tmpPointOnA; - btScalar lenSqr = tmpNormalInB.length2(); - if (lenSqr > (SIMD_EPSILON*SIMD_EPSILON)) + btScalar distance2 = -(tmpPointOnA-tmpPointOnB).length(); + //only replace valid penetrations when the result is deeper (check) + if (!isValid || (distance2 < distance)) { - tmpNormalInB /= btSqrt(lenSqr); - btScalar distance2 = -(tmpPointOnA-tmpPointOnB).length(); - //only replace valid penetrations when the result is deeper (check) - if (!isValid || (distance2 < distance)) - { - distance = distance2; - pointOnA = tmpPointOnA; - pointOnB = tmpPointOnB; - normalInB = tmpNormalInB; - isValid = true; - m_lastUsedMethod = 3; - } else - { - - } - } else + distance = distance2; + pointOnA = tmpPointOnA; + pointOnB = tmpPointOnB; + normalInB = m_cachedSeparatingAxis; + isValid = true; + m_lastUsedMethod = 3; + } else { - //isValid = false; m_lastUsedMethod = 4; } } else @@ -342,29 +332,23 @@ void btGjkPairDetector::getClosestPoints(const ClosestPointInput& input,Result& ///thanks to Jacob.Langford for the reproduction case ///http://code.google.com/p/bullet/issues/detail?id=250 - btVector3 tmpNormalInB = tmpPointOnA - tmpPointOnB; - btScalar lenSqr = tmpNormalInB.length2(); - if (lenSqr > (SIMD_EPSILON*SIMD_EPSILON)) + + btScalar distance2 = (tmpPointOnA-tmpPointOnB).length()-margin; + //only replace valid distances when the distance is less + if (!isValid || (distance2 < distance)) { - tmpNormalInB /= btSqrt(lenSqr); - btScalar distance2 = (tmpPointOnA-tmpPointOnB).length()-margin; - //only replace valid distances when the distance is less - if (!isValid || (distance2 < distance)) - { - distance = distance2; - pointOnA = tmpPointOnA; - pointOnB = tmpPointOnB; - pointOnA -= tmpNormalInB * marginA ; - pointOnB += tmpNormalInB * marginB ; - normalInB = tmpNormalInB; - isValid = true; - m_lastUsedMethod = 6; - } else - { - - } + distance = distance2; + pointOnA = tmpPointOnA; + pointOnB = tmpPointOnB; + pointOnA -= m_cachedSeparatingAxis * marginA ; + pointOnB += m_cachedSeparatingAxis * marginB ; + normalInB = m_cachedSeparatingAxis; + isValid = true; + m_lastUsedMethod = 6; + } else + { + m_lastUsedMethod = 5; } - m_lastUsedMethod = 5; } } diff --git a/src/BulletDynamics/CMakeLists.txt b/src/BulletDynamics/CMakeLists.txt index ecbfe87d0..e4fd766a3 100644 --- a/src/BulletDynamics/CMakeLists.txt +++ b/src/BulletDynamics/CMakeLists.txt @@ -3,25 +3,26 @@ INCLUDE_DIRECTORIES( ${BULLET_PHYSICS_SOURCE_DIR}/src } ) SET(BulletDynamics_SRCS + Character/btKinematicCharacterController.cpp + ConstraintSolver/btConeTwistConstraint.cpp + ConstraintSolver/btContactConstraint.cpp + ConstraintSolver/btGeneric6DofConstraint.cpp ConstraintSolver/btGeneric6DofSpringConstraint.cpp ConstraintSolver/btHinge2Constraint.cpp - ConstraintSolver/btUniversalConstraint.cpp - ConstraintSolver/btContactConstraint.cpp - ConstraintSolver/btConeTwistConstraint.cpp - ConstraintSolver/btGeneric6DofConstraint.cpp ConstraintSolver/btHingeConstraint.cpp ConstraintSolver/btPoint2PointConstraint.cpp ConstraintSolver/btSequentialImpulseConstraintSolver.cpp ConstraintSolver/btSliderConstraint.cpp ConstraintSolver/btSolve2LinearConstraint.cpp ConstraintSolver/btTypedConstraint.cpp - Dynamics/Bullet-C-API.cpp + ConstraintSolver/btUniversalConstraint.cpp + Dynamics/btContinuousDynamicsWorld.cpp Dynamics/btDiscreteDynamicsWorld.cpp - Dynamics/btSimpleDynamicsWorld.cpp Dynamics/btRigidBody.cpp + Dynamics/btSimpleDynamicsWorld.cpp + Dynamics/Bullet-C-API.cpp Vehicle/btRaycastVehicle.cpp Vehicle/btWheelInfo.cpp - Character/btKinematicCharacterController.cpp ) SET(Root_HDRS @@ -29,14 +30,13 @@ SET(Root_HDRS ../btBulletCollisionCommon.h ) SET(ConstraintSolver_HDRS - ConstraintSolver/btGeneric6DofSpringConstraint.h - ConstraintSolver/btHinge2Constraint.h - ConstraintSolver/btUniversalConstraint.h + ConstraintSolver/btConeTwistConstraint.h ConstraintSolver/btConstraintSolver.h ConstraintSolver/btContactConstraint.h ConstraintSolver/btContactSolverInfo.h - ConstraintSolver/btConeTwistConstraint.h ConstraintSolver/btGeneric6DofConstraint.h + ConstraintSolver/btGeneric6DofSpringConstraint.h + ConstraintSolver/btHinge2Constraint.h ConstraintSolver/btHingeConstraint.h ConstraintSolver/btJacobianEntry.h ConstraintSolver/btPoint2PointConstraint.h @@ -46,8 +46,10 @@ SET(ConstraintSolver_HDRS ConstraintSolver/btSolverBody.h ConstraintSolver/btSolverConstraint.h ConstraintSolver/btTypedConstraint.h + ConstraintSolver/btUniversalConstraint.h ) SET(Dynamics_HDRS + Dynamics/btActionInterface.h Dynamics/btContinuousDynamicsWorld.h Dynamics/btDiscreteDynamicsWorld.h Dynamics/btDynamicsWorld.h @@ -84,8 +86,12 @@ IF (BUILD_SHARED_LIBS) ENDIF (BUILD_SHARED_LIBS) IF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5) + IF (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) + INSTALL(TARGETS BulletDynamics DESTINATION .) + ELSE (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) INSTALL(TARGETS BulletDynamics DESTINATION lib) INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} DESTINATION include FILES_MATCHING PATTERN "*.h") + ENDIF (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) ENDIF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5) IF (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) diff --git a/src/BulletSoftBody/CMakeLists.txt b/src/BulletSoftBody/CMakeLists.txt index dbd87afea..70f0fb446 100644 --- a/src/BulletSoftBody/CMakeLists.txt +++ b/src/BulletSoftBody/CMakeLists.txt @@ -5,22 +5,23 @@ ${BULLET_PHYSICS_SOURCE_DIR}/src } SET(BulletSoftBody_SRCS btSoftBody.cpp + btSoftBodyConcaveCollisionAlgorithm.cpp btSoftBodyHelpers.cpp btSoftBodyRigidBodyCollisionConfiguration.cpp btSoftRigidCollisionAlgorithm.cpp - btSoftSoftCollisionAlgorithm.cpp - btSoftBodyConcaveCollisionAlgorithm.cpp btSoftRigidDynamicsWorld.cpp + btSoftSoftCollisionAlgorithm.cpp ) SET(BulletSoftBody_HDRS btSoftBody.h - btSparseSDF.h - btSoftBodyHelpers.h - btSoftRigidCollisionAlgorithm.h - btSoftSoftCollisionAlgorithm.h btSoftBodyConcaveCollisionAlgorithm.h + btSoftBodyHelpers.h + btSoftBodyRigidBodyCollisionConfiguration.h + btSoftRigidCollisionAlgorithm.h btSoftRigidDynamicsWorld.h + btSoftSoftCollisionAlgorithm.h + btSparseSDF.h ) @@ -33,8 +34,12 @@ IF (BUILD_SHARED_LIBS) ENDIF (BUILD_SHARED_LIBS) IF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5) + IF (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) + INSTALL(TARGETS BulletSoftBody DESTINATION .) + ELSE (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) INSTALL(TARGETS BulletSoftBody DESTINATION lib) INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} DESTINATION include FILES_MATCHING PATTERN "*.h") + ENDIF (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) ENDIF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5) IF (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c6a72b9f3..d901bb341 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -6,6 +6,10 @@ endif (CMAKE_SIZEOF_VOID_P MATCHES "8") #INSTALL of other files requires CMake 2.6 IF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5) + IF (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) + # Don't actually need to install any common files, the frameworks include everything + ELSE (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) INSTALL(FILES btBulletCollisionCommon.h btBulletDynamicsCommon.h Bullet-C-Api.h DESTINATION include) + ENDIF (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) ENDIF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5) diff --git a/src/LinearMath/CMakeLists.txt b/src/LinearMath/CMakeLists.txt index 99d5a6a2f..e93add4dd 100644 --- a/src/LinearMath/CMakeLists.txt +++ b/src/LinearMath/CMakeLists.txt @@ -1,38 +1,38 @@ INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src } + ${BULLET_PHYSICS_SOURCE_DIR}/src } ) SET(LinearMath_SRCS + btAlignedAllocator.cpp btConvexHull.cpp - btQuickprof.cpp btGeometryUtil.cpp - btAlignedAllocator.cpp + btQuickprof.cpp ) SET(LinearMath_HDRS + btAabbUtil2.h + btAlignedAllocator.h btAlignedObjectArray.h - btList.h - btPoolAllocator.h - btRandom.h - btVector3.h + btConvexHull.h btDefaultMotionState.h - btMatrix3x3.h - btQuadWord.h + btGeometryUtil.h btHashMap.h - btScalar.h - btAabbUtil2.h - btConvexHull.h + btIDebugDraw.h + btList.h + btMatrix3x3.h btMinMax.h + btMotionState.h + btPoolAllocator.h + btQuadWord.h btQuaternion.h + btQuickprof.h + btRandom.h + btScalar.h btStackAlloc.h - btGeometryUtil.h - btMotionState.h btTransform.h - btAlignedAllocator.h - btIDebugDraw.h - btQuickprof.h btTransformUtil.h + btVector3.h ) ADD_LIBRARY(LinearMath ${LinearMath_SRCS} ${LinearMath_HDRS}) @@ -41,8 +41,12 @@ SET_TARGET_PROPERTIES(LinearMath PROPERTIES SOVERSION ${BULLET_VERSION}) #FILES_MATCHING requires CMake 2.6 IF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5) + IF (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) + INSTALL(TARGETS LinearMath DESTINATION .) + ELSE (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) INSTALL(TARGETS LinearMath DESTINATION lib) INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} DESTINATION include FILES_MATCHING PATTERN "*.h") + ENDIF (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) ENDIF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5) IF (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK)