diff --git a/Demos/AllBulletDemos/CMakeLists.txt b/Demos/AllBulletDemos/CMakeLists.txt index b3df8eea3..4367ca3a5 100644 --- a/Demos/AllBulletDemos/CMakeLists.txt +++ b/Demos/AllBulletDemos/CMakeLists.txt @@ -49,11 +49,11 @@ ELSE (WIN32) ENDIF (WIN32) INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/Extras/BulletColladaConverter ${BULLET_PHYSICS_SOURCE_DIR}/Extras ${BULLET_PHYSICS_SOURCE_DIR}/Extras/GIMPACT/include ${BULLET_PHYSICS_SOURCE_DIR}/Extras/GIMPACTUtils ${BULLET_PHYSICS_SOURCE_DIR}/Extras/ConvexDecomposition ${BULLET_PHYSICS_SOURCE_DIR}/Extras/ConvexHull ${BULLET_PHYSICS_SOURCE_DIR}/Extras/LibXML ${BULLET_PHYSICS_SOURCE_DIR}/Extras/LibXML/include ${BULLET_PHYSICS_SOURCE_DIR}/Extras/COLLADA_DOM/include/1.4 ${BULLET_PHYSICS_SOURCE_DIR}/Extras/COLLADA_DOM/include ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL } +${BULLET_PHYSICS_SOURCE_DIR}/Extras/BulletColladaConverter ${BULLET_PHYSICS_SOURCE_DIR}/Extras ${BULLET_PHYSICS_SOURCE_DIR}/Extras/GIMPACT/include ${BULLET_PHYSICS_SOURCE_DIR}/Extras/GIMPACTUtils ${BULLET_PHYSICS_SOURCE_DIR}/Extras/ConvexDecomposition ${BULLET_PHYSICS_SOURCE_DIR}/Extras/LibXML ${BULLET_PHYSICS_SOURCE_DIR}/Extras/LibXML/include ${BULLET_PHYSICS_SOURCE_DIR}/Extras/COLLADA_DOM/include/1.4 ${BULLET_PHYSICS_SOURCE_DIR}/Extras/COLLADA_DOM/include ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL } ) LINK_LIBRARIES( -LibBulletColladaConverter LibGLUI LibGIMPACTUtils LibGIMPACT LibConvexDecomposition LibColladaDom LibXML LibOpenGLSupport LibConvexHull LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} +LibBulletColladaConverter LibGLUI LibGIMPACTUtils LibGIMPACT LibConvexDecomposition LibColladaDom LibXML LibOpenGLSupport LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ) ADD_EXECUTABLE(AllBulletDemos diff --git a/Demos/AllBulletDemos/Jamfile b/Demos/AllBulletDemos/Jamfile index 31e0c08d8..46ab6a77d 100644 --- a/Demos/AllBulletDemos/Jamfile +++ b/Demos/AllBulletDemos/Jamfile @@ -19,8 +19,5 @@ FrameWorkDemo AllBulletDemos : ../GjkConvexCastDemo/LinearConvexCastDemo.cpp ../VehicleDemo/VehicleDemo.cpp ../SoftDemo/SoftDemo.cpp - ../SoftDemo/btSoftBodyRigidBodyCollisionConfiguration.cpp - ../SoftDemo/btSoftSoftCollisionAlgorithm.cpp - ../SoftDemo/btSoftRigidCollisionAlgorithm.cpp ../ConstraintDemo/ConstraintDemo.cpp ; diff --git a/Demos/BasicDemo/CMakeLists.txt b/Demos/BasicDemo/CMakeLists.txt index f59647bd5..be7e84bed 100644 --- a/Demos/BasicDemo/CMakeLists.txt +++ b/Demos/BasicDemo/CMakeLists.txt @@ -52,7 +52,7 @@ ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL } ) LINK_LIBRARIES( -LibOpenGLSupport LibConvexHull LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} +LibOpenGLSupport LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ) ADD_EXECUTABLE(BasicDemo diff --git a/Demos/Benchmarks/CMakeLists.txt b/Demos/Benchmarks/CMakeLists.txt index 39eea47f1..5b4227394 100644 --- a/Demos/Benchmarks/CMakeLists.txt +++ b/Demos/Benchmarks/CMakeLists.txt @@ -52,7 +52,7 @@ ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL } ) LINK_LIBRARIES( -LibOpenGLSupport LibConvexHull LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} +LibOpenGLSupport LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ) ADD_EXECUTABLE(Benchmarks diff --git a/Demos/BspDemo/CMakeLists.txt b/Demos/BspDemo/CMakeLists.txt index 57016da0b..3d7bb54dc 100644 --- a/Demos/BspDemo/CMakeLists.txt +++ b/Demos/BspDemo/CMakeLists.txt @@ -52,7 +52,7 @@ ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL } ) LINK_LIBRARIES( - LibOpenGLSupport LibConvexHull LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} + LibOpenGLSupport LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ) ADD_EXECUTABLE(BspPhysicsDemo diff --git a/Demos/CMakeLists.txt b/Demos/CMakeLists.txt index 0b6040ba0..142053f05 100644 --- a/Demos/CMakeLists.txt +++ b/Demos/CMakeLists.txt @@ -1,2 +1,2 @@ -SUBDIRS( OpenGL AllBulletDemos ConvexDecompositionDemo Benchmarks HelloWorld MultiThreadedDemo CcdPhysicsDemo ConstraintDemo GenericJointDemo RagdollDemo BasicDemo BspDemo MovingConcaveDemo VehicleDemo ColladaDemo UserCollisionAlgorithm CharacterDemo SoftDemo ) +SUBDIRS( OpenGL AllBulletDemos ConvexDecompositionDemo Benchmarks HelloWorld MultiThreadedDemo CcdPhysicsDemo ConstraintDemo SliderConstraintDemo GenericJointDemo RagdollDemo BasicDemo BspDemo MovingConcaveDemo VehicleDemo ColladaDemo UserCollisionAlgorithm CharacterDemo SoftDemo ) diff --git a/Demos/CcdPhysicsDemo/CMakeLists.txt b/Demos/CcdPhysicsDemo/CMakeLists.txt index 22ae02c25..b30a05796 100644 --- a/Demos/CcdPhysicsDemo/CMakeLists.txt +++ b/Demos/CcdPhysicsDemo/CMakeLists.txt @@ -52,7 +52,7 @@ ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL } ) LINK_LIBRARIES( -LibOpenGLSupport LibConvexHull LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} +LibOpenGLSupport LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ) ADD_EXECUTABLE(CcdPhysicsDemo diff --git a/Demos/CharacterDemo/CMakeLists.txt b/Demos/CharacterDemo/CMakeLists.txt index 8be183864..368b669de 100644 --- a/Demos/CharacterDemo/CMakeLists.txt +++ b/Demos/CharacterDemo/CMakeLists.txt @@ -52,7 +52,7 @@ ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL } ) LINK_LIBRARIES( - LibOpenGLSupport LibConvexHull LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} + LibOpenGLSupport LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ) ADD_EXECUTABLE(CharacterDemo diff --git a/Demos/ColladaDemo/CMakeLists.txt b/Demos/ColladaDemo/CMakeLists.txt index 8ccd2c881..f3e86627c 100644 --- a/Demos/ColladaDemo/CMakeLists.txt +++ b/Demos/ColladaDemo/CMakeLists.txt @@ -48,11 +48,11 @@ ELSE (WIN32) ENDIF (WIN32) INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/Extras/BulletColladaConverter $(BULLET_PHYSICS_SOURCE_DIR)/Extras/ConvexHull ${BULLET_PHYSICS_SOURCE_DIR}/Extras/LibXML ${BULLET_PHYSICS_SOURCE_DIR}/Extras/LibXML/include ${BULLET_PHYSICS_SOURCE_DIR}/Extras/COLLADA_DOM/include/1.4 ${BULLET_PHYSICS_SOURCE_DIR}/Extras/COLLADA_DOM/include ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL } +${BULLET_PHYSICS_SOURCE_DIR}/Extras/BulletColladaConverter ${BULLET_PHYSICS_SOURCE_DIR}/Extras/LibXML ${BULLET_PHYSICS_SOURCE_DIR}/Extras/LibXML/include ${BULLET_PHYSICS_SOURCE_DIR}/Extras/COLLADA_DOM/include/1.4 ${BULLET_PHYSICS_SOURCE_DIR}/Extras/COLLADA_DOM/include ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL } ) LINK_LIBRARIES( -LibBulletColladaConverter LibColladaDom LibXML LibOpenGLSupport LibConvexHull LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} +LibBulletColladaConverter LibColladaDom LibXML LibOpenGLSupport LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ) ADD_EXECUTABLE(ColladaDemo diff --git a/Demos/ConstraintDemo/CMakeLists.txt b/Demos/ConstraintDemo/CMakeLists.txt index 0e4bf5648..85e72b442 100644 --- a/Demos/ConstraintDemo/CMakeLists.txt +++ b/Demos/ConstraintDemo/CMakeLists.txt @@ -52,7 +52,7 @@ ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL } ) LINK_LIBRARIES( -LibOpenGLSupport LibConvexHull LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} +LibOpenGLSupport LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ) ADD_EXECUTABLE(ConstraintDemo diff --git a/Demos/GenericJointDemo/CMakeLists.txt b/Demos/GenericJointDemo/CMakeLists.txt index d6ed0a208..705091646 100644 --- a/Demos/GenericJointDemo/CMakeLists.txt +++ b/Demos/GenericJointDemo/CMakeLists.txt @@ -52,7 +52,7 @@ ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL } ) LINK_LIBRARIES( -LibOpenGLSupport LibConvexHull LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} +LibOpenGLSupport LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ) ADD_EXECUTABLE(GenericJointDemo diff --git a/Demos/Jamfile b/Demos/Jamfile index 7a3929c8a..13c57ded6 100644 --- a/Demos/Jamfile +++ b/Demos/Jamfile @@ -8,7 +8,7 @@ if $(GLUT.AVAILABLE) = "yes" rule BulletDemo { Application $(<) : $(>) : noinstall console nomanifest ; - LinkWith $(<) : bulletopenglsupport convexhull bulletdynamics bulletcollision bulletmath ; + LinkWith $(<) : bulletopenglsupport bulletdynamics bulletcollision bulletmath ; CFlags $(<) : [ FIncludes $(TOP)/Demos/OpenGL ] [ FIncludes $(TOP)/Extras/ConvexHull ] @@ -37,7 +37,7 @@ if $(GLUT.AVAILABLE) = "yes" rule FrameWorkDemo { Application $(<) : $(>) : noinstall console nomanifest ; - LinkWith $(<) : GIMPACTUtils GIMPACT bulletopenglsupport bulletmultithreaded convexdecomposition convexhull bulletdynamics bulletcollision bulletmath glui ; + LinkWith $(<) : GIMPACTUtils GIMPACT bulletopenglsupport convexdecomposition bulletdynamics bulletcollision bulletmath glui ; CFlags $(<) : [ FIncludes $(TOP)/Extras ] [ FIncludes $(TOP)/Demos/OpenGL ] @@ -80,6 +80,7 @@ SubInclude TOP Demos GimpactTestDemo ; SubInclude TOP Demos MovingConcaveDemo ; SubInclude TOP Demos ConcaveDemo ; SubInclude TOP Demos ConstraintDemo ; +SubInclude TOP Demos SliderConstraintDemo ; SubInclude TOP Demos RagdollDemo ; SubInclude TOP Demos GenericJointDemo ; SubInclude TOP Demos SoftDemo ; diff --git a/Demos/MovingConcaveDemo/CMakeLists.txt b/Demos/MovingConcaveDemo/CMakeLists.txt index 7bae10fd0..7c85b6d6c 100644 --- a/Demos/MovingConcaveDemo/CMakeLists.txt +++ b/Demos/MovingConcaveDemo/CMakeLists.txt @@ -52,7 +52,7 @@ ${BULLET_PHYSICS_SOURCE_DIR}/Extras/GIMPACT/include ${BULLET_PHYSICS_SOURCE_DIR} ) LINK_LIBRARIES( -LibGIMPACT LibOpenGLSupport LibConvexHull LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} +LibGIMPACT LibOpenGLSupport LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ) ADD_EXECUTABLE(MovingConcaveDemo diff --git a/Demos/MultiThreadedDemo/CMakeLists.txt b/Demos/MultiThreadedDemo/CMakeLists.txt index cc2a56f87..c96c18471 100644 --- a/Demos/MultiThreadedDemo/CMakeLists.txt +++ b/Demos/MultiThreadedDemo/CMakeLists.txt @@ -53,7 +53,7 @@ ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL } ) LINK_LIBRARIES( -LibOpenGLSupport LibConvexHull LibBulletMultiThreaded LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} +LibOpenGLSupport LibBulletMultiThreaded LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ) ADD_EXECUTABLE(MultiThreadedDemo diff --git a/Demos/MultiThreadedDemo/Jamfile b/Demos/MultiThreadedDemo/Jamfile index 389d4b854..677292f50 100644 --- a/Demos/MultiThreadedDemo/Jamfile +++ b/Demos/MultiThreadedDemo/Jamfile @@ -1,3 +1,27 @@ SubDir TOP Demos MultiThreadedDemo ; -FrameWorkDemo MultiThreadedDemo : [ Wildcard *.h *.cpp ] ; +#some demos need extra functionality, Collada / ConvexDecomposition etc. + + rule ExtraDemo4 + + { + Application $(<) : $(>) : noinstall console nomanifest ; + LinkWith $(<) : bulletopenglsupport bulletmultithreaded bulletdynamics bulletcollision bulletmath ; + CFlags $(<) : + [ FIncludes $(TOP)/Demos/OpenGL ] + [ FIncludes $(TOP)/Extras/BulletMultiThreaded ] + + ; + + MsvcIncDirs $(<) : + "../../Demos/OpenGL" + "../../Extras/BulletColladaConverter" + "../../Extras/COLLADA_DOM/include" + "../../Extras/COLLADA_DOM/include/1.4" + "../../Extras/LibXML" + "../../Extras/LibXML/include" ; + } + +ExtraDemo4 MultiThreadedDemo : [ Wildcard *.h *.cpp ] ; + +MsvcIncDirs MultiThreadedDemo : "../../Extras/BulletMultiThreaded" ; diff --git a/Demos/OpenGL/GL_ShapeDrawer.cpp b/Demos/OpenGL/GL_ShapeDrawer.cpp index b44d640d7..64fc69367 100644 --- a/Demos/OpenGL/GL_ShapeDrawer.cpp +++ b/Demos/OpenGL/GL_ShapeDrawer.cpp @@ -41,7 +41,7 @@ subject to the following restrictions: #include "BulletCollision/CollisionShapes/btUniformScalingShape.h" #include "BulletCollision/CollisionShapes/btStaticPlaneShape.h" /// -#include "btShapeHull.h" +#include "BulletCollision/CollisionShapes/btShapeHull.h" #include "LinearMath/btTransformUtil.h" diff --git a/Demos/OpenGL/Jamfile b/Demos/OpenGL/Jamfile index 5290dff04..4efdf5974 100644 --- a/Demos/OpenGL/Jamfile +++ b/Demos/OpenGL/Jamfile @@ -9,18 +9,11 @@ if $(GLUT.AVAILABLE) = "yes" [ Wildcard *.h *.cpp ] : noinstall ; -CFlags bulletopenglsupport : [ FIncludes $(TOP)/Extras/ConvexHull ] -; - MsvcIncDirs bulletopenglsupport : - "../../Extras/ConvexHull" ; -bulletopenglsupport.CFLAGS = [ FIncludes $(TOP)/Extras/ConvexHull ] ; -#same for msvcgen -MsvcGenConfig bulletopenglsupport.INCDIRS : $(TOP)/Extras/ConvexHull ; -LibDepends bulletopenglsupport : bulletdynamics convexhull ; +LibDepends bulletopenglsupport : bulletdynamics ; ExternalLibs bulletopenglsupport : GLUT ; } diff --git a/Demos/RagdollDemo/CMakeLists.txt b/Demos/RagdollDemo/CMakeLists.txt index 5bded436d..02c9188aa 100644 --- a/Demos/RagdollDemo/CMakeLists.txt +++ b/Demos/RagdollDemo/CMakeLists.txt @@ -52,7 +52,7 @@ ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL } ) LINK_LIBRARIES( -LibOpenGLSupport LibConvexHull LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} +LibOpenGLSupport LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ) ADD_EXECUTABLE(RagdollDemo diff --git a/Demos/SoftDemo/CMakeLists.txt b/Demos/SoftDemo/CMakeLists.txt index 057efd85e..e01d308b3 100644 --- a/Demos/SoftDemo/CMakeLists.txt +++ b/Demos/SoftDemo/CMakeLists.txt @@ -52,14 +52,11 @@ ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL } ) LINK_LIBRARIES( -LibOpenGLSupport LibConvexHull LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} +LibOpenGLSupport LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ) ADD_EXECUTABLE(SoftBodyDemo main.cpp - btSoftBodyRigidBodyCollisionConfiguration.cpp - btSoftRigidCollisionAlgorithm.cpp - btSoftSoftCollisionAlgorithm.cpp SoftDemo.cpp ) diff --git a/Demos/UserCollisionAlgorithm/CMakeLists.txt b/Demos/UserCollisionAlgorithm/CMakeLists.txt index d6fc9fc4c..f0db6ea20 100644 --- a/Demos/UserCollisionAlgorithm/CMakeLists.txt +++ b/Demos/UserCollisionAlgorithm/CMakeLists.txt @@ -52,7 +52,7 @@ ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL } ) LINK_LIBRARIES( - LibOpenGLSupport LibConvexHull LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} + LibOpenGLSupport LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ) ADD_EXECUTABLE(UserCollisionAlgorithm diff --git a/Demos/VehicleDemo/CMakeLists.txt b/Demos/VehicleDemo/CMakeLists.txt index 2147b1889..fae6839b0 100644 --- a/Demos/VehicleDemo/CMakeLists.txt +++ b/Demos/VehicleDemo/CMakeLists.txt @@ -52,7 +52,7 @@ ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL } ) LINK_LIBRARIES( - LibOpenGLSupport LibConvexHull LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} + LibOpenGLSupport LibBulletDynamics LibBulletCollision LibLinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ) ADD_EXECUTABLE(VehicleDemo diff --git a/src/BulletCollision/CMakeLists.txt b/src/BulletCollision/CMakeLists.txt index 526290ec3..1051756b3 100644 --- a/src/BulletCollision/CMakeLists.txt +++ b/src/BulletCollision/CMakeLists.txt @@ -95,6 +95,8 @@ ADD_LIBRARY(LibBulletCollision CollisionShapes/btTetrahedronShape.h CollisionShapes/btSphereShape.cpp CollisionShapes/btSphereShape.h + CollisionShapes/btShapeHull.h + CollisionShapes/btShapeHull.cpp CollisionShapes/btStaticPlaneShape.cpp CollisionShapes/btStaticPlaneShape.h CollisionShapes/btStridingMeshInterface.cpp diff --git a/src/BulletCollision/CollisionShapes/btShapeHull.cpp b/src/BulletCollision/CollisionShapes/btShapeHull.cpp index 4e33d242b..4e2db5f55 100644 --- a/src/BulletCollision/CollisionShapes/btShapeHull.cpp +++ b/src/BulletCollision/CollisionShapes/btShapeHull.cpp @@ -16,7 +16,7 @@ subject to the following restrictions: */ #include "btShapeHull.h" -#include "btConvexHull.h" +#include "LinearMath/btConvexHull.h" #define NUM_UNITSPHERE_POINTS 42 diff --git a/src/BulletDynamics/CMakeLists.txt b/src/BulletDynamics/CMakeLists.txt index 6d2f49781..a32bb8270 100644 --- a/src/BulletDynamics/CMakeLists.txt +++ b/src/BulletDynamics/CMakeLists.txt @@ -16,6 +16,8 @@ ADD_LIBRARY(LibBulletDynamics ConstraintSolver/btPoint2PointConstraint.h ConstraintSolver/btSequentialImpulseConstraintSolver.cpp ConstraintSolver/btSequentialImpulseConstraintSolver.h + ConstraintSolver/btSliderConstraint.cpp + ConstraintSolver/btSliderConstraint.h ConstraintSolver/btSolve2LinearConstraint.cpp ConstraintSolver/btSolve2LinearConstraint.h ConstraintSolver/btTypedConstraint.cpp @@ -48,4 +50,14 @@ ADD_LIBRARY(LibBulletDynamics SoftBody/btSoftBody.h SoftBody/btSoftBodyHelpers.cpp SoftBody/btSparseSDF.h + SoftBody/btDbvt.cpp + SoftBody/btDbvt.h + SoftBody/btSoftBodyHelpers.h + SoftBody/btSoftBodyRigidBodyCollisionConfiguration.cpp + SoftBody/btSoftRigidCollisionAlgorithm.cpp + SoftBody/btSoftRigidCollisionAlgorithm.h + SoftBody/btSoftSoftCollisionAlgorithm.cpp + SoftBody/btSoftSoftCollisionAlgorithm.h + SoftBody/btSoftRigidDynamicsWorld.h + SoftBody/btSoftRigidDynamicsWorld.cpp ) diff --git a/src/BulletDynamics/SoftBody/btDbvt.cpp b/src/BulletDynamics/SoftBody/btDbvt.cpp index 186693f2d..c46c5f955 100644 --- a/src/BulletDynamics/SoftBody/btDbvt.cpp +++ b/src/BulletDynamics/SoftBody/btDbvt.cpp @@ -1,536 +1,532 @@ -#include "btDbvt.h" - -#include - -namespace btdbvt_internals -{ - -// -typedef btAlignedObjectArray tNodeArray; - -// -static inline int indexof(const btDbvt::Node* node) -{ -return(node->parent->childs[1]==node); -} - -// -static inline btDbvt::Aabb merge( const btDbvt::Aabb& a, - const btDbvt::Aabb& b) -{ -btDbvt::Aabb res; -Merge(a,b,res); -return(res); -} - - -// volume+edge lengths -static inline btScalar size(const btDbvt::Aabb& a) -{ -const btVector3 edges=a.Lengths(); -return( edges.x()*edges.y()*edges.z()+ - edges.x()+edges.y()+edges.z()); -} - -// -static inline void deletenode( btDbvt* pdbvt, - btDbvt::Node* node) -{ -delete pdbvt->m_free; -pdbvt->m_free=node; -} - -// -static inline void recursedeletenode( btDbvt* pdbvt, - btDbvt::Node* node) -{ -if(!node->isleaf()) - { - recursedeletenode(pdbvt,node->childs[0]); - recursedeletenode(pdbvt,node->childs[1]); - } -if(node==pdbvt->m_root) pdbvt->m_root=0; -deletenode(pdbvt,node); -} - -// -static inline btDbvt::Node* createnode( btDbvt* pdbvt, - btDbvt::Node* parent, - const btDbvt::Aabb& box, - void* data) -{ -btDbvt::Node* node; -if(pdbvt->m_free) - { node=pdbvt->m_free;pdbvt->m_free=0; } - else - { node=new btDbvt::Node(); } -node->parent = parent; -node->box = box; -node->data = data; -node->childs[1] = 0; -return(node); -} - -// -static inline void insertleaf( btDbvt* pdbvt, - btDbvt::Node* root, - btDbvt::Node* leaf) -{ -if(!pdbvt->m_root) - { - pdbvt->m_root = leaf; - leaf->parent = 0; - } - else - { - if(!root->isleaf()) - { - do { - if( Proximity(root->childs[0]->box,leaf->box)< - Proximity(root->childs[1]->box,leaf->box)) - root=root->childs[0]; - else - root=root->childs[1]; - } while(!root->isleaf()); - } - btDbvt::Node* prev=root->parent; - btDbvt::Node* node=createnode(pdbvt,prev,merge(leaf->box,root->box),0); - if(prev) - { - prev->childs[indexof(root)] = node; - node->childs[0] = root;root->parent=node; - node->childs[1] = leaf;leaf->parent=node; - do { - if(prev->box.Contain(node->box)) - break; - else - Merge(prev->childs[0]->box,prev->childs[1]->box,prev->box); - node=prev; - } while(0!=(prev=node->parent)); - } - else - { - node->childs[0] = root;root->parent=node; - node->childs[1] = leaf;leaf->parent=node; - pdbvt->m_root = node; - } - } -} - -// -static inline btDbvt::Node* removeleaf( btDbvt* pdbvt, - btDbvt::Node* leaf) -{ -if(leaf==pdbvt->m_root) - { - pdbvt->m_root=0; - return(0); - } - else - { - btDbvt::Node* parent=leaf->parent; - btDbvt::Node* prev=parent->parent; - btDbvt::Node* sibling=parent->childs[1-indexof(leaf)]; - if(prev) - { - prev->childs[indexof(parent)]=sibling; - sibling->parent=prev; - deletenode(pdbvt,parent); - while(prev) - { - const btDbvt::Aabb pb=prev->box; - Merge(prev->childs[0]->box,prev->childs[1]->box,prev->box); - if(NotEqual(pb,prev->box)) - { - sibling = prev; - prev = prev->parent; - } else break; - } - return(prev?prev:pdbvt->m_root); - } - else - { - pdbvt->m_root=sibling; - sibling->parent=0; - deletenode(pdbvt,parent); - return(pdbvt->m_root); - } - } -} - -// -static void fetchleafs( btDbvt* pdbvt, - btDbvt::Node* root, - tNodeArray& leafs, - int depth=-1) -{ -if(root->isinternal()&&depth) - { - fetchleafs(pdbvt,root->childs[0],leafs,depth-1); - fetchleafs(pdbvt,root->childs[1],leafs,depth-1); - deletenode(pdbvt,root); - } - else - { - leafs.push_back(root); - } -} - -// -static int leafcount(btDbvt::Node* root) -{ -if(root->isinternal()) - { - return( leafcount(root->childs[0])+ - leafcount(root->childs[1])); - } -return(1); -} - -// -static void split( const tNodeArray& leafs, - tNodeArray& left, - tNodeArray& right, - const btVector3& org, - const btVector3& axis) -{ -left.resize(0); -right.resize(0); -for(int i=0,ni=leafs.size();ibox.Center()-org)<0) - left.push_back(leafs[i]); - else - right.push_back(leafs[i]); - } -} - -// -static btDbvt::Aabb bounds( const tNodeArray& leafs) -{ -btDbvt::Aabb box=leafs[0]->box; -for(int i=1,ni=leafs.size();ibox); - } -return(box); -} - -// -static void bottomup( btDbvt* pdbvt, - tNodeArray& leafs) -{ -while(leafs.size()>1) - { - btScalar minsize=SIMD_INFINITY; - int minidx[2]={-1,-1}; - for(int i=0;ibox,leafs[j]->box)); - if(szbox,n[1]->box),0); - p->childs[0] = n[0]; - p->childs[1] = n[1]; - n[0]->parent = p; - n[1]->parent = p; - leafs[minidx[0]] = p; - leafs.swap(minidx[1],leafs.size()-1); - leafs.pop_back(); - } -} - -// -static btDbvt::Node* topdown(btDbvt* pdbvt, - tNodeArray& leafs, - int bu_treshold) -{ -static const btVector3 axis[]={btVector3(1,0,0), - btVector3(0,1,0), - btVector3(0,0,1)}; -if(leafs.size()>1) - { - if(leafs.size()>bu_treshold) - { - const btDbvt::Aabb box=bounds(leafs); - const btVector3 org=box.Center(); - tNodeArray sets[2]; - int bestaxis=-1; - int bestmidp=leafs.size(); - sets[0].reserve(leafs.size()); - sets[1].reserve(leafs.size()); - for(int i=0;i<3;++i) - { - split(leafs,sets[0],sets[1],org,axis[i]); - if((sets[0].size()>0)&&(sets[1].size()>0)) - { - const int midp=abs(sets[0].size()-sets[1].size()); - if(midp=0) - { - split(leafs,sets[0],sets[1],org,axis[bestaxis]); - } - else - { - sets[0].resize(0); - sets[1].resize(0); - for(int i=0,ni=leafs.size();ichilds[0]=topdown(pdbvt,sets[0],bu_treshold); - node->childs[1]=topdown(pdbvt,sets[1],bu_treshold); - node->childs[0]->parent=node; - node->childs[1]->parent=node; - return(node); - } - else - { - bottomup(pdbvt,leafs); - return(leafs[0]); - } - } -return(leafs[0]); -} - -// -static inline btDbvt::Node* refit( btDbvt* pdbvt, - btDbvt::Node* node) -{ -btDbvt::Node* parent=node->parent; -if(parent) - { - const int idx=indexof(node); - tNodeArray leafs; - leafs.reserve(64); - fetchleafs(pdbvt,node,leafs,3); - if(leafs.size()>=2) - { - bottomup(pdbvt,leafs); - node=leafs[0]; - node->parent=parent; - parent->childs[idx]=node; - } - } -return(node); -} - - -} - -using namespace btdbvt_internals; - -// -// Api -// - -// - btDbvt::btDbvt() -{ -m_root = 0; -m_free = 0; -m_lkhd = 2; -} - -// - btDbvt::~btDbvt() -{ -clear(); -} - -// -void btDbvt::clear() -{ -if(m_root) recursedeletenode(this,m_root); -delete m_free; -m_free=0; -} - -// -int btDbvt::leafCount() const -{ -if(m_root) return(leafcount(m_root)); - else - return(0); -} - -// -void btDbvt::optimizeBottomUp() -{ -if(m_root) - { - tNodeArray leafs; - leafs.reserve(leafCount()); - fetchleafs(this,m_root,leafs); - bottomup(this,leafs); - m_root=leafs[0]; - } -} - -// -void btDbvt::optimizeTopDown(int bu_treshold) -{ -if(m_root) - { - tNodeArray leafs; - leafs.reserve(leafCount()); - fetchleafs(this,m_root,leafs); - m_root=topdown(this,leafs,bu_treshold); - } -} - -// -btDbvt::Node* btDbvt::insert(const Aabb& box,void* data) -{ -Node* leaf=createnode(this,0,box,data); -insertleaf(this,m_root,leaf); -return(leaf); -} - -// -void btDbvt::update(Node* leaf,const Aabb& box) -{ -Node* root=removeleaf(this,leaf); -if(root) - { - for(int i=0;(iparent;++i) - { - root=root->parent; - } - } -leaf->box=box; -insertleaf(this,root,leaf); -} - -// -bool btDbvt::update(Node* leaf,Aabb box,const btVector3& velocity,btScalar margin) -{ -if(leaf->box.Contain(box)) return(false); -if(margin>0) - box.Expand(btVector3(margin,margin,margin)); -if(velocity.length2()>0) - box.SignedExpand(velocity); -update(leaf,box); -return(true); -} - -// -void btDbvt::remove(Node* leaf) -{ -removeleaf(this,leaf); -deletenode(this,leaf); -} - -// -void btDbvt::collide(btDbvt* tree, - ICollide* icollide) const -{ -if(tree->m_root&&m_root) - { - struct sStkElm - { - const Node* a; - const Node* b; - sStkElm(const Node* na,const Node* nb) : a(na),b(nb) {} - }; - btAlignedObjectArray stack; - stack.reserve(128); - stack.push_back(sStkElm(m_root,tree->m_root)); - do { - sStkElm p=stack[stack.size()-1]; - stack.pop_back(); - if(p.a==p.b) - { - if(p.a->isinternal()) - { - stack.push_back(sStkElm(p.a->childs[0],p.a->childs[0])); - stack.push_back(sStkElm(p.a->childs[1],p.a->childs[1])); - stack.push_back(sStkElm(p.a->childs[0],p.a->childs[1])); - } - } - else if(Intersect(p.a->box,p.b->box)) - { - if(p.a->isinternal()) - { - if(p.b->isinternal()) - { - stack.push_back(sStkElm(p.a->childs[0],p.b->childs[0])); - stack.push_back(sStkElm(p.a->childs[1],p.b->childs[0])); - stack.push_back(sStkElm(p.a->childs[0],p.b->childs[1])); - stack.push_back(sStkElm(p.a->childs[1],p.b->childs[1])); - } - else - { - stack.push_back(sStkElm(p.a->childs[0],p.b)); - stack.push_back(sStkElm(p.a->childs[1],p.b)); - } - } - else - { - if(p.b->isinternal()) - { - stack.push_back(sStkElm(p.a,p.b->childs[0])); - stack.push_back(sStkElm(p.a,p.b->childs[1])); - } - else - { - icollide->Process(p.a,p.b); - } - } - } - } while(stack.size()>0); - } -} - -// -void btDbvt::collide(const Aabb& box, - ICollide* icollide) const -{ -if(m_root) - { - btAlignedObjectArray stack; - stack.reserve(64); - stack.push_back(m_root); - do { - const Node* n=stack[stack.size()-1]; - stack.pop_back(); - if(Intersect(n->box,box)) - { - if(n->isinternal()) - { - stack.push_back(n->childs[0]); - stack.push_back(n->childs[1]); - } - else - { - icollide->Process(n); - } - } - } while(stack.size()>0); - } -} - -// -void btDbvt::collide(const btVector3& org, - const btVector3& dir, - ICollide* icollide) const -{ -/* not implemented */ -} +#include "btDbvt.h" + +#include + +namespace btdbvt_internals +{ + +// +typedef btAlignedObjectArray tNodeArray; + +// +static inline int indexof(const btDbvt::Node* node) +{ +return(node->parent->childs[1]==node); +} + +// +static inline btDbvt::Aabb merge( const btDbvt::Aabb& a, + const btDbvt::Aabb& b) +{ +btDbvt::Aabb res; +Merge(a,b,res); +return(res); +} + + +// volume+edge lengths +static inline btScalar size(const btDbvt::Aabb& a) +{ +const btVector3 edges=a.Lengths(); +return( edges.x()*edges.y()*edges.z()+ + edges.x()+edges.y()+edges.z()); +} + +// +static inline void deletenode( btDbvt* pdbvt, + btDbvt::Node* node) +{ +delete pdbvt->m_free; +pdbvt->m_free=node; +} + +// +static inline void recursedeletenode( btDbvt* pdbvt, + btDbvt::Node* node) +{ +if(!node->isleaf()) + { + recursedeletenode(pdbvt,node->childs[0]); + recursedeletenode(pdbvt,node->childs[1]); + } +if(node==pdbvt->m_root) pdbvt->m_root=0; +deletenode(pdbvt,node); +} + +// +static inline btDbvt::Node* createnode( btDbvt* pdbvt, + btDbvt::Node* parent, + const btDbvt::Aabb& box, + void* data) +{ +btDbvt::Node* node; +if(pdbvt->m_free) + { node=pdbvt->m_free;pdbvt->m_free=0; } + else + { node=new btDbvt::Node(); } +node->parent = parent; +node->box = box; +node->data = data; +node->childs[1] = 0; +return(node); +} + +// +static inline void insertleaf( btDbvt* pdbvt, + btDbvt::Node* root, + btDbvt::Node* leaf) +{ +if(!pdbvt->m_root) + { + pdbvt->m_root = leaf; + leaf->parent = 0; + } + else + { + if(!root->isleaf()) + { + do { + if( Proximity(root->childs[0]->box,leaf->box)< + Proximity(root->childs[1]->box,leaf->box)) + root=root->childs[0]; + else + root=root->childs[1]; + } while(!root->isleaf()); + } + btDbvt::Node* prev=root->parent; + btDbvt::Node* node=createnode(pdbvt,prev,merge(leaf->box,root->box),0); + if(prev) + { + prev->childs[indexof(root)] = node; + node->childs[0] = root;root->parent=node; + node->childs[1] = leaf;leaf->parent=node; + do { + if(prev->box.Contain(node->box)) + break; + else + Merge(prev->childs[0]->box,prev->childs[1]->box,prev->box); + node=prev; + } while(0!=(prev=node->parent)); + } + else + { + node->childs[0] = root;root->parent=node; + node->childs[1] = leaf;leaf->parent=node; + pdbvt->m_root = node; + } + } +} + +// +static inline btDbvt::Node* removeleaf( btDbvt* pdbvt, + btDbvt::Node* leaf) +{ +if(leaf==pdbvt->m_root) + { + pdbvt->m_root=0; + return(0); + } + else + { + btDbvt::Node* parent=leaf->parent; + btDbvt::Node* prev=parent->parent; + btDbvt::Node* sibling=parent->childs[1-indexof(leaf)]; + if(prev) + { + prev->childs[indexof(parent)]=sibling; + sibling->parent=prev; + deletenode(pdbvt,parent); + while(prev) + { + const btDbvt::Aabb pb=prev->box; + Merge(prev->childs[0]->box,prev->childs[1]->box,prev->box); + if(NotEqual(pb,prev->box)) + { + sibling = prev; + prev = prev->parent; + } else break; + } + return(prev?prev:pdbvt->m_root); + } + else + { + pdbvt->m_root=sibling; + sibling->parent=0; + deletenode(pdbvt,parent); + return(pdbvt->m_root); + } + } +} + +// +static void fetchleafs( btDbvt* pdbvt, + btDbvt::Node* root, + tNodeArray& leafs, + int depth=-1) +{ +if(root->isinternal()&&depth) + { + fetchleafs(pdbvt,root->childs[0],leafs,depth-1); + fetchleafs(pdbvt,root->childs[1],leafs,depth-1); + deletenode(pdbvt,root); + } + else + { + leafs.push_back(root); + } +} + +// +static int leafcount(btDbvt::Node* root) +{ +if(root->isinternal()) + { + return( leafcount(root->childs[0])+ + leafcount(root->childs[1])); + } +return(1); +} + +// +static void split( const tNodeArray& leafs, + tNodeArray& left, + tNodeArray& right, + const btVector3& org, + const btVector3& axis) +{ +left.resize(0); +right.resize(0); +for(int i=0,ni=leafs.size();ibox.Center()-org)<0) + left.push_back(leafs[i]); + else + right.push_back(leafs[i]); + } +} + +// +static btDbvt::Aabb bounds( const tNodeArray& leafs) +{ +btDbvt::Aabb box=leafs[0]->box; +for(int i=1,ni=leafs.size();ibox); + } +return(box); +} + +// +static void bottomup( btDbvt* pdbvt, + tNodeArray& leafs) +{ +while(leafs.size()>1) + { + btScalar minsize=SIMD_INFINITY; + int minidx[2]={-1,-1}; + for(int i=0;ibox,leafs[j]->box)); + if(szbox,n[1]->box),0); + p->childs[0] = n[0]; + p->childs[1] = n[1]; + n[0]->parent = p; + n[1]->parent = p; + leafs[minidx[0]] = p; + leafs.swap(minidx[1],leafs.size()-1); + leafs.pop_back(); + } +} + +// +static btDbvt::Node* topdown(btDbvt* pdbvt, + tNodeArray& leafs, + int bu_treshold) +{ +static const btVector3 axis[]={btVector3(1,0,0), + btVector3(0,1,0), + btVector3(0,0,1)}; +if(leafs.size()>1) + { + if(leafs.size()>bu_treshold) + { + const btDbvt::Aabb box=bounds(leafs); + const btVector3 org=box.Center(); + tNodeArray sets[2]; + int bestaxis=-1; + int bestmidp=leafs.size(); + sets[0].reserve(leafs.size()); + sets[1].reserve(leafs.size()); + for(int i=0;i<3;++i) + { + split(leafs,sets[0],sets[1],org,axis[i]); + if((sets[0].size()>0)&&(sets[1].size()>0)) + { + const int midp=abs(sets[0].size()-sets[1].size()); + if(midp=0) + { + split(leafs,sets[0],sets[1],org,axis[bestaxis]); + } + else + { + sets[0].resize(0); + sets[1].resize(0); + for(int i=0,ni=leafs.size();ichilds[0]=topdown(pdbvt,sets[0],bu_treshold); + node->childs[1]=topdown(pdbvt,sets[1],bu_treshold); + node->childs[0]->parent=node; + node->childs[1]->parent=node; + return(node); + } + else + { + bottomup(pdbvt,leafs); + return(leafs[0]); + } + } +return(leafs[0]); +} + +// +static inline btDbvt::Node* refit( btDbvt* pdbvt, + btDbvt::Node* node) +{ +btDbvt::Node* parent=node->parent; +if(parent) + { + const int idx=indexof(node); + tNodeArray leafs; + leafs.reserve(64); + fetchleafs(pdbvt,node,leafs,3); + if(leafs.size()>=2) + { + bottomup(pdbvt,leafs); + node=leafs[0]; + node->parent=parent; + parent->childs[idx]=node; + } + } +return(node); +} + + +} + +using namespace btdbvt_internals; + +// +// Api +// + +// + btDbvt::btDbvt() +{ +m_root = 0; +m_free = 0; +m_lkhd = 2; +} + +// + btDbvt::~btDbvt() +{ +clear(); +} + +// +void btDbvt::clear() +{ +if(m_root) recursedeletenode(this,m_root); +delete m_free; +m_free=0; +} + +// +int btDbvt::leafCount() const +{ +if(m_root) return(leafcount(m_root)); + else + return(0); +} + +// +void btDbvt::optimizeBottomUp() +{ +if(m_root) + { + tNodeArray leafs; + leafs.reserve(leafCount()); + fetchleafs(this,m_root,leafs); + bottomup(this,leafs); + m_root=leafs[0]; + } +} + +// +void btDbvt::optimizeTopDown(int bu_treshold) +{ +if(m_root) + { + tNodeArray leafs; + leafs.reserve(leafCount()); + fetchleafs(this,m_root,leafs); + m_root=topdown(this,leafs,bu_treshold); + } +} + +// +btDbvt::Node* btDbvt::insert(const Aabb& box,void* data) +{ +Node* leaf=createnode(this,0,box,data); +insertleaf(this,m_root,leaf); +return(leaf); +} + +// +void btDbvt::update(Node* leaf,const Aabb& box) +{ +Node* root=removeleaf(this,leaf); +if(root) + { + for(int i=0;(iparent;++i) + { + root=root->parent; + } + } +leaf->box=box; +insertleaf(this,root,leaf); +} + +// +bool btDbvt::update(Node* leaf,Aabb box,const btVector3& velocity,btScalar margin) +{ +if(leaf->box.Contain(box)) return(false); +if(margin>0) + box.Expand(btVector3(margin,margin,margin)); +if(velocity.length2()>0) + box.SignedExpand(velocity); +update(leaf,box); +return(true); +} + +// +void btDbvt::remove(Node* leaf) +{ +removeleaf(this,leaf); +deletenode(this,leaf); +} + + +// +void btDbvt::collide(btDbvt* tree, + ICollide* icollide) const +{ +if(tree->m_root&&m_root) + { + + btAlignedObjectArray stack; + stack.reserve(128); + stack.push_back(sStkElm(m_root,tree->m_root)); + do { + sStkElm p=stack[stack.size()-1]; + stack.pop_back(); + if(p.a==p.b) + { + if(p.a->isinternal()) + { + stack.push_back(sStkElm(p.a->childs[0],p.a->childs[0])); + stack.push_back(sStkElm(p.a->childs[1],p.a->childs[1])); + stack.push_back(sStkElm(p.a->childs[0],p.a->childs[1])); + } + } + else if(Intersect(p.a->box,p.b->box)) + { + if(p.a->isinternal()) + { + if(p.b->isinternal()) + { + stack.push_back(sStkElm(p.a->childs[0],p.b->childs[0])); + stack.push_back(sStkElm(p.a->childs[1],p.b->childs[0])); + stack.push_back(sStkElm(p.a->childs[0],p.b->childs[1])); + stack.push_back(sStkElm(p.a->childs[1],p.b->childs[1])); + } + else + { + stack.push_back(sStkElm(p.a->childs[0],p.b)); + stack.push_back(sStkElm(p.a->childs[1],p.b)); + } + } + else + { + if(p.b->isinternal()) + { + stack.push_back(sStkElm(p.a,p.b->childs[0])); + stack.push_back(sStkElm(p.a,p.b->childs[1])); + } + else + { + icollide->Process(p.a,p.b); + } + } + } + } while(stack.size()>0); + } +} + +// +void btDbvt::collide(const Aabb& box, + ICollide* icollide) const +{ +if(m_root) + { + btAlignedObjectArray stack; + stack.reserve(64); + stack.push_back(m_root); + do { + const Node* n=stack[stack.size()-1]; + stack.pop_back(); + if(Intersect(n->box,box)) + { + if(n->isinternal()) + { + stack.push_back(n->childs[0]); + stack.push_back(n->childs[1]); + } + else + { + icollide->Process(n); + } + } + } while(stack.size()>0); + } +} + +// +void btDbvt::collide(const btVector3& org, + const btVector3& dir, + ICollide* icollide) const +{ +/* not implemented */ +} diff --git a/src/BulletDynamics/SoftBody/btDbvt.h b/src/BulletDynamics/SoftBody/btDbvt.h index c2d2c5630..02bd5f3b4 100644 --- a/src/BulletDynamics/SoftBody/btDbvt.h +++ b/src/BulletDynamics/SoftBody/btDbvt.h @@ -68,6 +68,13 @@ struct btDbvt }; // Interfaces + struct sStkElm + { + const Node* a; + const Node* b; + sStkElm(const Node* na,const Node* nb) : a(na),b(nb) {} + }; + /* ICollide */ struct ICollide { diff --git a/src/LinearMath/CMakeLists.txt b/src/LinearMath/CMakeLists.txt index 456c21ab1..02ffaad72 100644 --- a/src/LinearMath/CMakeLists.txt +++ b/src/LinearMath/CMakeLists.txt @@ -15,6 +15,8 @@ ADD_LIBRARY(LibLinearMath btHashMap.h btScalar.h btAabbUtil2.h + btConvexHull.h + btConvexHull.cpp btMinMax.h btQuaternion.h btStackAlloc.h