ruby-bullet 0.0.2-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- data/INSTALL.md +22 -0
- data/LICENSE +23 -0
- data/README.md +41 -0
- data/Rakefile +131 -0
- data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/btAxisSweep3.i +30 -0
- data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/btBroadphaseInterface.i +8 -0
- data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/btBroadphaseProxy.i +8 -0
- data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/btCollisionAlgorithm.i +8 -0
- data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/btDbvt.i +10 -0
- data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/btDbvtBroadphase.i +8 -0
- data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/btDispatcher.i +8 -0
- data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.i +10 -0
- data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/btOverlappingPairCache.i +8 -0
- data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/btOverlappingPairCallback.i +8 -0
- data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/btQuantizedBvh.i +8 -0
- data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/btSimpleBroadphase.i +8 -0
- data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/local_btAxisSweep3Internal.h +191 -0
- data/bindings/bullet/interface/BulletCollision/CollisionDispatch/SphereTriangleDetector.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btBoxBoxCollisionAlgorithm.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btBoxBoxDetector.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btCollisionConfiguration.i +21 -0
- data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btCollisionCreateFunc.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btCollisionDispatcher.i +24 -0
- data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btCollisionObject.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btCollisionWorld.i +82 -0
- data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btConvexPlaneCollisionAlgorithm.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btGhostObject.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btInternalEdgeUtility.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btManifoldResult.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btSimulationIslandManager.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btUnionFind.i +10 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btBox2dShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btBoxShape.i +22 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btCapsuleShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btCollisionMargin.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btCollisionShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btCompoundShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btConcaveShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btConeShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btConvex2dShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btConvexHullShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btConvexInternalShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btConvexPointCloudShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btConvexPolyhedron.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btConvexShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btConvexTriangleMeshShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btCylinderShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btEmptyShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btMaterial.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btMinkowskiSumShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btMultiSphereShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btOptimizedBvh.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btPolyhedralConvexShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btShapeHull.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btSphereShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btStaticPlaneShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btStridingMeshInterface.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btTetrahedronShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btTriangleBuffer.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btTriangleCallback.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btTriangleIndexVertexArray.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btTriangleInfoMap.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btTriangleMeshShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btTriangleShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/CollisionShapes/btUniformScalingShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/Gimpact/btBoxCollision.i +8 -0
- data/bindings/bullet/interface/BulletCollision/Gimpact/btClipPolygon.i +8 -0
- data/bindings/bullet/interface/BulletCollision/Gimpact/btContactProcessing.i +8 -0
- data/bindings/bullet/interface/BulletCollision/Gimpact/btGImpactBvh.i +8 -0
- data/bindings/bullet/interface/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.i +8 -0
- data/bindings/bullet/interface/BulletCollision/Gimpact/btGImpactMassUtil.i +8 -0
- data/bindings/bullet/interface/BulletCollision/Gimpact/btGImpactQuantizedBvh.i +8 -0
- data/bindings/bullet/interface/BulletCollision/Gimpact/btGImpactShape.i +8 -0
- data/bindings/bullet/interface/BulletCollision/Gimpact/btGenericPoolAllocator.i +11 -0
- data/bindings/bullet/interface/BulletCollision/Gimpact/btGeometryOperations.i +8 -0
- data/bindings/bullet/interface/BulletCollision/Gimpact/btQuantization.i +8 -0
- data/bindings/bullet/interface/BulletCollision/Gimpact/btTriangleShapeEx.i +8 -0
- data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.i +8 -0
- data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btConvexCast.i +8 -0
- data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btConvexPenetrationDepthSolver.i +8 -0
- data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btDiscreteCollisionDetectorInterface.i +11 -0
- data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btGjkConvexCast.i +8 -0
- data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btGjkEpa2.i +8 -0
- data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.i +8 -0
- data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.i +8 -0
- data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btManifoldPoint.i +8 -0
- data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.i +8 -0
- data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btPersistentManifold.i +8 -0
- data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btPointCollector.i +8 -0
- data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.i +8 -0
- data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btRaycastCallback.i +8 -0
- data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btSimplexSolverInterface.i +8 -0
- data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.i +8 -0
- data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.i +8 -0
- data/bindings/bullet/interface/BulletDynamics/Character/btCharacterControllerInterface.i +8 -0
- data/bindings/bullet/interface/BulletDynamics/Character/btKinematicCharacterController.i +8 -0
- data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btConeTwistConstraint.i +8 -0
- data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btConstraintSolver.i +8 -0
- data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btContactConstraint.i +8 -0
- data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btContactSolverInfo.i +8 -0
- data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.i +8 -0
- data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.i +8 -0
- data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btHinge2Constraint.i +8 -0
- data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btHingeConstraint.i +8 -0
- data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btJacobianEntry.i +8 -0
- data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btPoint2PointConstraint.i +8 -0
- data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.i +21 -0
- data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btSliderConstraint.i +8 -0
- data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.i +8 -0
- data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btSolverBody.i +8 -0
- data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btSolverConstraint.i +8 -0
- data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btTypedConstraint.i +8 -0
- data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btUniversalConstraint.i +8 -0
- data/bindings/bullet/interface/BulletDynamics/Dynamics/btActionInterface.i +8 -0
- data/bindings/bullet/interface/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.i +23 -0
- data/bindings/bullet/interface/BulletDynamics/Dynamics/btDynamicsWorld.i +37 -0
- data/bindings/bullet/interface/BulletDynamics/Dynamics/btRigidBody.i +20 -0
- data/bindings/bullet/interface/BulletDynamics/Dynamics/btSimpleDynamicsWorld.i +8 -0
- data/bindings/bullet/interface/BulletDynamics/Vehicle/btRaycastVehicle.i +12 -0
- data/bindings/bullet/interface/BulletDynamics/Vehicle/btVehicleRaycaster.i +8 -0
- data/bindings/bullet/interface/BulletDynamics/Vehicle/btWheelInfo.i +8 -0
- data/bindings/bullet/interface/BulletSoftBody/btDefaultSoftBodySolver.i +8 -0
- data/bindings/bullet/interface/BulletSoftBody/btSoftBody.i +8 -0
- data/bindings/bullet/interface/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.i +8 -0
- data/bindings/bullet/interface/BulletSoftBody/btSoftBodyData.i +8 -0
- data/bindings/bullet/interface/BulletSoftBody/btSoftBodyHelpers.i +8 -0
- data/bindings/bullet/interface/BulletSoftBody/btSoftBodyInternals.i +8 -0
- data/bindings/bullet/interface/BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.i +8 -0
- data/bindings/bullet/interface/BulletSoftBody/btSoftBodySolverVertexBuffer.i +8 -0
- data/bindings/bullet/interface/BulletSoftBody/btSoftBodySolvers.i +8 -0
- data/bindings/bullet/interface/BulletSoftBody/btSoftRigidCollisionAlgorithm.i +8 -0
- data/bindings/bullet/interface/BulletSoftBody/btSoftRigidDynamicsWorld.i +8 -0
- data/bindings/bullet/interface/BulletSoftBody/btSoftSoftCollisionAlgorithm.i +8 -0
- data/bindings/bullet/interface/BulletSoftBody/btSparseSDF.i +8 -0
- data/bindings/bullet/interface/LinearMath/btAabbUtil2.i +8 -0
- data/bindings/bullet/interface/LinearMath/btAlignedAllocator.i +8 -0
- data/bindings/bullet/interface/LinearMath/btAlignedObjectArray.i +8 -0
- data/bindings/bullet/interface/LinearMath/btConvexHull.i +8 -0
- data/bindings/bullet/interface/LinearMath/btConvexHullComputer.i +8 -0
- data/bindings/bullet/interface/LinearMath/btDefaultMotionState.i +10 -0
- data/bindings/bullet/interface/LinearMath/btGeometryUtil.i +10 -0
- data/bindings/bullet/interface/LinearMath/btGrahamScan2dConvexHull.i +8 -0
- data/bindings/bullet/interface/LinearMath/btHashMap.i +8 -0
- data/bindings/bullet/interface/LinearMath/btIDebugDraw.i +10 -0
- data/bindings/bullet/interface/LinearMath/btList.i +8 -0
- data/bindings/bullet/interface/LinearMath/btMatrix3x3.i +8 -0
- data/bindings/bullet/interface/LinearMath/btMinMax.i +8 -0
- data/bindings/bullet/interface/LinearMath/btMotionState.i +10 -0
- data/bindings/bullet/interface/LinearMath/btPoolAllocator.i +10 -0
- data/bindings/bullet/interface/LinearMath/btQuadWord.i +8 -0
- data/bindings/bullet/interface/LinearMath/btQuaternion.i +60 -0
- data/bindings/bullet/interface/LinearMath/btQuickprof.i +10 -0
- data/bindings/bullet/interface/LinearMath/btRandom.i +8 -0
- data/bindings/bullet/interface/LinearMath/btScalar.i +8 -0
- data/bindings/bullet/interface/LinearMath/btSerializer.i +10 -0
- data/bindings/bullet/interface/LinearMath/btStackAlloc.i +10 -0
- data/bindings/bullet/interface/LinearMath/btTransform.i +8 -0
- data/bindings/bullet/interface/LinearMath/btTransformUtil.i +8 -0
- data/bindings/bullet/interface/LinearMath/btVector3.i +42 -0
- data/bindings/bullet/interface/Makefile +19 -0
- data/bindings/bullet/interface/bullet.i +9 -0
- data/bindings/bullet/interface/bullet_all.i +186 -0
- data/bindings/bullet/interface/bullet_wrap.cpp +194161 -0
- data/bindings/bullet/interface/bullet_wrap.h +106 -0
- data/bindings/bullet/interface/bullet_wrap.o +0 -0
- data/bindings/bullet/src/TickListener.h +22 -0
- data/deps/include/bullet/Bullet-C-Api.h +176 -0
- data/deps/include/bullet/BulletCollision/BroadphaseCollision/btAxisSweep3.cpp +37 -0
- data/deps/include/bullet/BulletCollision/BroadphaseCollision/btAxisSweep3.h +1051 -0
- data/deps/include/bullet/BulletCollision/BroadphaseCollision/btBroadphaseInterface.h +82 -0
- data/deps/include/bullet/BulletCollision/BroadphaseCollision/btBroadphaseProxy.cpp +17 -0
- data/deps/include/bullet/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h +270 -0
- data/deps/include/bullet/BulletCollision/BroadphaseCollision/btCollisionAlgorithm.cpp +23 -0
- data/deps/include/bullet/BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h +80 -0
- data/deps/include/bullet/BulletCollision/BroadphaseCollision/btDbvt.cpp +1295 -0
- data/deps/include/bullet/BulletCollision/BroadphaseCollision/btDbvt.h +1257 -0
- data/deps/include/bullet/BulletCollision/BroadphaseCollision/btDbvtBroadphase.cpp +796 -0
- data/deps/include/bullet/BulletCollision/BroadphaseCollision/btDbvtBroadphase.h +146 -0
- data/deps/include/bullet/BulletCollision/BroadphaseCollision/btDispatcher.cpp +22 -0
- data/deps/include/bullet/BulletCollision/BroadphaseCollision/btDispatcher.h +110 -0
- data/deps/include/bullet/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.cpp +489 -0
- data/deps/include/bullet/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.h +151 -0
- data/deps/include/bullet/BulletCollision/BroadphaseCollision/btOverlappingPairCache.cpp +633 -0
- data/deps/include/bullet/BulletCollision/BroadphaseCollision/btOverlappingPairCache.h +469 -0
- data/deps/include/bullet/BulletCollision/BroadphaseCollision/btOverlappingPairCallback.h +40 -0
- data/deps/include/bullet/BulletCollision/BroadphaseCollision/btQuantizedBvh.cpp +1375 -0
- data/deps/include/bullet/BulletCollision/BroadphaseCollision/btQuantizedBvh.h +579 -0
- data/deps/include/bullet/BulletCollision/BroadphaseCollision/btSimpleBroadphase.cpp +349 -0
- data/deps/include/bullet/BulletCollision/BroadphaseCollision/btSimpleBroadphase.h +171 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/BroadphaseCollision/btAxisSweep3.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/BroadphaseCollision/btBroadphaseProxy.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/BroadphaseCollision/btCollisionAlgorithm.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/BroadphaseCollision/btDbvt.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/BroadphaseCollision/btDbvtBroadphase.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/BroadphaseCollision/btDispatcher.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/BroadphaseCollision/btMultiSapBroadphase.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/BroadphaseCollision/btOverlappingPairCache.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/BroadphaseCollision/btQuantizedBvh.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/BroadphaseCollision/btSimpleBroadphase.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CXX.includecache +2574 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/SphereTriangleDetector.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btActivatingCollisionAlgorithm.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btBoxBoxCollisionAlgorithm.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btBoxBoxDetector.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btCollisionDispatcher.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btCollisionObject.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btCollisionWorld.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btCompoundCollisionAlgorithm.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btConvex2dConvex2dAlgorithm.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btConvexConcaveCollisionAlgorithm.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btConvexConvexAlgorithm.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btConvexPlaneCollisionAlgorithm.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btDefaultCollisionConfiguration.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btEmptyCollisionAlgorithm.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btGhostObject.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btInternalEdgeUtility.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btManifoldResult.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btSimulationIslandManager.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btSphereBoxCollisionAlgorithm.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btSphereSphereCollisionAlgorithm.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btSphereTriangleCollisionAlgorithm.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btUnionFind.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btBox2dShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btBoxShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btBvhTriangleMeshShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btCapsuleShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btCollisionShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btCompoundShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btConcaveShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btConeShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btConvex2dShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btConvexHullShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btConvexInternalShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btConvexPointCloudShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btConvexPolyhedron.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btConvexShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btConvexTriangleMeshShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btCylinderShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btEmptyShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btHeightfieldTerrainShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btMinkowskiSumShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btMultiSphereShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btMultimaterialTriangleMeshShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btOptimizedBvh.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btPolyhedralConvexShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btScaledBvhTriangleMeshShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btShapeHull.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btSphereShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btStaticPlaneShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btStridingMeshInterface.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btTetrahedronShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btTriangleBuffer.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btTriangleCallback.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btTriangleIndexVertexArray.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btTriangleIndexVertexMaterialArray.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btTriangleMesh.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btTriangleMeshShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btUniformScalingShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/DependInfo.cmake +121 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/Gimpact/btContactProcessing.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/Gimpact/btGImpactBvh.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/Gimpact/btGImpactCollisionAlgorithm.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/Gimpact/btGImpactQuantizedBvh.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/Gimpact/btGImpactShape.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/Gimpact/btGenericPoolAllocator.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/Gimpact/btTriangleShapeEx.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/Gimpact/gim_box_set.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/Gimpact/gim_contact.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/Gimpact/gim_memory.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/Gimpact/gim_tri_collision.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/NarrowPhaseCollision/btContinuousConvexCollision.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/NarrowPhaseCollision/btConvexCast.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/NarrowPhaseCollision/btGjkConvexCast.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/NarrowPhaseCollision/btGjkEpa2.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/NarrowPhaseCollision/btGjkPairDetector.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/NarrowPhaseCollision/btPersistentManifold.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/NarrowPhaseCollision/btPolyhedralContactClipping.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/NarrowPhaseCollision/btRaycastCallback.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/NarrowPhaseCollision/btSubSimplexConvexCast.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/NarrowPhaseCollision/btVoronoiSimplexSolver.obj +0 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/build.make +2561 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/cmake_clean.cmake +101 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/cmake_clean_target.cmake +3 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/depend.internal +2058 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/depend.make +2058 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/flags.make +8 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/includes_CXX.rsp +1 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/link.txt +2 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/progress.make +93 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
- data/deps/include/bullet/BulletCollision/CMakeFiles/progress.marks +1 -0
- data/deps/include/bullet/BulletCollision/CMakeLists.txt +279 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/SphereTriangleDetector.cpp +201 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/SphereTriangleDetector.h +51 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.cpp +47 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.h +36 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.cpp +435 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.h +66 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btBoxBoxCollisionAlgorithm.cpp +85 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btBoxBoxCollisionAlgorithm.h +66 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btBoxBoxDetector.cpp +718 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btBoxBoxDetector.h +44 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btCollisionConfiguration.h +48 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btCollisionCreateFunc.h +45 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btCollisionDispatcher.cpp +310 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btCollisionDispatcher.h +172 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btCollisionObject.cpp +116 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btCollisionObject.h +524 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btCollisionWorld.cpp +1518 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btCollisionWorld.h +509 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.cpp +353 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.h +86 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.cpp +247 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.h +95 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.cpp +312 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.h +116 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.cpp +739 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.h +109 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btConvexPlaneCollisionAlgorithm.cpp +173 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btConvexPlaneCollisionAlgorithm.h +84 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.cpp +309 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.h +137 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.cpp +34 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.h +54 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btGhostObject.cpp +171 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btGhostObject.h +175 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btInternalEdgeUtility.cpp +842 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btInternalEdgeUtility.h +46 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btManifoldResult.cpp +135 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btManifoldResult.h +128 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btSimulationIslandManager.cpp +450 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btSimulationIslandManager.h +81 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.cpp +260 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.h +75 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.cpp +105 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.h +66 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.cpp +84 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.h +69 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btUnionFind.cpp +82 -0
- data/deps/include/bullet/BulletCollision/CollisionDispatch/btUnionFind.h +129 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btBox2dShape.cpp +42 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btBox2dShape.h +369 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btBoxShape.cpp +51 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btBoxShape.h +312 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.cpp +466 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h +139 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btCapsuleShape.cpp +171 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btCapsuleShape.h +173 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btCollisionMargin.h +27 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btCollisionShape.cpp +119 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btCollisionShape.h +150 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btCompoundShape.cpp +356 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btCompoundShape.h +212 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btConcaveShape.cpp +27 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btConcaveShape.h +60 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btConeShape.cpp +143 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btConeShape.h +103 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btConvex2dShape.cpp +92 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btConvex2dShape.h +80 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexHullShape.cpp +255 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexHullShape.h +122 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexInternalShape.cpp +151 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexInternalShape.h +224 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexPointCloudShape.cpp +157 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexPointCloudShape.h +105 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexPolyhedron.cpp +296 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexPolyhedron.h +62 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexShape.cpp +446 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexShape.h +84 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexTriangleMeshShape.cpp +315 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexTriangleMeshShape.h +75 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btCylinderShape.cpp +281 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btCylinderShape.h +200 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btEmptyShape.cpp +50 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btEmptyShape.h +70 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp +411 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h +161 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btMaterial.h +35 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btMinkowskiSumShape.cpp +60 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btMinkowskiSumShape.h +60 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btMultiSphereShape.cpp +167 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btMultiSphereShape.h +99 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.cpp +45 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.h +120 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btOptimizedBvh.cpp +391 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btOptimizedBvh.h +65 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btPolyhedralConvexShape.cpp +475 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btPolyhedralConvexShape.h +112 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.cpp +123 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h +93 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btShapeHull.cpp +170 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btShapeHull.h +59 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btSphereShape.cpp +71 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btSphereShape.h +73 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btStaticPlaneShape.cpp +107 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btStaticPlaneShape.h +103 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btStridingMeshInterface.cpp +381 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btStridingMeshInterface.h +162 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btTetrahedronShape.cpp +218 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btTetrahedronShape.h +74 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleBuffer.cpp +35 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleBuffer.h +69 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleCallback.cpp +28 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleCallback.h +42 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexArray.cpp +95 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexArray.h +133 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.cpp +86 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.h +84 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleInfoMap.h +241 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleMesh.cpp +140 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleMesh.h +69 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleMeshShape.cpp +211 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleMeshShape.h +89 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleShape.h +182 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btUniformScalingShape.cpp +160 -0
- data/deps/include/bullet/BulletCollision/CollisionShapes/btUniformScalingShape.h +87 -0
- data/deps/include/bullet/BulletCollision/Doxyfile +746 -0
- data/deps/include/bullet/BulletCollision/Gimpact/btBoxCollision.h +647 -0
- data/deps/include/bullet/BulletCollision/Gimpact/btClipPolygon.h +182 -0
- data/deps/include/bullet/BulletCollision/Gimpact/btContactProcessing.cpp +181 -0
- data/deps/include/bullet/BulletCollision/Gimpact/btContactProcessing.h +145 -0
- data/deps/include/bullet/BulletCollision/Gimpact/btGImpactBvh.cpp +498 -0
- data/deps/include/bullet/BulletCollision/Gimpact/btGImpactBvh.h +396 -0
- data/deps/include/bullet/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.cpp +904 -0
- data/deps/include/bullet/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.h +306 -0
- data/deps/include/bullet/BulletCollision/Gimpact/btGImpactMassUtil.h +60 -0
- data/deps/include/bullet/BulletCollision/Gimpact/btGImpactQuantizedBvh.cpp +528 -0
- data/deps/include/bullet/BulletCollision/Gimpact/btGImpactQuantizedBvh.h +372 -0
- data/deps/include/bullet/BulletCollision/Gimpact/btGImpactShape.cpp +203 -0
- data/deps/include/bullet/BulletCollision/Gimpact/btGImpactShape.h +1171 -0
- data/deps/include/bullet/BulletCollision/Gimpact/btGenericPoolAllocator.cpp +283 -0
- data/deps/include/bullet/BulletCollision/Gimpact/btGenericPoolAllocator.h +163 -0
- data/deps/include/bullet/BulletCollision/Gimpact/btGeometryOperations.h +212 -0
- data/deps/include/bullet/BulletCollision/Gimpact/btQuantization.h +88 -0
- data/deps/include/bullet/BulletCollision/Gimpact/btTriangleShapeEx.cpp +218 -0
- data/deps/include/bullet/BulletCollision/Gimpact/btTriangleShapeEx.h +180 -0
- data/deps/include/bullet/BulletCollision/Gimpact/gim_array.h +326 -0
- data/deps/include/bullet/BulletCollision/Gimpact/gim_basic_geometry_operations.h +543 -0
- data/deps/include/bullet/BulletCollision/Gimpact/gim_bitset.h +123 -0
- data/deps/include/bullet/BulletCollision/Gimpact/gim_box_collision.h +590 -0
- data/deps/include/bullet/BulletCollision/Gimpact/gim_box_set.cpp +182 -0
- data/deps/include/bullet/BulletCollision/Gimpact/gim_box_set.h +674 -0
- data/deps/include/bullet/BulletCollision/Gimpact/gim_clip_polygon.h +210 -0
- data/deps/include/bullet/BulletCollision/Gimpact/gim_contact.cpp +146 -0
- data/deps/include/bullet/BulletCollision/Gimpact/gim_contact.h +164 -0
- data/deps/include/bullet/BulletCollision/Gimpact/gim_geom_types.h +97 -0
- data/deps/include/bullet/BulletCollision/Gimpact/gim_geometry.h +42 -0
- data/deps/include/bullet/BulletCollision/Gimpact/gim_hash_table.h +902 -0
- data/deps/include/bullet/BulletCollision/Gimpact/gim_linear_math.h +1573 -0
- data/deps/include/bullet/BulletCollision/Gimpact/gim_math.h +157 -0
- data/deps/include/bullet/BulletCollision/Gimpact/gim_memory.cpp +135 -0
- data/deps/include/bullet/BulletCollision/Gimpact/gim_memory.h +190 -0
- data/deps/include/bullet/BulletCollision/Gimpact/gim_radixsort.h +406 -0
- data/deps/include/bullet/BulletCollision/Gimpact/gim_tri_collision.cpp +640 -0
- data/deps/include/bullet/BulletCollision/Gimpact/gim_tri_collision.h +379 -0
- data/deps/include/bullet/BulletCollision/Makefile +1793 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.cpp +243 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.h +59 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btConvexCast.cpp +20 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btConvexCast.h +73 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btConvexPenetrationDepthSolver.h +42 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btDiscreteCollisionDetectorInterface.h +91 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btGjkConvexCast.cpp +176 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btGjkConvexCast.h +50 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpa2.cpp +989 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpa2.h +75 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.cpp +66 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.h +43 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.cpp +457 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.h +103 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btManifoldPoint.h +158 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.cpp +362 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.h +40 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btPersistentManifold.cpp +302 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btPersistentManifold.h +228 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btPointCollector.h +64 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.cpp +440 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.h +46 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btRaycastCallback.cpp +177 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btRaycastCallback.h +72 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btSimplexSolverInterface.h +63 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.cpp +160 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.h +50 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.cpp +609 -0
- data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h +179 -0
- data/deps/include/bullet/BulletCollision/cmake_install.cmake +29 -0
- data/deps/include/bullet/BulletCollision/ibmsdk/Makefile +112 -0
- data/deps/include/bullet/BulletCollision/premake4.lua +11 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/CXX.includecache +1466 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/Character/btKinematicCharacterController.obj +0 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/ConstraintSolver/btConeTwistConstraint.obj +0 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/ConstraintSolver/btContactConstraint.obj +0 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/ConstraintSolver/btGeneric6DofConstraint.obj +0 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/ConstraintSolver/btGeneric6DofSpringConstraint.obj +0 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/ConstraintSolver/btHinge2Constraint.obj +0 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/ConstraintSolver/btHingeConstraint.obj +0 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/ConstraintSolver/btPoint2PointConstraint.obj +0 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/ConstraintSolver/btSequentialImpulseConstraintSolver.obj +0 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/ConstraintSolver/btSliderConstraint.obj +0 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/ConstraintSolver/btSolve2LinearConstraint.obj +0 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/ConstraintSolver/btTypedConstraint.obj +0 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/ConstraintSolver/btUniversalConstraint.obj +0 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/DependInfo.cmake +48 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/Dynamics/Bullet-C-API.obj +0 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/Dynamics/btDiscreteDynamicsWorld.obj +0 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/Dynamics/btRigidBody.obj +0 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/Dynamics/btSimpleDynamicsWorld.obj +0 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/Vehicle/btRaycastVehicle.obj +0 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/Vehicle/btWheelInfo.obj +0 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/build.make +590 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/cmake_clean.cmake +28 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/cmake_clean_target.cmake +3 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/depend.internal +601 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/depend.make +601 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/flags.make +8 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/includes_CXX.rsp +1 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/link.txt +2 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/progress.make +20 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
- data/deps/include/bullet/BulletDynamics/CMakeFiles/progress.marks +1 -0
- data/deps/include/bullet/BulletDynamics/CMakeLists.txt +112 -0
- data/deps/include/bullet/BulletDynamics/Character/btCharacterControllerInterface.h +46 -0
- data/deps/include/bullet/BulletDynamics/Character/btKinematicCharacterController.cpp +641 -0
- data/deps/include/bullet/BulletDynamics/Character/btKinematicCharacterController.h +163 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btConeTwistConstraint.cpp +1132 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btConeTwistConstraint.h +346 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btConstraintSolver.h +52 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btContactConstraint.cpp +178 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btContactConstraint.h +71 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btContactSolverInfo.h +87 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.cpp +1078 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h +614 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.cpp +185 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.h +99 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btHinge2Constraint.cpp +66 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btHinge2Constraint.h +58 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btHingeConstraint.cpp +1034 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btHingeConstraint.h +381 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btJacobianEntry.h +156 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btPoint2PointConstraint.cpp +230 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btPoint2PointConstraint.h +161 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp +1269 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h +130 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btSliderConstraint.cpp +857 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btSliderConstraint.h +333 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.cpp +255 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.h +107 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btSolverBody.h +191 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btSolverConstraint.h +98 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btTypedConstraint.cpp +220 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btTypedConstraint.h +452 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btUniversalConstraint.cpp +87 -0
- data/deps/include/bullet/BulletDynamics/ConstraintSolver/btUniversalConstraint.h +62 -0
- data/deps/include/bullet/BulletDynamics/Dynamics/Bullet-C-API.cpp +405 -0
- data/deps/include/bullet/BulletDynamics/Dynamics/btActionInterface.h +46 -0
- data/deps/include/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp +1257 -0
- data/deps/include/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h +203 -0
- data/deps/include/bullet/BulletDynamics/Dynamics/btDynamicsWorld.h +151 -0
- data/deps/include/bullet/BulletDynamics/Dynamics/btRigidBody.cpp +403 -0
- data/deps/include/bullet/BulletDynamics/Dynamics/btRigidBody.h +691 -0
- data/deps/include/bullet/BulletDynamics/Dynamics/btSimpleDynamicsWorld.cpp +280 -0
- data/deps/include/bullet/BulletDynamics/Dynamics/btSimpleDynamicsWorld.h +89 -0
- data/deps/include/bullet/BulletDynamics/Makefile +479 -0
- data/deps/include/bullet/BulletDynamics/Vehicle/btRaycastVehicle.cpp +771 -0
- data/deps/include/bullet/BulletDynamics/Vehicle/btRaycastVehicle.h +236 -0
- data/deps/include/bullet/BulletDynamics/Vehicle/btVehicleRaycaster.h +35 -0
- data/deps/include/bullet/BulletDynamics/Vehicle/btWheelInfo.cpp +56 -0
- data/deps/include/bullet/BulletDynamics/Vehicle/btWheelInfo.h +119 -0
- data/deps/include/bullet/BulletDynamics/cmake_install.cmake +29 -0
- data/deps/include/bullet/BulletDynamics/ibmsdk/Makefile +53 -0
- data/deps/include/bullet/BulletDynamics/premake4.lua +11 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/CXX.includecache +1480 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/DependInfo.cmake +47 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/PosixThreadSupport.obj +0 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SequentialThreadSupport.obj +0 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SpuCollisionObjectWrapper.obj +0 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SpuCollisionTaskProcess.obj +0 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SpuContactManifoldCollisionAlgorithm.obj +0 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SpuFakeDma.obj +0 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SpuGatheringCollisionDispatcher.obj +0 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SpuLibspe2Support.obj +0 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SpuNarrowPhaseCollisionTask/SpuCollisionShapes.obj +0 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SpuNarrowPhaseCollisionTask/SpuContactResult.obj +0 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SpuNarrowPhaseCollisionTask/SpuGatheringCollisionTask.obj +0 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SpuNarrowPhaseCollisionTask/SpuMinkowskiPenetrationDepthSolver.obj +0 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SpuNarrowPhaseCollisionTask/boxBoxDistance.obj +0 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SpuSampleTaskProcess.obj +0 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/Win32ThreadSupport.obj +0 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/btGpu3DGridBroadphase.obj +0 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/btParallelConstraintSolver.obj +0 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/btThreadSupportInterface.obj +0 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/build.make +563 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/cmake_clean.cmake +27 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/cmake_clean_target.cmake +3 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/depend.internal +690 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/depend.make +690 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/flags.make +8 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/includes_CXX.rsp +1 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/link.txt +2 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/progress.make +19 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/progress.marks +1 -0
- data/deps/include/bullet/BulletMultiThreaded/CMakeLists.txt +123 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/CMakeFiles/progress.marks +1 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/CMakeLists.txt +13 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/CMakeLists.txt +83 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/ApplyForces.hlsl +95 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/ComputeBounds.hlsl +83 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/Integrate.hlsl +41 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/OutputToVertexArray.hlsl +63 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/PrepareLinks.hlsl +44 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/SolvePositions.hlsl +55 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/SolvePositionsSIMDBatched.hlsl +147 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/UpdateConstants.hlsl +48 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/UpdateNodes.hlsl +49 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/UpdateNormals.hlsl +98 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/UpdatePositions.hlsl +44 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/UpdatePositionsFromVelocities.hlsl +35 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/VSolveLinks.hlsl +55 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/solveCollisionsAndUpdateVelocities.hlsl +170 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/solveCollisionsAndUpdateVelocitiesSIMDBatched.hlsl +191 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolverBuffer_DX11.h +323 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolverLinkData_DX11.h +103 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolverLinkData_DX11SIMDAware.h +173 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolverTriangleData_DX11.h +96 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolverVertexBuffer_DX11.h +107 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolverVertexData_DX11.h +63 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolver_DX11.cpp +2236 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolver_DX11.h +691 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolver_DX11SIMDAware.cpp +1051 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolver_DX11SIMDAware.h +81 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/premake4.lua +23 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/Makefile +122 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/AMD/CMakeLists.txt +62 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/AMD/premake4.lua +27 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/Apple/CMakeLists.txt +77 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/CMakeFiles/progress.marks +1 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/CMakeLists.txt +17 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/Intel/CMakeLists.txt +82 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/Intel/premake4.lua +27 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/Makefile +122 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/BulletSoftBodySolvers_OpenCL_Mini.dir/CXX.includecache +556 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/BulletSoftBodySolvers_OpenCL_Mini.dir/DependInfo.cmake +31 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/BulletSoftBodySolvers_OpenCL_Mini.dir/__/btSoftBodySolver_OpenCL.obj +0 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/BulletSoftBodySolvers_OpenCL_Mini.dir/build.make +104 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/BulletSoftBodySolvers_OpenCL_Mini.dir/cmake_clean.cmake +10 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/BulletSoftBodySolvers_OpenCL_Mini.dir/cmake_clean_target.cmake +3 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/BulletSoftBodySolvers_OpenCL_Mini.dir/depend.internal +76 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/BulletSoftBodySolvers_OpenCL_Mini.dir/depend.make +76 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/BulletSoftBodySolvers_OpenCL_Mini.dir/flags.make +8 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/BulletSoftBodySolvers_OpenCL_Mini.dir/includes_CXX.rsp +1 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/BulletSoftBodySolvers_OpenCL_Mini.dir/link.txt +2 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/BulletSoftBodySolvers_OpenCL_Mini.dir/progress.make +2 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/progress.marks +1 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeLists.txt +75 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/Makefile +155 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/MiniCLTaskWrap.cpp +249 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/cmake_install.cmake +29 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/NVidia/CMakeLists.txt +81 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/NVidia/premake4.lua +27 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/ApplyForces.cl +102 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/ComputeBounds.cl +82 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/Integrate.cl +35 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/OutputToVertexArray.cl +46 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/PrepareLinks.cl +38 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/SolveCollisionsAndUpdateVelocities.cl +204 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/SolveCollisionsAndUpdateVelocitiesSIMDBatched.cl +242 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/SolvePositions.cl +57 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/SolvePositionsSIMDBatched.cl +130 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/UpdateConstants.cl +44 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/UpdateFixedVertexPositions.cl +25 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/UpdateNodes.cl +39 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/UpdateNormals.cl +102 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/UpdatePositions.cl +34 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/UpdatePositionsFromVelocities.cl +28 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/VSolveLinks.cl +45 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverBuffer_OpenCL.h +209 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverLinkData_OpenCL.h +99 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverLinkData_OpenCLSIMDAware.h +169 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverOutputCLtoGL.cpp +126 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverOutputCLtoGL.h +62 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverTriangleData_OpenCL.h +84 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverVertexBuffer_OpenGL.h +166 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverVertexData_OpenCL.h +52 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolver_OpenCL.cpp +1820 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolver_OpenCL.h +527 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolver_OpenCLSIMDAware.cpp +1101 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolver_OpenCLSIMDAware.h +81 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/cmake_install.cmake +35 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/Shared/btSoftBodySolverData.h +748 -0
- data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/cmake_install.cmake +35 -0
- data/deps/include/bullet/BulletMultiThreaded/HeapManager.h +117 -0
- data/deps/include/bullet/BulletMultiThreaded/Makefile +461 -0
- data/deps/include/bullet/BulletMultiThreaded/Makefile.original +187 -0
- data/deps/include/bullet/BulletMultiThreaded/PlatformDefinitions.h +99 -0
- data/deps/include/bullet/BulletMultiThreaded/PosixThreadSupport.cpp +399 -0
- data/deps/include/bullet/BulletMultiThreaded/PosixThreadSupport.h +142 -0
- data/deps/include/bullet/BulletMultiThreaded/PpuAddressSpace.h +37 -0
- data/deps/include/bullet/BulletMultiThreaded/SequentialThreadSupport.cpp +169 -0
- data/deps/include/bullet/BulletMultiThreaded/SequentialThreadSupport.h +96 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuCollisionObjectWrapper.cpp +48 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuCollisionObjectWrapper.h +40 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuCollisionTaskProcess.cpp +317 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuCollisionTaskProcess.h +163 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuContactManifoldCollisionAlgorithm.cpp +69 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuContactManifoldCollisionAlgorithm.h +120 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuDoubleBuffer.h +126 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuFakeDma.cpp +215 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuFakeDma.h +135 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuGatheringCollisionDispatcher.cpp +276 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuGatheringCollisionDispatcher.h +72 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuLibspe2Support.cpp +257 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuLibspe2Support.h +180 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/Box.h +167 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuCollisionShapes.cpp +302 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuCollisionShapes.h +128 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuContactResult.cpp +248 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuContactResult.h +106 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuConvexPenetrationDepthSolver.h +51 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuGatheringCollisionTask.cpp +1415 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuGatheringCollisionTask.h +140 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuLocalSupport.h +19 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuMinkowskiPenetrationDepthSolver.cpp +348 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuMinkowskiPenetrationDepthSolver.h +48 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuPreferredPenetrationDirections.h +70 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/boxBoxDistance.cpp +1160 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/boxBoxDistance.h +65 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/readme.txt +1 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuSampleTask/SpuSampleTask.cpp +214 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuSampleTask/SpuSampleTask.h +54 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuSampleTask/readme.txt +1 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuSampleTaskProcess.cpp +222 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuSampleTaskProcess.h +153 -0
- data/deps/include/bullet/BulletMultiThreaded/SpuSync.h +149 -0
- data/deps/include/bullet/BulletMultiThreaded/TrbDynBody.h +79 -0
- data/deps/include/bullet/BulletMultiThreaded/TrbStateVec.h +339 -0
- data/deps/include/bullet/BulletMultiThreaded/Win32ThreadSupport.cpp +446 -0
- data/deps/include/bullet/BulletMultiThreaded/Win32ThreadSupport.h +138 -0
- data/deps/include/bullet/BulletMultiThreaded/btGpu3DGridBroadphase.cpp +590 -0
- data/deps/include/bullet/BulletMultiThreaded/btGpu3DGridBroadphase.h +138 -0
- data/deps/include/bullet/BulletMultiThreaded/btGpu3DGridBroadphaseSharedCode.h +430 -0
- data/deps/include/bullet/BulletMultiThreaded/btGpu3DGridBroadphaseSharedDefs.h +61 -0
- data/deps/include/bullet/BulletMultiThreaded/btGpu3DGridBroadphaseSharedTypes.h +67 -0
- data/deps/include/bullet/BulletMultiThreaded/btGpuDefines.h +211 -0
- data/deps/include/bullet/BulletMultiThreaded/btGpuUtilsSharedCode.h +55 -0
- data/deps/include/bullet/BulletMultiThreaded/btGpuUtilsSharedDefs.h +52 -0
- data/deps/include/bullet/BulletMultiThreaded/btParallelConstraintSolver.cpp +1391 -0
- data/deps/include/bullet/BulletMultiThreaded/btParallelConstraintSolver.h +285 -0
- data/deps/include/bullet/BulletMultiThreaded/btThreadSupportInterface.cpp +22 -0
- data/deps/include/bullet/BulletMultiThreaded/btThreadSupportInterface.h +85 -0
- data/deps/include/bullet/BulletMultiThreaded/cmake_install.cmake +35 -0
- data/deps/include/bullet/BulletMultiThreaded/vectormath2bullet.h +73 -0
- data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/CXX.includecache +750 -0
- data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/DependInfo.cmake +37 -0
- data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/btDefaultSoftBodySolver.obj +0 -0
- data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/btSoftBody.obj +0 -0
- data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/btSoftBodyConcaveCollisionAlgorithm.obj +0 -0
- data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/btSoftBodyHelpers.obj +0 -0
- data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/btSoftBodyRigidBodyCollisionConfiguration.obj +0 -0
- data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/btSoftRigidCollisionAlgorithm.obj +0 -0
- data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/btSoftRigidDynamicsWorld.obj +0 -0
- data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/btSoftSoftCollisionAlgorithm.obj +0 -0
- data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/build.make +293 -0
- data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/cmake_clean.cmake +17 -0
- data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/cmake_clean_target.cmake +3 -0
- data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/depend.internal +344 -0
- data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/depend.make +344 -0
- data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/flags.make +8 -0
- data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/includes_CXX.rsp +1 -0
- data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/link.txt +2 -0
- data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/progress.make +9 -0
- data/deps/include/bullet/BulletSoftBody/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
- data/deps/include/bullet/BulletSoftBody/CMakeFiles/progress.marks +1 -0
- data/deps/include/bullet/BulletSoftBody/CMakeLists.txt +65 -0
- data/deps/include/bullet/BulletSoftBody/Makefile +281 -0
- data/deps/include/bullet/BulletSoftBody/btDefaultSoftBodySolver.cpp +151 -0
- data/deps/include/bullet/BulletSoftBody/btDefaultSoftBodySolver.h +63 -0
- data/deps/include/bullet/BulletSoftBody/btSoftBody.cpp +3538 -0
- data/deps/include/bullet/BulletSoftBody/btSoftBody.h +987 -0
- data/deps/include/bullet/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.cpp +368 -0
- data/deps/include/bullet/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.h +153 -0
- data/deps/include/bullet/BulletSoftBody/btSoftBodyData.h +217 -0
- data/deps/include/bullet/BulletSoftBody/btSoftBodyHelpers.cpp +1055 -0
- data/deps/include/bullet/BulletSoftBody/btSoftBodyHelpers.h +143 -0
- data/deps/include/bullet/BulletSoftBody/btSoftBodyInternals.h +930 -0
- data/deps/include/bullet/BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.cpp +134 -0
- data/deps/include/bullet/BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.h +48 -0
- data/deps/include/bullet/BulletSoftBody/btSoftBodySolverVertexBuffer.h +165 -0
- data/deps/include/bullet/BulletSoftBody/btSoftBodySolvers.h +154 -0
- data/deps/include/bullet/BulletSoftBody/btSoftRigidCollisionAlgorithm.cpp +84 -0
- data/deps/include/bullet/BulletSoftBody/btSoftRigidCollisionAlgorithm.h +75 -0
- data/deps/include/bullet/BulletSoftBody/btSoftRigidDynamicsWorld.cpp +365 -0
- data/deps/include/bullet/BulletSoftBody/btSoftRigidDynamicsWorld.h +107 -0
- data/deps/include/bullet/BulletSoftBody/btSoftSoftCollisionAlgorithm.cpp +47 -0
- data/deps/include/bullet/BulletSoftBody/btSoftSoftCollisionAlgorithm.h +69 -0
- data/deps/include/bullet/BulletSoftBody/btSparseSDF.h +306 -0
- data/deps/include/bullet/BulletSoftBody/cmake_install.cmake +29 -0
- data/deps/include/bullet/BulletSoftBody/premake4.lua +11 -0
- data/deps/include/bullet/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
- data/deps/include/bullet/CMakeFiles/progress.marks +1 -0
- data/deps/include/bullet/CMakeLists.txt +28 -0
- data/deps/include/bullet/LinearMath/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
- data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/CXX.includecache +154 -0
- data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/DependInfo.cmake +35 -0
- data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/btAlignedAllocator.obj +0 -0
- data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/btConvexHull.obj +0 -0
- data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/btConvexHullComputer.obj +0 -0
- data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/btGeometryUtil.obj +0 -0
- data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/btQuickprof.obj +0 -0
- data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/btSerializer.obj +0 -0
- data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/build.make +239 -0
- data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/cmake_clean.cmake +15 -0
- data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/cmake_clean_target.cmake +3 -0
- data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/depend.internal +38 -0
- data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/depend.make +38 -0
- data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/flags.make +8 -0
- data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/includes_CXX.rsp +1 -0
- data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/link.txt +2 -0
- data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/progress.make +7 -0
- data/deps/include/bullet/LinearMath/CMakeFiles/progress.marks +1 -0
- data/deps/include/bullet/LinearMath/CMakeLists.txt +66 -0
- data/deps/include/bullet/LinearMath/Makefile +245 -0
- data/deps/include/bullet/LinearMath/btAabbUtil2.h +236 -0
- data/deps/include/bullet/LinearMath/btAlignedAllocator.cpp +181 -0
- data/deps/include/bullet/LinearMath/btAlignedAllocator.h +107 -0
- data/deps/include/bullet/LinearMath/btAlignedObjectArray.h +494 -0
- data/deps/include/bullet/LinearMath/btConvexHull.cpp +1174 -0
- data/deps/include/bullet/LinearMath/btConvexHull.h +241 -0
- data/deps/include/bullet/LinearMath/btConvexHullComputer.cpp +2751 -0
- data/deps/include/bullet/LinearMath/btConvexHullComputer.h +103 -0
- data/deps/include/bullet/LinearMath/btDefaultMotionState.h +40 -0
- data/deps/include/bullet/LinearMath/btGeometryUtil.cpp +185 -0
- data/deps/include/bullet/LinearMath/btGeometryUtil.h +42 -0
- data/deps/include/bullet/LinearMath/btGrahamScan2dConvexHull.h +110 -0
- data/deps/include/bullet/LinearMath/btHashMap.h +450 -0
- data/deps/include/bullet/LinearMath/btIDebugDraw.h +418 -0
- data/deps/include/bullet/LinearMath/btList.h +73 -0
- data/deps/include/bullet/LinearMath/btMatrix3x3.h +771 -0
- data/deps/include/bullet/LinearMath/btMinMax.h +71 -0
- data/deps/include/bullet/LinearMath/btMotionState.h +40 -0
- data/deps/include/bullet/LinearMath/btPoolAllocator.h +121 -0
- data/deps/include/bullet/LinearMath/btQuadWord.h +180 -0
- data/deps/include/bullet/LinearMath/btQuaternion.h +430 -0
- data/deps/include/bullet/LinearMath/btQuickprof.cpp +566 -0
- data/deps/include/bullet/LinearMath/btQuickprof.h +203 -0
- data/deps/include/bullet/LinearMath/btRandom.h +42 -0
- data/deps/include/bullet/LinearMath/btScalar.h +539 -0
- data/deps/include/bullet/LinearMath/btSerializer.cpp +841 -0
- data/deps/include/bullet/LinearMath/btSerializer.h +639 -0
- data/deps/include/bullet/LinearMath/btStackAlloc.h +116 -0
- data/deps/include/bullet/LinearMath/btTransform.h +307 -0
- data/deps/include/bullet/LinearMath/btTransformUtil.h +228 -0
- data/deps/include/bullet/LinearMath/btVector3.h +766 -0
- data/deps/include/bullet/LinearMath/cmake_install.cmake +29 -0
- data/deps/include/bullet/LinearMath/ibmsdk/Makefile +39 -0
- data/deps/include/bullet/LinearMath/premake4.lua +11 -0
- data/deps/include/bullet/Makefile +122 -0
- data/deps/include/bullet/Makefile.am +554 -0
- data/deps/include/bullet/MiniCL/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
- data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/CXX.includecache +332 -0
- data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/DependInfo.cmake +32 -0
- data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/MiniCL.obj +0 -0
- data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/MiniCLTask/MiniCLTask.obj +0 -0
- data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/MiniCLTaskScheduler.obj +0 -0
- data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/build.make +158 -0
- data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/cmake_clean.cmake +12 -0
- data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/cmake_clean_target.cmake +3 -0
- data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/depend.internal +70 -0
- data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/depend.make +70 -0
- data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/flags.make +8 -0
- data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/includes_CXX.rsp +1 -0
- data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/link.txt +2 -0
- data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/progress.make +4 -0
- data/deps/include/bullet/MiniCL/CMakeFiles/progress.marks +1 -0
- data/deps/include/bullet/MiniCL/CMakeLists.txt +66 -0
- data/deps/include/bullet/MiniCL/Makefile +191 -0
- data/deps/include/bullet/MiniCL/MiniCL.cpp +784 -0
- data/deps/include/bullet/MiniCL/MiniCLTask/MiniCLTask.cpp +74 -0
- data/deps/include/bullet/MiniCL/MiniCLTask/MiniCLTask.h +62 -0
- data/deps/include/bullet/MiniCL/MiniCLTaskScheduler.cpp +519 -0
- data/deps/include/bullet/MiniCL/MiniCLTaskScheduler.h +194 -0
- data/deps/include/bullet/MiniCL/cl.h +867 -0
- data/deps/include/bullet/MiniCL/cl_MiniCL_Defs.h +439 -0
- data/deps/include/bullet/MiniCL/cl_gl.h +113 -0
- data/deps/include/bullet/MiniCL/cl_platform.h +254 -0
- data/deps/include/bullet/MiniCL/cmake_install.cmake +29 -0
- data/deps/include/bullet/btBulletCollisionCommon.h +69 -0
- data/deps/include/bullet/btBulletDynamicsCommon.h +48 -0
- data/deps/include/bullet/cmake_install.cmake +40 -0
- data/deps/include/bullet/ibmsdk/Makefile +16 -0
- data/deps/include/bullet/vectormath/scalar/boolInVec.h +225 -0
- data/deps/include/bullet/vectormath/scalar/floatInVec.h +343 -0
- data/deps/include/bullet/vectormath/scalar/mat_aos.h +1630 -0
- data/deps/include/bullet/vectormath/scalar/quat_aos.h +433 -0
- data/deps/include/bullet/vectormath/scalar/vec_aos.h +1426 -0
- data/deps/include/bullet/vectormath/scalar/vectormath_aos.h +1872 -0
- data/deps/include/bullet/vectormath/sse/boolInVec.h +247 -0
- data/deps/include/bullet/vectormath/sse/floatInVec.h +340 -0
- data/deps/include/bullet/vectormath/sse/mat_aos.h +2190 -0
- data/deps/include/bullet/vectormath/sse/quat_aos.h +579 -0
- data/deps/include/bullet/vectormath/sse/vec_aos.h +1455 -0
- data/deps/include/bullet/vectormath/sse/vecidx_aos.h +80 -0
- data/deps/include/bullet/vectormath/sse/vectormath_aos.h +2547 -0
- data/deps/include/bullet/vectormath/vmInclude.h +27 -0
- data/deps/lib/libBulletCollision.a +0 -0
- data/deps/lib/libBulletDynamics.a +0 -0
- data/deps/lib/libBulletFileLoader.a +0 -0
- data/deps/lib/libBulletMultiThreaded.a +0 -0
- data/deps/lib/libBulletSoftBody.a +0 -0
- data/deps/lib/libBulletSoftBodySolvers_OpenCL_Mini.a +0 -0
- data/deps/lib/libBulletWorldImporter.a +0 -0
- data/deps/lib/libConvexDecomposition.a +0 -0
- data/deps/lib/libGIMPACTUtils.a +0 -0
- data/deps/lib/libHACD.a +0 -0
- data/deps/lib/libLinearMath.a +0 -0
- data/deps/lib/libMiniCL.a +0 -0
- data/lib/Bullet.so +0 -0
- data/lib/BulletConfig.rb +28 -0
- data/lib/Version.rb +5 -0
- data/sample/hello_bullet/HelloBullet.rb +170 -0
- metadata +987 -0
@@ -0,0 +1,3538 @@
|
|
1
|
+
/*
|
2
|
+
Bullet Continuous Collision Detection and Physics Library
|
3
|
+
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
4
|
+
|
5
|
+
This software is provided 'as-is', without any express or implied warranty.
|
6
|
+
In no event will the authors be held liable for any damages arising from the use of this software.
|
7
|
+
Permission is granted to anyone to use this software for any purpose,
|
8
|
+
including commercial applications, and to alter it and redistribute it freely,
|
9
|
+
subject to the following restrictions:
|
10
|
+
|
11
|
+
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
12
|
+
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
13
|
+
3. This notice may not be removed or altered from any source distribution.
|
14
|
+
*/
|
15
|
+
///btSoftBody implementation by Nathanael Presson
|
16
|
+
|
17
|
+
#include "btSoftBodyInternals.h"
|
18
|
+
#include "BulletSoftBody/btSoftBodySolvers.h"
|
19
|
+
#include "btSoftBodyData.h"
|
20
|
+
#include "LinearMath/btSerializer.h"
|
21
|
+
|
22
|
+
|
23
|
+
//
|
24
|
+
btSoftBody::btSoftBody(btSoftBodyWorldInfo* worldInfo,int node_count, const btVector3* x, const btScalar* m)
|
25
|
+
:m_softBodySolver(0),m_worldInfo(worldInfo)
|
26
|
+
{
|
27
|
+
/* Init */
|
28
|
+
initDefaults();
|
29
|
+
|
30
|
+
/* Default material */
|
31
|
+
Material* pm=appendMaterial();
|
32
|
+
pm->m_kLST = 1;
|
33
|
+
pm->m_kAST = 1;
|
34
|
+
pm->m_kVST = 1;
|
35
|
+
pm->m_flags = fMaterial::Default;
|
36
|
+
|
37
|
+
/* Nodes */
|
38
|
+
const btScalar margin=getCollisionShape()->getMargin();
|
39
|
+
m_nodes.resize(node_count);
|
40
|
+
for(int i=0,ni=node_count;i<ni;++i)
|
41
|
+
{
|
42
|
+
Node& n=m_nodes[i];
|
43
|
+
ZeroInitialize(n);
|
44
|
+
n.m_x = x?*x++:btVector3(0,0,0);
|
45
|
+
n.m_q = n.m_x;
|
46
|
+
n.m_im = m?*m++:1;
|
47
|
+
n.m_im = n.m_im>0?1/n.m_im:0;
|
48
|
+
n.m_leaf = m_ndbvt.insert(btDbvtVolume::FromCR(n.m_x,margin),&n);
|
49
|
+
n.m_material= pm;
|
50
|
+
}
|
51
|
+
updateBounds();
|
52
|
+
|
53
|
+
}
|
54
|
+
|
55
|
+
btSoftBody::btSoftBody(btSoftBodyWorldInfo* worldInfo)
|
56
|
+
:m_worldInfo(worldInfo)
|
57
|
+
{
|
58
|
+
initDefaults();
|
59
|
+
}
|
60
|
+
|
61
|
+
|
62
|
+
void btSoftBody::initDefaults()
|
63
|
+
{
|
64
|
+
m_internalType = CO_SOFT_BODY;
|
65
|
+
m_cfg.aeromodel = eAeroModel::V_Point;
|
66
|
+
m_cfg.kVCF = 1;
|
67
|
+
m_cfg.kDG = 0;
|
68
|
+
m_cfg.kLF = 0;
|
69
|
+
m_cfg.kDP = 0;
|
70
|
+
m_cfg.kPR = 0;
|
71
|
+
m_cfg.kVC = 0;
|
72
|
+
m_cfg.kDF = (btScalar)0.2;
|
73
|
+
m_cfg.kMT = 0;
|
74
|
+
m_cfg.kCHR = (btScalar)1.0;
|
75
|
+
m_cfg.kKHR = (btScalar)0.1;
|
76
|
+
m_cfg.kSHR = (btScalar)1.0;
|
77
|
+
m_cfg.kAHR = (btScalar)0.7;
|
78
|
+
m_cfg.kSRHR_CL = (btScalar)0.1;
|
79
|
+
m_cfg.kSKHR_CL = (btScalar)1;
|
80
|
+
m_cfg.kSSHR_CL = (btScalar)0.5;
|
81
|
+
m_cfg.kSR_SPLT_CL = (btScalar)0.5;
|
82
|
+
m_cfg.kSK_SPLT_CL = (btScalar)0.5;
|
83
|
+
m_cfg.kSS_SPLT_CL = (btScalar)0.5;
|
84
|
+
m_cfg.maxvolume = (btScalar)1;
|
85
|
+
m_cfg.timescale = 1;
|
86
|
+
m_cfg.viterations = 0;
|
87
|
+
m_cfg.piterations = 1;
|
88
|
+
m_cfg.diterations = 0;
|
89
|
+
m_cfg.citerations = 4;
|
90
|
+
m_cfg.collisions = fCollision::Default;
|
91
|
+
m_pose.m_bvolume = false;
|
92
|
+
m_pose.m_bframe = false;
|
93
|
+
m_pose.m_volume = 0;
|
94
|
+
m_pose.m_com = btVector3(0,0,0);
|
95
|
+
m_pose.m_rot.setIdentity();
|
96
|
+
m_pose.m_scl.setIdentity();
|
97
|
+
m_tag = 0;
|
98
|
+
m_timeacc = 0;
|
99
|
+
m_bUpdateRtCst = true;
|
100
|
+
m_bounds[0] = btVector3(0,0,0);
|
101
|
+
m_bounds[1] = btVector3(0,0,0);
|
102
|
+
m_worldTransform.setIdentity();
|
103
|
+
setSolver(eSolverPresets::Positions);
|
104
|
+
|
105
|
+
/* Collision shape */
|
106
|
+
///for now, create a collision shape internally
|
107
|
+
m_collisionShape = new btSoftBodyCollisionShape(this);
|
108
|
+
m_collisionShape->setMargin(0.25);
|
109
|
+
|
110
|
+
m_initialWorldTransform.setIdentity();
|
111
|
+
|
112
|
+
m_windVelocity = btVector3(0,0,0);
|
113
|
+
|
114
|
+
}
|
115
|
+
|
116
|
+
//
|
117
|
+
btSoftBody::~btSoftBody()
|
118
|
+
{
|
119
|
+
//for now, delete the internal shape
|
120
|
+
delete m_collisionShape;
|
121
|
+
int i;
|
122
|
+
|
123
|
+
releaseClusters();
|
124
|
+
for(i=0;i<m_materials.size();++i)
|
125
|
+
btAlignedFree(m_materials[i]);
|
126
|
+
for(i=0;i<m_joints.size();++i)
|
127
|
+
btAlignedFree(m_joints[i]);
|
128
|
+
}
|
129
|
+
|
130
|
+
//
|
131
|
+
bool btSoftBody::checkLink(int node0,int node1) const
|
132
|
+
{
|
133
|
+
return(checkLink(&m_nodes[node0],&m_nodes[node1]));
|
134
|
+
}
|
135
|
+
|
136
|
+
//
|
137
|
+
bool btSoftBody::checkLink(const Node* node0,const Node* node1) const
|
138
|
+
{
|
139
|
+
const Node* n[]={node0,node1};
|
140
|
+
for(int i=0,ni=m_links.size();i<ni;++i)
|
141
|
+
{
|
142
|
+
const Link& l=m_links[i];
|
143
|
+
if( (l.m_n[0]==n[0]&&l.m_n[1]==n[1])||
|
144
|
+
(l.m_n[0]==n[1]&&l.m_n[1]==n[0]))
|
145
|
+
{
|
146
|
+
return(true);
|
147
|
+
}
|
148
|
+
}
|
149
|
+
return(false);
|
150
|
+
}
|
151
|
+
|
152
|
+
//
|
153
|
+
bool btSoftBody::checkFace(int node0,int node1,int node2) const
|
154
|
+
{
|
155
|
+
const Node* n[]={ &m_nodes[node0],
|
156
|
+
&m_nodes[node1],
|
157
|
+
&m_nodes[node2]};
|
158
|
+
for(int i=0,ni=m_faces.size();i<ni;++i)
|
159
|
+
{
|
160
|
+
const Face& f=m_faces[i];
|
161
|
+
int c=0;
|
162
|
+
for(int j=0;j<3;++j)
|
163
|
+
{
|
164
|
+
if( (f.m_n[j]==n[0])||
|
165
|
+
(f.m_n[j]==n[1])||
|
166
|
+
(f.m_n[j]==n[2])) c|=1<<j; else break;
|
167
|
+
}
|
168
|
+
if(c==7) return(true);
|
169
|
+
}
|
170
|
+
return(false);
|
171
|
+
}
|
172
|
+
|
173
|
+
//
|
174
|
+
btSoftBody::Material* btSoftBody::appendMaterial()
|
175
|
+
{
|
176
|
+
Material* pm=new(btAlignedAlloc(sizeof(Material),16)) Material();
|
177
|
+
if(m_materials.size()>0)
|
178
|
+
*pm=*m_materials[0];
|
179
|
+
else
|
180
|
+
ZeroInitialize(*pm);
|
181
|
+
m_materials.push_back(pm);
|
182
|
+
return(pm);
|
183
|
+
}
|
184
|
+
|
185
|
+
//
|
186
|
+
void btSoftBody::appendNote( const char* text,
|
187
|
+
const btVector3& o,
|
188
|
+
const btVector4& c,
|
189
|
+
Node* n0,
|
190
|
+
Node* n1,
|
191
|
+
Node* n2,
|
192
|
+
Node* n3)
|
193
|
+
{
|
194
|
+
Note n;
|
195
|
+
ZeroInitialize(n);
|
196
|
+
n.m_rank = 0;
|
197
|
+
n.m_text = text;
|
198
|
+
n.m_offset = o;
|
199
|
+
n.m_coords[0] = c.x();
|
200
|
+
n.m_coords[1] = c.y();
|
201
|
+
n.m_coords[2] = c.z();
|
202
|
+
n.m_coords[3] = c.w();
|
203
|
+
n.m_nodes[0] = n0;n.m_rank+=n0?1:0;
|
204
|
+
n.m_nodes[1] = n1;n.m_rank+=n1?1:0;
|
205
|
+
n.m_nodes[2] = n2;n.m_rank+=n2?1:0;
|
206
|
+
n.m_nodes[3] = n3;n.m_rank+=n3?1:0;
|
207
|
+
m_notes.push_back(n);
|
208
|
+
}
|
209
|
+
|
210
|
+
//
|
211
|
+
void btSoftBody::appendNote( const char* text,
|
212
|
+
const btVector3& o,
|
213
|
+
Node* feature)
|
214
|
+
{
|
215
|
+
appendNote(text,o,btVector4(1,0,0,0),feature);
|
216
|
+
}
|
217
|
+
|
218
|
+
//
|
219
|
+
void btSoftBody::appendNote( const char* text,
|
220
|
+
const btVector3& o,
|
221
|
+
Link* feature)
|
222
|
+
{
|
223
|
+
static const btScalar w=1/(btScalar)2;
|
224
|
+
appendNote(text,o,btVector4(w,w,0,0), feature->m_n[0],
|
225
|
+
feature->m_n[1]);
|
226
|
+
}
|
227
|
+
|
228
|
+
//
|
229
|
+
void btSoftBody::appendNote( const char* text,
|
230
|
+
const btVector3& o,
|
231
|
+
Face* feature)
|
232
|
+
{
|
233
|
+
static const btScalar w=1/(btScalar)3;
|
234
|
+
appendNote(text,o,btVector4(w,w,w,0), feature->m_n[0],
|
235
|
+
feature->m_n[1],
|
236
|
+
feature->m_n[2]);
|
237
|
+
}
|
238
|
+
|
239
|
+
//
|
240
|
+
void btSoftBody::appendNode( const btVector3& x,btScalar m)
|
241
|
+
{
|
242
|
+
if(m_nodes.capacity()==m_nodes.size())
|
243
|
+
{
|
244
|
+
pointersToIndices();
|
245
|
+
m_nodes.reserve(m_nodes.size()*2+1);
|
246
|
+
indicesToPointers();
|
247
|
+
}
|
248
|
+
const btScalar margin=getCollisionShape()->getMargin();
|
249
|
+
m_nodes.push_back(Node());
|
250
|
+
Node& n=m_nodes[m_nodes.size()-1];
|
251
|
+
ZeroInitialize(n);
|
252
|
+
n.m_x = x;
|
253
|
+
n.m_q = n.m_x;
|
254
|
+
n.m_im = m>0?1/m:0;
|
255
|
+
n.m_material = m_materials[0];
|
256
|
+
n.m_leaf = m_ndbvt.insert(btDbvtVolume::FromCR(n.m_x,margin),&n);
|
257
|
+
}
|
258
|
+
|
259
|
+
//
|
260
|
+
void btSoftBody::appendLink(int model,Material* mat)
|
261
|
+
{
|
262
|
+
Link l;
|
263
|
+
if(model>=0)
|
264
|
+
l=m_links[model];
|
265
|
+
else
|
266
|
+
{ ZeroInitialize(l);l.m_material=mat?mat:m_materials[0]; }
|
267
|
+
m_links.push_back(l);
|
268
|
+
}
|
269
|
+
|
270
|
+
//
|
271
|
+
void btSoftBody::appendLink( int node0,
|
272
|
+
int node1,
|
273
|
+
Material* mat,
|
274
|
+
bool bcheckexist)
|
275
|
+
{
|
276
|
+
appendLink(&m_nodes[node0],&m_nodes[node1],mat,bcheckexist);
|
277
|
+
}
|
278
|
+
|
279
|
+
//
|
280
|
+
void btSoftBody::appendLink( Node* node0,
|
281
|
+
Node* node1,
|
282
|
+
Material* mat,
|
283
|
+
bool bcheckexist)
|
284
|
+
{
|
285
|
+
if((!bcheckexist)||(!checkLink(node0,node1)))
|
286
|
+
{
|
287
|
+
appendLink(-1,mat);
|
288
|
+
Link& l=m_links[m_links.size()-1];
|
289
|
+
l.m_n[0] = node0;
|
290
|
+
l.m_n[1] = node1;
|
291
|
+
l.m_rl = (l.m_n[0]->m_x-l.m_n[1]->m_x).length();
|
292
|
+
m_bUpdateRtCst=true;
|
293
|
+
}
|
294
|
+
}
|
295
|
+
|
296
|
+
//
|
297
|
+
void btSoftBody::appendFace(int model,Material* mat)
|
298
|
+
{
|
299
|
+
Face f;
|
300
|
+
if(model>=0)
|
301
|
+
{ f=m_faces[model]; }
|
302
|
+
else
|
303
|
+
{ ZeroInitialize(f);f.m_material=mat?mat:m_materials[0]; }
|
304
|
+
m_faces.push_back(f);
|
305
|
+
}
|
306
|
+
|
307
|
+
//
|
308
|
+
void btSoftBody::appendFace(int node0,int node1,int node2,Material* mat)
|
309
|
+
{
|
310
|
+
if (node0==node1)
|
311
|
+
return;
|
312
|
+
if (node1==node2)
|
313
|
+
return;
|
314
|
+
if (node2==node0)
|
315
|
+
return;
|
316
|
+
|
317
|
+
appendFace(-1,mat);
|
318
|
+
Face& f=m_faces[m_faces.size()-1];
|
319
|
+
btAssert(node0!=node1);
|
320
|
+
btAssert(node1!=node2);
|
321
|
+
btAssert(node2!=node0);
|
322
|
+
f.m_n[0] = &m_nodes[node0];
|
323
|
+
f.m_n[1] = &m_nodes[node1];
|
324
|
+
f.m_n[2] = &m_nodes[node2];
|
325
|
+
f.m_ra = AreaOf( f.m_n[0]->m_x,
|
326
|
+
f.m_n[1]->m_x,
|
327
|
+
f.m_n[2]->m_x);
|
328
|
+
m_bUpdateRtCst=true;
|
329
|
+
}
|
330
|
+
|
331
|
+
//
|
332
|
+
void btSoftBody::appendTetra(int model,Material* mat)
|
333
|
+
{
|
334
|
+
Tetra t;
|
335
|
+
if(model>=0)
|
336
|
+
t=m_tetras[model];
|
337
|
+
else
|
338
|
+
{ ZeroInitialize(t);t.m_material=mat?mat:m_materials[0]; }
|
339
|
+
m_tetras.push_back(t);
|
340
|
+
}
|
341
|
+
|
342
|
+
//
|
343
|
+
void btSoftBody::appendTetra(int node0,
|
344
|
+
int node1,
|
345
|
+
int node2,
|
346
|
+
int node3,
|
347
|
+
Material* mat)
|
348
|
+
{
|
349
|
+
appendTetra(-1,mat);
|
350
|
+
Tetra& t=m_tetras[m_tetras.size()-1];
|
351
|
+
t.m_n[0] = &m_nodes[node0];
|
352
|
+
t.m_n[1] = &m_nodes[node1];
|
353
|
+
t.m_n[2] = &m_nodes[node2];
|
354
|
+
t.m_n[3] = &m_nodes[node3];
|
355
|
+
t.m_rv = VolumeOf(t.m_n[0]->m_x,t.m_n[1]->m_x,t.m_n[2]->m_x,t.m_n[3]->m_x);
|
356
|
+
m_bUpdateRtCst=true;
|
357
|
+
}
|
358
|
+
|
359
|
+
//
|
360
|
+
|
361
|
+
void btSoftBody::appendAnchor(int node,btRigidBody* body, bool disableCollisionBetweenLinkedBodies,btScalar influence)
|
362
|
+
{
|
363
|
+
btVector3 local = body->getWorldTransform().inverse()*m_nodes[node].m_x;
|
364
|
+
appendAnchor(node,body,local,disableCollisionBetweenLinkedBodies,influence);
|
365
|
+
}
|
366
|
+
|
367
|
+
//
|
368
|
+
void btSoftBody::appendAnchor(int node,btRigidBody* body, const btVector3& localPivot,bool disableCollisionBetweenLinkedBodies,btScalar influence)
|
369
|
+
{
|
370
|
+
if (disableCollisionBetweenLinkedBodies)
|
371
|
+
{
|
372
|
+
if (m_collisionDisabledObjects.findLinearSearch(body)==m_collisionDisabledObjects.size())
|
373
|
+
{
|
374
|
+
m_collisionDisabledObjects.push_back(body);
|
375
|
+
}
|
376
|
+
}
|
377
|
+
|
378
|
+
Anchor a;
|
379
|
+
a.m_node = &m_nodes[node];
|
380
|
+
a.m_body = body;
|
381
|
+
a.m_local = localPivot;
|
382
|
+
a.m_node->m_battach = 1;
|
383
|
+
a.m_influence = influence;
|
384
|
+
m_anchors.push_back(a);
|
385
|
+
}
|
386
|
+
|
387
|
+
//
|
388
|
+
void btSoftBody::appendLinearJoint(const LJoint::Specs& specs,Cluster* body0,Body body1)
|
389
|
+
{
|
390
|
+
LJoint* pj = new(btAlignedAlloc(sizeof(LJoint),16)) LJoint();
|
391
|
+
pj->m_bodies[0] = body0;
|
392
|
+
pj->m_bodies[1] = body1;
|
393
|
+
pj->m_refs[0] = pj->m_bodies[0].xform().inverse()*specs.position;
|
394
|
+
pj->m_refs[1] = pj->m_bodies[1].xform().inverse()*specs.position;
|
395
|
+
pj->m_cfm = specs.cfm;
|
396
|
+
pj->m_erp = specs.erp;
|
397
|
+
pj->m_split = specs.split;
|
398
|
+
m_joints.push_back(pj);
|
399
|
+
}
|
400
|
+
|
401
|
+
//
|
402
|
+
void btSoftBody::appendLinearJoint(const LJoint::Specs& specs,Body body)
|
403
|
+
{
|
404
|
+
appendLinearJoint(specs,m_clusters[0],body);
|
405
|
+
}
|
406
|
+
|
407
|
+
//
|
408
|
+
void btSoftBody::appendLinearJoint(const LJoint::Specs& specs,btSoftBody* body)
|
409
|
+
{
|
410
|
+
appendLinearJoint(specs,m_clusters[0],body->m_clusters[0]);
|
411
|
+
}
|
412
|
+
|
413
|
+
//
|
414
|
+
void btSoftBody::appendAngularJoint(const AJoint::Specs& specs,Cluster* body0,Body body1)
|
415
|
+
{
|
416
|
+
AJoint* pj = new(btAlignedAlloc(sizeof(AJoint),16)) AJoint();
|
417
|
+
pj->m_bodies[0] = body0;
|
418
|
+
pj->m_bodies[1] = body1;
|
419
|
+
pj->m_refs[0] = pj->m_bodies[0].xform().inverse().getBasis()*specs.axis;
|
420
|
+
pj->m_refs[1] = pj->m_bodies[1].xform().inverse().getBasis()*specs.axis;
|
421
|
+
pj->m_cfm = specs.cfm;
|
422
|
+
pj->m_erp = specs.erp;
|
423
|
+
pj->m_split = specs.split;
|
424
|
+
pj->m_icontrol = specs.icontrol;
|
425
|
+
m_joints.push_back(pj);
|
426
|
+
}
|
427
|
+
|
428
|
+
//
|
429
|
+
void btSoftBody::appendAngularJoint(const AJoint::Specs& specs,Body body)
|
430
|
+
{
|
431
|
+
appendAngularJoint(specs,m_clusters[0],body);
|
432
|
+
}
|
433
|
+
|
434
|
+
//
|
435
|
+
void btSoftBody::appendAngularJoint(const AJoint::Specs& specs,btSoftBody* body)
|
436
|
+
{
|
437
|
+
appendAngularJoint(specs,m_clusters[0],body->m_clusters[0]);
|
438
|
+
}
|
439
|
+
|
440
|
+
//
|
441
|
+
void btSoftBody::addForce(const btVector3& force)
|
442
|
+
{
|
443
|
+
for(int i=0,ni=m_nodes.size();i<ni;++i) addForce(force,i);
|
444
|
+
}
|
445
|
+
|
446
|
+
//
|
447
|
+
void btSoftBody::addForce(const btVector3& force,int node)
|
448
|
+
{
|
449
|
+
Node& n=m_nodes[node];
|
450
|
+
if(n.m_im>0)
|
451
|
+
{
|
452
|
+
n.m_f += force;
|
453
|
+
}
|
454
|
+
}
|
455
|
+
|
456
|
+
void btSoftBody::addAeroForceToNode(const btVector3& windVelocity,int nodeIndex)
|
457
|
+
{
|
458
|
+
btAssert(nodeIndex >= 0 && nodeIndex < m_nodes.size());
|
459
|
+
|
460
|
+
const btScalar dt = m_sst.sdt;
|
461
|
+
const btScalar kLF = m_cfg.kLF;
|
462
|
+
const btScalar kDG = m_cfg.kDG;
|
463
|
+
const btScalar kPR = m_cfg.kPR;
|
464
|
+
const btScalar kVC = m_cfg.kVC;
|
465
|
+
const bool as_lift = kLF>0;
|
466
|
+
const bool as_drag = kDG>0;
|
467
|
+
const bool as_aero = as_lift || as_drag;
|
468
|
+
const bool as_vaero = as_aero && (m_cfg.aeromodel < btSoftBody::eAeroModel::F_TwoSided);
|
469
|
+
|
470
|
+
Node& n = m_nodes[nodeIndex];
|
471
|
+
|
472
|
+
if( n.m_im>0 )
|
473
|
+
{
|
474
|
+
btSoftBody::sMedium medium;
|
475
|
+
|
476
|
+
EvaluateMedium(m_worldInfo, n.m_x, medium);
|
477
|
+
medium.m_velocity = windVelocity;
|
478
|
+
medium.m_density = m_worldInfo->air_density;
|
479
|
+
|
480
|
+
/* Aerodynamics */
|
481
|
+
if(as_vaero)
|
482
|
+
{
|
483
|
+
const btVector3 rel_v = n.m_v - medium.m_velocity;
|
484
|
+
const btScalar rel_v_len = rel_v.length();
|
485
|
+
const btScalar rel_v2 = rel_v.length2();
|
486
|
+
|
487
|
+
if(rel_v2>SIMD_EPSILON)
|
488
|
+
{
|
489
|
+
const btVector3 rel_v_nrm = rel_v.normalized();
|
490
|
+
btVector3 nrm = n.m_n;
|
491
|
+
|
492
|
+
if (m_cfg.aeromodel == btSoftBody::eAeroModel::V_TwoSidedLiftDrag)
|
493
|
+
{
|
494
|
+
nrm *= (btScalar)( (btDot(nrm,rel_v) < 0) ? -1 : +1);
|
495
|
+
btVector3 fDrag(0, 0, 0);
|
496
|
+
btVector3 fLift(0, 0, 0);
|
497
|
+
|
498
|
+
btScalar n_dot_v = nrm.dot(rel_v_nrm);
|
499
|
+
btScalar tri_area = 0.5f * n.m_area;
|
500
|
+
|
501
|
+
fDrag = 0.5f * kDG * medium.m_density * rel_v2 * tri_area * n_dot_v * (-rel_v_nrm);
|
502
|
+
|
503
|
+
// Check angle of attack
|
504
|
+
// cos(10�) = 0.98480
|
505
|
+
if ( 0 < n_dot_v && n_dot_v < 0.98480f)
|
506
|
+
fLift = 0.5f * kLF * medium.m_density * rel_v_len * tri_area * btSqrt(1.0f-n_dot_v*n_dot_v) * (nrm.cross(rel_v_nrm).cross(rel_v_nrm));
|
507
|
+
|
508
|
+
n.m_f += fDrag;
|
509
|
+
n.m_f += fLift;
|
510
|
+
}
|
511
|
+
else if (m_cfg.aeromodel == btSoftBody::eAeroModel::V_Point || m_cfg.aeromodel == btSoftBody::eAeroModel::V_OneSided || m_cfg.aeromodel == btSoftBody::eAeroModel::V_TwoSided)
|
512
|
+
{
|
513
|
+
if (btSoftBody::eAeroModel::V_TwoSided)
|
514
|
+
nrm *= (btScalar)( (btDot(nrm,rel_v) < 0) ? -1 : +1);
|
515
|
+
|
516
|
+
const btScalar dvn = btDot(rel_v,nrm);
|
517
|
+
/* Compute forces */
|
518
|
+
if(dvn>0)
|
519
|
+
{
|
520
|
+
btVector3 force(0,0,0);
|
521
|
+
const btScalar c0 = n.m_area * dvn * rel_v2/2;
|
522
|
+
const btScalar c1 = c0 * medium.m_density;
|
523
|
+
force += nrm*(-c1*kLF);
|
524
|
+
force += rel_v.normalized() * (-c1 * kDG);
|
525
|
+
ApplyClampedForce(n, force, dt);
|
526
|
+
}
|
527
|
+
}
|
528
|
+
}
|
529
|
+
}
|
530
|
+
}
|
531
|
+
}
|
532
|
+
|
533
|
+
void btSoftBody::addAeroForceToFace(const btVector3& windVelocity,int faceIndex)
|
534
|
+
{
|
535
|
+
const btScalar dt = m_sst.sdt;
|
536
|
+
const btScalar kLF = m_cfg.kLF;
|
537
|
+
const btScalar kDG = m_cfg.kDG;
|
538
|
+
const btScalar kPR = m_cfg.kPR;
|
539
|
+
const btScalar kVC = m_cfg.kVC;
|
540
|
+
const bool as_lift = kLF>0;
|
541
|
+
const bool as_drag = kDG>0;
|
542
|
+
const bool as_aero = as_lift || as_drag;
|
543
|
+
const bool as_faero = as_aero && (m_cfg.aeromodel >= btSoftBody::eAeroModel::F_TwoSided);
|
544
|
+
|
545
|
+
if(as_faero)
|
546
|
+
{
|
547
|
+
btSoftBody::Face& f=m_faces[faceIndex];
|
548
|
+
|
549
|
+
btSoftBody::sMedium medium;
|
550
|
+
|
551
|
+
const btVector3 v=(f.m_n[0]->m_v+f.m_n[1]->m_v+f.m_n[2]->m_v)/3;
|
552
|
+
const btVector3 x=(f.m_n[0]->m_x+f.m_n[1]->m_x+f.m_n[2]->m_x)/3;
|
553
|
+
EvaluateMedium(m_worldInfo,x,medium);
|
554
|
+
medium.m_velocity = windVelocity;
|
555
|
+
medium.m_density = m_worldInfo->air_density;
|
556
|
+
const btVector3 rel_v=v-medium.m_velocity;
|
557
|
+
const btScalar rel_v_len = rel_v.length();
|
558
|
+
const btScalar rel_v2=rel_v.length2();
|
559
|
+
|
560
|
+
if(rel_v2>SIMD_EPSILON)
|
561
|
+
{
|
562
|
+
const btVector3 rel_v_nrm = rel_v.normalized();
|
563
|
+
btVector3 nrm = f.m_normal;
|
564
|
+
|
565
|
+
if (m_cfg.aeromodel == btSoftBody::eAeroModel::F_TwoSidedLiftDrag)
|
566
|
+
{
|
567
|
+
nrm *= (btScalar)( (btDot(nrm,rel_v) < 0) ? -1 : +1);
|
568
|
+
|
569
|
+
btVector3 fDrag(0, 0, 0);
|
570
|
+
btVector3 fLift(0, 0, 0);
|
571
|
+
|
572
|
+
btScalar n_dot_v = nrm.dot(rel_v_nrm);
|
573
|
+
btScalar tri_area = 0.5f * f.m_ra;
|
574
|
+
|
575
|
+
fDrag = 0.5f * kDG * medium.m_density * rel_v2 * tri_area * n_dot_v * (-rel_v_nrm);
|
576
|
+
|
577
|
+
// Check angle of attack
|
578
|
+
// cos(10�) = 0.98480
|
579
|
+
if ( 0 < n_dot_v && n_dot_v < 0.98480f)
|
580
|
+
fLift = 0.5f * kLF * medium.m_density * rel_v_len * tri_area * btSqrt(1.0f-n_dot_v*n_dot_v) * (nrm.cross(rel_v_nrm).cross(rel_v_nrm));
|
581
|
+
|
582
|
+
fDrag /= 3;
|
583
|
+
fLift /= 3;
|
584
|
+
|
585
|
+
for(int j=0;j<3;++j)
|
586
|
+
{
|
587
|
+
if (f.m_n[j]->m_im>0)
|
588
|
+
{
|
589
|
+
f.m_n[j]->m_f += fDrag;
|
590
|
+
f.m_n[j]->m_f += fLift;
|
591
|
+
}
|
592
|
+
}
|
593
|
+
}
|
594
|
+
else if (m_cfg.aeromodel == btSoftBody::eAeroModel::F_OneSided || m_cfg.aeromodel == btSoftBody::eAeroModel::F_TwoSided)
|
595
|
+
{
|
596
|
+
if (btSoftBody::eAeroModel::F_TwoSided)
|
597
|
+
nrm *= (btScalar)( (btDot(nrm,rel_v) < 0) ? -1 : +1);
|
598
|
+
|
599
|
+
const btScalar dvn=btDot(rel_v,nrm);
|
600
|
+
/* Compute forces */
|
601
|
+
if(dvn>0)
|
602
|
+
{
|
603
|
+
btVector3 force(0,0,0);
|
604
|
+
const btScalar c0 = f.m_ra*dvn*rel_v2;
|
605
|
+
const btScalar c1 = c0*medium.m_density;
|
606
|
+
force += nrm*(-c1*kLF);
|
607
|
+
force += rel_v.normalized()*(-c1*kDG);
|
608
|
+
force /= 3;
|
609
|
+
for(int j=0;j<3;++j) ApplyClampedForce(*f.m_n[j],force,dt);
|
610
|
+
}
|
611
|
+
}
|
612
|
+
}
|
613
|
+
}
|
614
|
+
|
615
|
+
}
|
616
|
+
|
617
|
+
//
|
618
|
+
void btSoftBody::addVelocity(const btVector3& velocity)
|
619
|
+
{
|
620
|
+
for(int i=0,ni=m_nodes.size();i<ni;++i) addVelocity(velocity,i);
|
621
|
+
}
|
622
|
+
|
623
|
+
/* Set velocity for the entire body */
|
624
|
+
void btSoftBody::setVelocity( const btVector3& velocity)
|
625
|
+
{
|
626
|
+
for(int i=0,ni=m_nodes.size();i<ni;++i)
|
627
|
+
{
|
628
|
+
Node& n=m_nodes[i];
|
629
|
+
if(n.m_im>0)
|
630
|
+
{
|
631
|
+
n.m_v = velocity;
|
632
|
+
}
|
633
|
+
}
|
634
|
+
}
|
635
|
+
|
636
|
+
|
637
|
+
//
|
638
|
+
void btSoftBody::addVelocity(const btVector3& velocity,int node)
|
639
|
+
{
|
640
|
+
Node& n=m_nodes[node];
|
641
|
+
if(n.m_im>0)
|
642
|
+
{
|
643
|
+
n.m_v += velocity;
|
644
|
+
}
|
645
|
+
}
|
646
|
+
|
647
|
+
//
|
648
|
+
void btSoftBody::setMass(int node,btScalar mass)
|
649
|
+
{
|
650
|
+
m_nodes[node].m_im=mass>0?1/mass:0;
|
651
|
+
m_bUpdateRtCst=true;
|
652
|
+
}
|
653
|
+
|
654
|
+
//
|
655
|
+
btScalar btSoftBody::getMass(int node) const
|
656
|
+
{
|
657
|
+
return(m_nodes[node].m_im>0?1/m_nodes[node].m_im:0);
|
658
|
+
}
|
659
|
+
|
660
|
+
//
|
661
|
+
btScalar btSoftBody::getTotalMass() const
|
662
|
+
{
|
663
|
+
btScalar mass=0;
|
664
|
+
for(int i=0;i<m_nodes.size();++i)
|
665
|
+
{
|
666
|
+
mass+=getMass(i);
|
667
|
+
}
|
668
|
+
return(mass);
|
669
|
+
}
|
670
|
+
|
671
|
+
//
|
672
|
+
void btSoftBody::setTotalMass(btScalar mass,bool fromfaces)
|
673
|
+
{
|
674
|
+
int i;
|
675
|
+
|
676
|
+
if(fromfaces)
|
677
|
+
{
|
678
|
+
|
679
|
+
for(i=0;i<m_nodes.size();++i)
|
680
|
+
{
|
681
|
+
m_nodes[i].m_im=0;
|
682
|
+
}
|
683
|
+
for(i=0;i<m_faces.size();++i)
|
684
|
+
{
|
685
|
+
const Face& f=m_faces[i];
|
686
|
+
const btScalar twicearea=AreaOf( f.m_n[0]->m_x,
|
687
|
+
f.m_n[1]->m_x,
|
688
|
+
f.m_n[2]->m_x);
|
689
|
+
for(int j=0;j<3;++j)
|
690
|
+
{
|
691
|
+
f.m_n[j]->m_im+=twicearea;
|
692
|
+
}
|
693
|
+
}
|
694
|
+
for( i=0;i<m_nodes.size();++i)
|
695
|
+
{
|
696
|
+
m_nodes[i].m_im=1/m_nodes[i].m_im;
|
697
|
+
}
|
698
|
+
}
|
699
|
+
const btScalar tm=getTotalMass();
|
700
|
+
const btScalar itm=1/tm;
|
701
|
+
for( i=0;i<m_nodes.size();++i)
|
702
|
+
{
|
703
|
+
m_nodes[i].m_im/=itm*mass;
|
704
|
+
}
|
705
|
+
m_bUpdateRtCst=true;
|
706
|
+
}
|
707
|
+
|
708
|
+
//
|
709
|
+
void btSoftBody::setTotalDensity(btScalar density)
|
710
|
+
{
|
711
|
+
setTotalMass(getVolume()*density,true);
|
712
|
+
}
|
713
|
+
|
714
|
+
//
|
715
|
+
void btSoftBody::setVolumeMass(btScalar mass)
|
716
|
+
{
|
717
|
+
btAlignedObjectArray<btScalar> ranks;
|
718
|
+
ranks.resize(m_nodes.size(),0);
|
719
|
+
int i;
|
720
|
+
|
721
|
+
for(i=0;i<m_nodes.size();++i)
|
722
|
+
{
|
723
|
+
m_nodes[i].m_im=0;
|
724
|
+
}
|
725
|
+
for(i=0;i<m_tetras.size();++i)
|
726
|
+
{
|
727
|
+
const Tetra& t=m_tetras[i];
|
728
|
+
for(int j=0;j<4;++j)
|
729
|
+
{
|
730
|
+
t.m_n[j]->m_im+=btFabs(t.m_rv);
|
731
|
+
ranks[int(t.m_n[j]-&m_nodes[0])]+=1;
|
732
|
+
}
|
733
|
+
}
|
734
|
+
for( i=0;i<m_nodes.size();++i)
|
735
|
+
{
|
736
|
+
if(m_nodes[i].m_im>0)
|
737
|
+
{
|
738
|
+
m_nodes[i].m_im=ranks[i]/m_nodes[i].m_im;
|
739
|
+
}
|
740
|
+
}
|
741
|
+
setTotalMass(mass,false);
|
742
|
+
}
|
743
|
+
|
744
|
+
//
|
745
|
+
void btSoftBody::setVolumeDensity(btScalar density)
|
746
|
+
{
|
747
|
+
btScalar volume=0;
|
748
|
+
for(int i=0;i<m_tetras.size();++i)
|
749
|
+
{
|
750
|
+
const Tetra& t=m_tetras[i];
|
751
|
+
for(int j=0;j<4;++j)
|
752
|
+
{
|
753
|
+
volume+=btFabs(t.m_rv);
|
754
|
+
}
|
755
|
+
}
|
756
|
+
setVolumeMass(volume*density/6);
|
757
|
+
}
|
758
|
+
|
759
|
+
//
|
760
|
+
void btSoftBody::transform(const btTransform& trs)
|
761
|
+
{
|
762
|
+
const btScalar margin=getCollisionShape()->getMargin();
|
763
|
+
ATTRIBUTE_ALIGNED16(btDbvtVolume) vol;
|
764
|
+
|
765
|
+
for(int i=0,ni=m_nodes.size();i<ni;++i)
|
766
|
+
{
|
767
|
+
Node& n=m_nodes[i];
|
768
|
+
n.m_x=trs*n.m_x;
|
769
|
+
n.m_q=trs*n.m_q;
|
770
|
+
n.m_n=trs.getBasis()*n.m_n;
|
771
|
+
vol = btDbvtVolume::FromCR(n.m_x,margin);
|
772
|
+
|
773
|
+
m_ndbvt.update(n.m_leaf,vol);
|
774
|
+
}
|
775
|
+
updateNormals();
|
776
|
+
updateBounds();
|
777
|
+
updateConstants();
|
778
|
+
m_initialWorldTransform = trs;
|
779
|
+
}
|
780
|
+
|
781
|
+
//
|
782
|
+
void btSoftBody::translate(const btVector3& trs)
|
783
|
+
{
|
784
|
+
btTransform t;
|
785
|
+
t.setIdentity();
|
786
|
+
t.setOrigin(trs);
|
787
|
+
transform(t);
|
788
|
+
}
|
789
|
+
|
790
|
+
//
|
791
|
+
void btSoftBody::rotate( const btQuaternion& rot)
|
792
|
+
{
|
793
|
+
btTransform t;
|
794
|
+
t.setIdentity();
|
795
|
+
t.setRotation(rot);
|
796
|
+
transform(t);
|
797
|
+
}
|
798
|
+
|
799
|
+
//
|
800
|
+
void btSoftBody::scale(const btVector3& scl)
|
801
|
+
{
|
802
|
+
|
803
|
+
const btScalar margin=getCollisionShape()->getMargin();
|
804
|
+
ATTRIBUTE_ALIGNED16(btDbvtVolume) vol;
|
805
|
+
|
806
|
+
for(int i=0,ni=m_nodes.size();i<ni;++i)
|
807
|
+
{
|
808
|
+
Node& n=m_nodes[i];
|
809
|
+
n.m_x*=scl;
|
810
|
+
n.m_q*=scl;
|
811
|
+
vol = btDbvtVolume::FromCR(n.m_x,margin);
|
812
|
+
m_ndbvt.update(n.m_leaf,vol);
|
813
|
+
}
|
814
|
+
updateNormals();
|
815
|
+
updateBounds();
|
816
|
+
updateConstants();
|
817
|
+
}
|
818
|
+
|
819
|
+
//
|
820
|
+
void btSoftBody::setPose(bool bvolume,bool bframe)
|
821
|
+
{
|
822
|
+
m_pose.m_bvolume = bvolume;
|
823
|
+
m_pose.m_bframe = bframe;
|
824
|
+
int i,ni;
|
825
|
+
|
826
|
+
/* Weights */
|
827
|
+
const btScalar omass=getTotalMass();
|
828
|
+
const btScalar kmass=omass*m_nodes.size()*1000;
|
829
|
+
btScalar tmass=omass;
|
830
|
+
m_pose.m_wgh.resize(m_nodes.size());
|
831
|
+
for(i=0,ni=m_nodes.size();i<ni;++i)
|
832
|
+
{
|
833
|
+
if(m_nodes[i].m_im<=0) tmass+=kmass;
|
834
|
+
}
|
835
|
+
for( i=0,ni=m_nodes.size();i<ni;++i)
|
836
|
+
{
|
837
|
+
Node& n=m_nodes[i];
|
838
|
+
m_pose.m_wgh[i]= n.m_im>0 ?
|
839
|
+
1/(m_nodes[i].m_im*tmass) :
|
840
|
+
kmass/tmass;
|
841
|
+
}
|
842
|
+
/* Pos */
|
843
|
+
const btVector3 com=evaluateCom();
|
844
|
+
m_pose.m_pos.resize(m_nodes.size());
|
845
|
+
for( i=0,ni=m_nodes.size();i<ni;++i)
|
846
|
+
{
|
847
|
+
m_pose.m_pos[i]=m_nodes[i].m_x-com;
|
848
|
+
}
|
849
|
+
m_pose.m_volume = bvolume?getVolume():0;
|
850
|
+
m_pose.m_com = com;
|
851
|
+
m_pose.m_rot.setIdentity();
|
852
|
+
m_pose.m_scl.setIdentity();
|
853
|
+
/* Aqq */
|
854
|
+
m_pose.m_aqq[0] =
|
855
|
+
m_pose.m_aqq[1] =
|
856
|
+
m_pose.m_aqq[2] = btVector3(0,0,0);
|
857
|
+
for( i=0,ni=m_nodes.size();i<ni;++i)
|
858
|
+
{
|
859
|
+
const btVector3& q=m_pose.m_pos[i];
|
860
|
+
const btVector3 mq=m_pose.m_wgh[i]*q;
|
861
|
+
m_pose.m_aqq[0]+=mq.x()*q;
|
862
|
+
m_pose.m_aqq[1]+=mq.y()*q;
|
863
|
+
m_pose.m_aqq[2]+=mq.z()*q;
|
864
|
+
}
|
865
|
+
m_pose.m_aqq=m_pose.m_aqq.inverse();
|
866
|
+
updateConstants();
|
867
|
+
}
|
868
|
+
|
869
|
+
//
|
870
|
+
btScalar btSoftBody::getVolume() const
|
871
|
+
{
|
872
|
+
btScalar vol=0;
|
873
|
+
if(m_nodes.size()>0)
|
874
|
+
{
|
875
|
+
int i,ni;
|
876
|
+
|
877
|
+
const btVector3 org=m_nodes[0].m_x;
|
878
|
+
for(i=0,ni=m_faces.size();i<ni;++i)
|
879
|
+
{
|
880
|
+
const Face& f=m_faces[i];
|
881
|
+
vol+=btDot(f.m_n[0]->m_x-org,btCross(f.m_n[1]->m_x-org,f.m_n[2]->m_x-org));
|
882
|
+
}
|
883
|
+
vol/=(btScalar)6;
|
884
|
+
}
|
885
|
+
return(vol);
|
886
|
+
}
|
887
|
+
|
888
|
+
//
|
889
|
+
int btSoftBody::clusterCount() const
|
890
|
+
{
|
891
|
+
return(m_clusters.size());
|
892
|
+
}
|
893
|
+
|
894
|
+
//
|
895
|
+
btVector3 btSoftBody::clusterCom(const Cluster* cluster)
|
896
|
+
{
|
897
|
+
btVector3 com(0,0,0);
|
898
|
+
for(int i=0,ni=cluster->m_nodes.size();i<ni;++i)
|
899
|
+
{
|
900
|
+
com+=cluster->m_nodes[i]->m_x*cluster->m_masses[i];
|
901
|
+
}
|
902
|
+
return(com*cluster->m_imass);
|
903
|
+
}
|
904
|
+
|
905
|
+
//
|
906
|
+
btVector3 btSoftBody::clusterCom(int cluster) const
|
907
|
+
{
|
908
|
+
return(clusterCom(m_clusters[cluster]));
|
909
|
+
}
|
910
|
+
|
911
|
+
//
|
912
|
+
btVector3 btSoftBody::clusterVelocity(const Cluster* cluster,const btVector3& rpos)
|
913
|
+
{
|
914
|
+
return(cluster->m_lv+btCross(cluster->m_av,rpos));
|
915
|
+
}
|
916
|
+
|
917
|
+
//
|
918
|
+
void btSoftBody::clusterVImpulse(Cluster* cluster,const btVector3& rpos,const btVector3& impulse)
|
919
|
+
{
|
920
|
+
const btVector3 li=cluster->m_imass*impulse;
|
921
|
+
const btVector3 ai=cluster->m_invwi*btCross(rpos,impulse);
|
922
|
+
cluster->m_vimpulses[0]+=li;cluster->m_lv+=li;
|
923
|
+
cluster->m_vimpulses[1]+=ai;cluster->m_av+=ai;
|
924
|
+
cluster->m_nvimpulses++;
|
925
|
+
}
|
926
|
+
|
927
|
+
//
|
928
|
+
void btSoftBody::clusterDImpulse(Cluster* cluster,const btVector3& rpos,const btVector3& impulse)
|
929
|
+
{
|
930
|
+
const btVector3 li=cluster->m_imass*impulse;
|
931
|
+
const btVector3 ai=cluster->m_invwi*btCross(rpos,impulse);
|
932
|
+
cluster->m_dimpulses[0]+=li;
|
933
|
+
cluster->m_dimpulses[1]+=ai;
|
934
|
+
cluster->m_ndimpulses++;
|
935
|
+
}
|
936
|
+
|
937
|
+
//
|
938
|
+
void btSoftBody::clusterImpulse(Cluster* cluster,const btVector3& rpos,const Impulse& impulse)
|
939
|
+
{
|
940
|
+
if(impulse.m_asVelocity) clusterVImpulse(cluster,rpos,impulse.m_velocity);
|
941
|
+
if(impulse.m_asDrift) clusterDImpulse(cluster,rpos,impulse.m_drift);
|
942
|
+
}
|
943
|
+
|
944
|
+
//
|
945
|
+
void btSoftBody::clusterVAImpulse(Cluster* cluster,const btVector3& impulse)
|
946
|
+
{
|
947
|
+
const btVector3 ai=cluster->m_invwi*impulse;
|
948
|
+
cluster->m_vimpulses[1]+=ai;cluster->m_av+=ai;
|
949
|
+
cluster->m_nvimpulses++;
|
950
|
+
}
|
951
|
+
|
952
|
+
//
|
953
|
+
void btSoftBody::clusterDAImpulse(Cluster* cluster,const btVector3& impulse)
|
954
|
+
{
|
955
|
+
const btVector3 ai=cluster->m_invwi*impulse;
|
956
|
+
cluster->m_dimpulses[1]+=ai;
|
957
|
+
cluster->m_ndimpulses++;
|
958
|
+
}
|
959
|
+
|
960
|
+
//
|
961
|
+
void btSoftBody::clusterAImpulse(Cluster* cluster,const Impulse& impulse)
|
962
|
+
{
|
963
|
+
if(impulse.m_asVelocity) clusterVAImpulse(cluster,impulse.m_velocity);
|
964
|
+
if(impulse.m_asDrift) clusterDAImpulse(cluster,impulse.m_drift);
|
965
|
+
}
|
966
|
+
|
967
|
+
//
|
968
|
+
void btSoftBody::clusterDCImpulse(Cluster* cluster,const btVector3& impulse)
|
969
|
+
{
|
970
|
+
cluster->m_dimpulses[0]+=impulse*cluster->m_imass;
|
971
|
+
cluster->m_ndimpulses++;
|
972
|
+
}
|
973
|
+
|
974
|
+
struct NodeLinks
|
975
|
+
{
|
976
|
+
btAlignedObjectArray<int> m_links;
|
977
|
+
};
|
978
|
+
|
979
|
+
|
980
|
+
|
981
|
+
//
|
982
|
+
int btSoftBody::generateBendingConstraints(int distance,Material* mat)
|
983
|
+
{
|
984
|
+
int i,j;
|
985
|
+
|
986
|
+
if(distance>1)
|
987
|
+
{
|
988
|
+
/* Build graph */
|
989
|
+
const int n=m_nodes.size();
|
990
|
+
const unsigned inf=(~(unsigned)0)>>1;
|
991
|
+
unsigned* adj=new unsigned[n*n];
|
992
|
+
|
993
|
+
|
994
|
+
#define IDX(_x_,_y_) ((_y_)*n+(_x_))
|
995
|
+
for(j=0;j<n;++j)
|
996
|
+
{
|
997
|
+
for(i=0;i<n;++i)
|
998
|
+
{
|
999
|
+
if(i!=j)
|
1000
|
+
{
|
1001
|
+
adj[IDX(i,j)]=adj[IDX(j,i)]=inf;
|
1002
|
+
}
|
1003
|
+
else
|
1004
|
+
{
|
1005
|
+
adj[IDX(i,j)]=adj[IDX(j,i)]=0;
|
1006
|
+
}
|
1007
|
+
}
|
1008
|
+
}
|
1009
|
+
for( i=0;i<m_links.size();++i)
|
1010
|
+
{
|
1011
|
+
const int ia=(int)(m_links[i].m_n[0]-&m_nodes[0]);
|
1012
|
+
const int ib=(int)(m_links[i].m_n[1]-&m_nodes[0]);
|
1013
|
+
adj[IDX(ia,ib)]=1;
|
1014
|
+
adj[IDX(ib,ia)]=1;
|
1015
|
+
}
|
1016
|
+
|
1017
|
+
|
1018
|
+
//special optimized case for distance == 2
|
1019
|
+
if (distance == 2)
|
1020
|
+
{
|
1021
|
+
|
1022
|
+
btAlignedObjectArray<NodeLinks> nodeLinks;
|
1023
|
+
|
1024
|
+
|
1025
|
+
/* Build node links */
|
1026
|
+
nodeLinks.resize(m_nodes.size());
|
1027
|
+
|
1028
|
+
for( i=0;i<m_links.size();++i)
|
1029
|
+
{
|
1030
|
+
const int ia=(int)(m_links[i].m_n[0]-&m_nodes[0]);
|
1031
|
+
const int ib=(int)(m_links[i].m_n[1]-&m_nodes[0]);
|
1032
|
+
if (nodeLinks[ia].m_links.findLinearSearch(ib)==nodeLinks[ia].m_links.size())
|
1033
|
+
nodeLinks[ia].m_links.push_back(ib);
|
1034
|
+
|
1035
|
+
if (nodeLinks[ib].m_links.findLinearSearch(ia)==nodeLinks[ib].m_links.size())
|
1036
|
+
nodeLinks[ib].m_links.push_back(ia);
|
1037
|
+
}
|
1038
|
+
for (int ii=0;ii<nodeLinks.size();ii++)
|
1039
|
+
{
|
1040
|
+
int i=ii;
|
1041
|
+
|
1042
|
+
for (int jj=0;jj<nodeLinks[ii].m_links.size();jj++)
|
1043
|
+
{
|
1044
|
+
int k = nodeLinks[ii].m_links[jj];
|
1045
|
+
for (int kk=0;kk<nodeLinks[k].m_links.size();kk++)
|
1046
|
+
{
|
1047
|
+
int j = nodeLinks[k].m_links[kk];
|
1048
|
+
if (i!=j)
|
1049
|
+
{
|
1050
|
+
const unsigned sum=adj[IDX(i,k)]+adj[IDX(k,j)];
|
1051
|
+
btAssert(sum==2);
|
1052
|
+
if(adj[IDX(i,j)]>sum)
|
1053
|
+
{
|
1054
|
+
adj[IDX(i,j)]=adj[IDX(j,i)]=sum;
|
1055
|
+
}
|
1056
|
+
}
|
1057
|
+
|
1058
|
+
}
|
1059
|
+
}
|
1060
|
+
}
|
1061
|
+
} else
|
1062
|
+
{
|
1063
|
+
///generic Floyd's algorithm
|
1064
|
+
for(int k=0;k<n;++k)
|
1065
|
+
{
|
1066
|
+
for(j=0;j<n;++j)
|
1067
|
+
{
|
1068
|
+
for(i=j+1;i<n;++i)
|
1069
|
+
{
|
1070
|
+
const unsigned sum=adj[IDX(i,k)]+adj[IDX(k,j)];
|
1071
|
+
if(adj[IDX(i,j)]>sum)
|
1072
|
+
{
|
1073
|
+
adj[IDX(i,j)]=adj[IDX(j,i)]=sum;
|
1074
|
+
}
|
1075
|
+
}
|
1076
|
+
}
|
1077
|
+
}
|
1078
|
+
}
|
1079
|
+
|
1080
|
+
|
1081
|
+
/* Build links */
|
1082
|
+
int nlinks=0;
|
1083
|
+
for(j=0;j<n;++j)
|
1084
|
+
{
|
1085
|
+
for(i=j+1;i<n;++i)
|
1086
|
+
{
|
1087
|
+
if(adj[IDX(i,j)]==(unsigned)distance)
|
1088
|
+
{
|
1089
|
+
appendLink(i,j,mat);
|
1090
|
+
m_links[m_links.size()-1].m_bbending=1;
|
1091
|
+
++nlinks;
|
1092
|
+
}
|
1093
|
+
}
|
1094
|
+
}
|
1095
|
+
delete[] adj;
|
1096
|
+
return(nlinks);
|
1097
|
+
}
|
1098
|
+
return(0);
|
1099
|
+
}
|
1100
|
+
|
1101
|
+
//
|
1102
|
+
void btSoftBody::randomizeConstraints()
|
1103
|
+
{
|
1104
|
+
unsigned long seed=243703;
|
1105
|
+
#define NEXTRAND (seed=(1664525L*seed+1013904223L)&0xffffffff)
|
1106
|
+
int i,ni;
|
1107
|
+
|
1108
|
+
for(i=0,ni=m_links.size();i<ni;++i)
|
1109
|
+
{
|
1110
|
+
btSwap(m_links[i],m_links[NEXTRAND%ni]);
|
1111
|
+
}
|
1112
|
+
for(i=0,ni=m_faces.size();i<ni;++i)
|
1113
|
+
{
|
1114
|
+
btSwap(m_faces[i],m_faces[NEXTRAND%ni]);
|
1115
|
+
}
|
1116
|
+
#undef NEXTRAND
|
1117
|
+
}
|
1118
|
+
|
1119
|
+
//
|
1120
|
+
void btSoftBody::releaseCluster(int index)
|
1121
|
+
{
|
1122
|
+
Cluster* c=m_clusters[index];
|
1123
|
+
if(c->m_leaf) m_cdbvt.remove(c->m_leaf);
|
1124
|
+
c->~Cluster();
|
1125
|
+
btAlignedFree(c);
|
1126
|
+
m_clusters.remove(c);
|
1127
|
+
}
|
1128
|
+
|
1129
|
+
//
|
1130
|
+
void btSoftBody::releaseClusters()
|
1131
|
+
{
|
1132
|
+
while(m_clusters.size()>0) releaseCluster(0);
|
1133
|
+
}
|
1134
|
+
|
1135
|
+
//
|
1136
|
+
int btSoftBody::generateClusters(int k,int maxiterations)
|
1137
|
+
{
|
1138
|
+
int i;
|
1139
|
+
releaseClusters();
|
1140
|
+
m_clusters.resize(btMin(k,m_nodes.size()));
|
1141
|
+
for(i=0;i<m_clusters.size();++i)
|
1142
|
+
{
|
1143
|
+
m_clusters[i] = new(btAlignedAlloc(sizeof(Cluster),16)) Cluster();
|
1144
|
+
m_clusters[i]->m_collide= true;
|
1145
|
+
}
|
1146
|
+
k=m_clusters.size();
|
1147
|
+
if(k>0)
|
1148
|
+
{
|
1149
|
+
/* Initialize */
|
1150
|
+
btAlignedObjectArray<btVector3> centers;
|
1151
|
+
btVector3 cog(0,0,0);
|
1152
|
+
int i;
|
1153
|
+
for(i=0;i<m_nodes.size();++i)
|
1154
|
+
{
|
1155
|
+
cog+=m_nodes[i].m_x;
|
1156
|
+
m_clusters[(i*29873)%m_clusters.size()]->m_nodes.push_back(&m_nodes[i]);
|
1157
|
+
}
|
1158
|
+
cog/=(btScalar)m_nodes.size();
|
1159
|
+
centers.resize(k,cog);
|
1160
|
+
/* Iterate */
|
1161
|
+
const btScalar slope=16;
|
1162
|
+
bool changed;
|
1163
|
+
int iterations=0;
|
1164
|
+
do {
|
1165
|
+
const btScalar w=2-btMin<btScalar>(1,iterations/slope);
|
1166
|
+
changed=false;
|
1167
|
+
iterations++;
|
1168
|
+
int i;
|
1169
|
+
|
1170
|
+
for(i=0;i<k;++i)
|
1171
|
+
{
|
1172
|
+
btVector3 c(0,0,0);
|
1173
|
+
for(int j=0;j<m_clusters[i]->m_nodes.size();++j)
|
1174
|
+
{
|
1175
|
+
c+=m_clusters[i]->m_nodes[j]->m_x;
|
1176
|
+
}
|
1177
|
+
if(m_clusters[i]->m_nodes.size())
|
1178
|
+
{
|
1179
|
+
c /= (btScalar)m_clusters[i]->m_nodes.size();
|
1180
|
+
c = centers[i]+(c-centers[i])*w;
|
1181
|
+
changed |= ((c-centers[i]).length2()>SIMD_EPSILON);
|
1182
|
+
centers[i] = c;
|
1183
|
+
m_clusters[i]->m_nodes.resize(0);
|
1184
|
+
}
|
1185
|
+
}
|
1186
|
+
for(i=0;i<m_nodes.size();++i)
|
1187
|
+
{
|
1188
|
+
const btVector3 nx=m_nodes[i].m_x;
|
1189
|
+
int kbest=0;
|
1190
|
+
btScalar kdist=ClusterMetric(centers[0],nx);
|
1191
|
+
for(int j=1;j<k;++j)
|
1192
|
+
{
|
1193
|
+
const btScalar d=ClusterMetric(centers[j],nx);
|
1194
|
+
if(d<kdist)
|
1195
|
+
{
|
1196
|
+
kbest=j;
|
1197
|
+
kdist=d;
|
1198
|
+
}
|
1199
|
+
}
|
1200
|
+
m_clusters[kbest]->m_nodes.push_back(&m_nodes[i]);
|
1201
|
+
}
|
1202
|
+
} while(changed&&(iterations<maxiterations));
|
1203
|
+
/* Merge */
|
1204
|
+
btAlignedObjectArray<int> cids;
|
1205
|
+
cids.resize(m_nodes.size(),-1);
|
1206
|
+
for(i=0;i<m_clusters.size();++i)
|
1207
|
+
{
|
1208
|
+
for(int j=0;j<m_clusters[i]->m_nodes.size();++j)
|
1209
|
+
{
|
1210
|
+
cids[int(m_clusters[i]->m_nodes[j]-&m_nodes[0])]=i;
|
1211
|
+
}
|
1212
|
+
}
|
1213
|
+
for(i=0;i<m_faces.size();++i)
|
1214
|
+
{
|
1215
|
+
const int idx[]={ int(m_faces[i].m_n[0]-&m_nodes[0]),
|
1216
|
+
int(m_faces[i].m_n[1]-&m_nodes[0]),
|
1217
|
+
int(m_faces[i].m_n[2]-&m_nodes[0])};
|
1218
|
+
for(int j=0;j<3;++j)
|
1219
|
+
{
|
1220
|
+
const int cid=cids[idx[j]];
|
1221
|
+
for(int q=1;q<3;++q)
|
1222
|
+
{
|
1223
|
+
const int kid=idx[(j+q)%3];
|
1224
|
+
if(cids[kid]!=cid)
|
1225
|
+
{
|
1226
|
+
if(m_clusters[cid]->m_nodes.findLinearSearch(&m_nodes[kid])==m_clusters[cid]->m_nodes.size())
|
1227
|
+
{
|
1228
|
+
m_clusters[cid]->m_nodes.push_back(&m_nodes[kid]);
|
1229
|
+
}
|
1230
|
+
}
|
1231
|
+
}
|
1232
|
+
}
|
1233
|
+
}
|
1234
|
+
/* Master */
|
1235
|
+
if(m_clusters.size()>1)
|
1236
|
+
{
|
1237
|
+
Cluster* pmaster=new(btAlignedAlloc(sizeof(Cluster),16)) Cluster();
|
1238
|
+
pmaster->m_collide = false;
|
1239
|
+
pmaster->m_nodes.reserve(m_nodes.size());
|
1240
|
+
for(int i=0;i<m_nodes.size();++i) pmaster->m_nodes.push_back(&m_nodes[i]);
|
1241
|
+
m_clusters.push_back(pmaster);
|
1242
|
+
btSwap(m_clusters[0],m_clusters[m_clusters.size()-1]);
|
1243
|
+
}
|
1244
|
+
/* Terminate */
|
1245
|
+
for(i=0;i<m_clusters.size();++i)
|
1246
|
+
{
|
1247
|
+
if(m_clusters[i]->m_nodes.size()==0)
|
1248
|
+
{
|
1249
|
+
releaseCluster(i--);
|
1250
|
+
}
|
1251
|
+
}
|
1252
|
+
} else
|
1253
|
+
{
|
1254
|
+
//create a cluster for each tetrahedron (if tetrahedra exist) or each face
|
1255
|
+
if (m_tetras.size())
|
1256
|
+
{
|
1257
|
+
m_clusters.resize(m_tetras.size());
|
1258
|
+
for(i=0;i<m_clusters.size();++i)
|
1259
|
+
{
|
1260
|
+
m_clusters[i] = new(btAlignedAlloc(sizeof(Cluster),16)) Cluster();
|
1261
|
+
m_clusters[i]->m_collide= true;
|
1262
|
+
}
|
1263
|
+
for (i=0;i<m_tetras.size();i++)
|
1264
|
+
{
|
1265
|
+
for (int j=0;j<4;j++)
|
1266
|
+
{
|
1267
|
+
m_clusters[i]->m_nodes.push_back(m_tetras[i].m_n[j]);
|
1268
|
+
}
|
1269
|
+
}
|
1270
|
+
|
1271
|
+
} else
|
1272
|
+
{
|
1273
|
+
m_clusters.resize(m_faces.size());
|
1274
|
+
for(i=0;i<m_clusters.size();++i)
|
1275
|
+
{
|
1276
|
+
m_clusters[i] = new(btAlignedAlloc(sizeof(Cluster),16)) Cluster();
|
1277
|
+
m_clusters[i]->m_collide= true;
|
1278
|
+
}
|
1279
|
+
|
1280
|
+
for(i=0;i<m_faces.size();++i)
|
1281
|
+
{
|
1282
|
+
for(int j=0;j<3;++j)
|
1283
|
+
{
|
1284
|
+
m_clusters[i]->m_nodes.push_back(m_faces[i].m_n[j]);
|
1285
|
+
}
|
1286
|
+
}
|
1287
|
+
}
|
1288
|
+
}
|
1289
|
+
|
1290
|
+
if (m_clusters.size())
|
1291
|
+
{
|
1292
|
+
initializeClusters();
|
1293
|
+
updateClusters();
|
1294
|
+
|
1295
|
+
|
1296
|
+
//for self-collision
|
1297
|
+
m_clusterConnectivity.resize(m_clusters.size()*m_clusters.size());
|
1298
|
+
{
|
1299
|
+
for (int c0=0;c0<m_clusters.size();c0++)
|
1300
|
+
{
|
1301
|
+
m_clusters[c0]->m_clusterIndex=c0;
|
1302
|
+
for (int c1=0;c1<m_clusters.size();c1++)
|
1303
|
+
{
|
1304
|
+
|
1305
|
+
bool connected=false;
|
1306
|
+
Cluster* cla = m_clusters[c0];
|
1307
|
+
Cluster* clb = m_clusters[c1];
|
1308
|
+
for (int i=0;!connected&&i<cla->m_nodes.size();i++)
|
1309
|
+
{
|
1310
|
+
for (int j=0;j<clb->m_nodes.size();j++)
|
1311
|
+
{
|
1312
|
+
if (cla->m_nodes[i] == clb->m_nodes[j])
|
1313
|
+
{
|
1314
|
+
connected=true;
|
1315
|
+
break;
|
1316
|
+
}
|
1317
|
+
}
|
1318
|
+
}
|
1319
|
+
m_clusterConnectivity[c0+c1*m_clusters.size()]=connected;
|
1320
|
+
}
|
1321
|
+
}
|
1322
|
+
}
|
1323
|
+
}
|
1324
|
+
|
1325
|
+
return(m_clusters.size());
|
1326
|
+
}
|
1327
|
+
|
1328
|
+
//
|
1329
|
+
void btSoftBody::refine(ImplicitFn* ifn,btScalar accurary,bool cut)
|
1330
|
+
{
|
1331
|
+
const Node* nbase = &m_nodes[0];
|
1332
|
+
int ncount = m_nodes.size();
|
1333
|
+
btSymMatrix<int> edges(ncount,-2);
|
1334
|
+
int newnodes=0;
|
1335
|
+
int i,j,k,ni;
|
1336
|
+
|
1337
|
+
/* Filter out */
|
1338
|
+
for(i=0;i<m_links.size();++i)
|
1339
|
+
{
|
1340
|
+
Link& l=m_links[i];
|
1341
|
+
if(l.m_bbending)
|
1342
|
+
{
|
1343
|
+
if(!SameSign(ifn->Eval(l.m_n[0]->m_x),ifn->Eval(l.m_n[1]->m_x)))
|
1344
|
+
{
|
1345
|
+
btSwap(m_links[i],m_links[m_links.size()-1]);
|
1346
|
+
m_links.pop_back();--i;
|
1347
|
+
}
|
1348
|
+
}
|
1349
|
+
}
|
1350
|
+
/* Fill edges */
|
1351
|
+
for(i=0;i<m_links.size();++i)
|
1352
|
+
{
|
1353
|
+
Link& l=m_links[i];
|
1354
|
+
edges(int(l.m_n[0]-nbase),int(l.m_n[1]-nbase))=-1;
|
1355
|
+
}
|
1356
|
+
for(i=0;i<m_faces.size();++i)
|
1357
|
+
{
|
1358
|
+
Face& f=m_faces[i];
|
1359
|
+
edges(int(f.m_n[0]-nbase),int(f.m_n[1]-nbase))=-1;
|
1360
|
+
edges(int(f.m_n[1]-nbase),int(f.m_n[2]-nbase))=-1;
|
1361
|
+
edges(int(f.m_n[2]-nbase),int(f.m_n[0]-nbase))=-1;
|
1362
|
+
}
|
1363
|
+
/* Intersect */
|
1364
|
+
for(i=0;i<ncount;++i)
|
1365
|
+
{
|
1366
|
+
for(j=i+1;j<ncount;++j)
|
1367
|
+
{
|
1368
|
+
if(edges(i,j)==-1)
|
1369
|
+
{
|
1370
|
+
Node& a=m_nodes[i];
|
1371
|
+
Node& b=m_nodes[j];
|
1372
|
+
const btScalar t=ImplicitSolve(ifn,a.m_x,b.m_x,accurary);
|
1373
|
+
if(t>0)
|
1374
|
+
{
|
1375
|
+
const btVector3 x=Lerp(a.m_x,b.m_x,t);
|
1376
|
+
const btVector3 v=Lerp(a.m_v,b.m_v,t);
|
1377
|
+
btScalar m=0;
|
1378
|
+
if(a.m_im>0)
|
1379
|
+
{
|
1380
|
+
if(b.m_im>0)
|
1381
|
+
{
|
1382
|
+
const btScalar ma=1/a.m_im;
|
1383
|
+
const btScalar mb=1/b.m_im;
|
1384
|
+
const btScalar mc=Lerp(ma,mb,t);
|
1385
|
+
const btScalar f=(ma+mb)/(ma+mb+mc);
|
1386
|
+
a.m_im=1/(ma*f);
|
1387
|
+
b.m_im=1/(mb*f);
|
1388
|
+
m=mc*f;
|
1389
|
+
}
|
1390
|
+
else
|
1391
|
+
{ a.m_im/=0.5;m=1/a.m_im; }
|
1392
|
+
}
|
1393
|
+
else
|
1394
|
+
{
|
1395
|
+
if(b.m_im>0)
|
1396
|
+
{ b.m_im/=0.5;m=1/b.m_im; }
|
1397
|
+
else
|
1398
|
+
m=0;
|
1399
|
+
}
|
1400
|
+
appendNode(x,m);
|
1401
|
+
edges(i,j)=m_nodes.size()-1;
|
1402
|
+
m_nodes[edges(i,j)].m_v=v;
|
1403
|
+
++newnodes;
|
1404
|
+
}
|
1405
|
+
}
|
1406
|
+
}
|
1407
|
+
}
|
1408
|
+
nbase=&m_nodes[0];
|
1409
|
+
/* Refine links */
|
1410
|
+
for(i=0,ni=m_links.size();i<ni;++i)
|
1411
|
+
{
|
1412
|
+
Link& feat=m_links[i];
|
1413
|
+
const int idx[]={ int(feat.m_n[0]-nbase),
|
1414
|
+
int(feat.m_n[1]-nbase)};
|
1415
|
+
if((idx[0]<ncount)&&(idx[1]<ncount))
|
1416
|
+
{
|
1417
|
+
const int ni=edges(idx[0],idx[1]);
|
1418
|
+
if(ni>0)
|
1419
|
+
{
|
1420
|
+
appendLink(i);
|
1421
|
+
Link* pft[]={ &m_links[i],
|
1422
|
+
&m_links[m_links.size()-1]};
|
1423
|
+
pft[0]->m_n[0]=&m_nodes[idx[0]];
|
1424
|
+
pft[0]->m_n[1]=&m_nodes[ni];
|
1425
|
+
pft[1]->m_n[0]=&m_nodes[ni];
|
1426
|
+
pft[1]->m_n[1]=&m_nodes[idx[1]];
|
1427
|
+
}
|
1428
|
+
}
|
1429
|
+
}
|
1430
|
+
/* Refine faces */
|
1431
|
+
for(i=0;i<m_faces.size();++i)
|
1432
|
+
{
|
1433
|
+
const Face& feat=m_faces[i];
|
1434
|
+
const int idx[]={ int(feat.m_n[0]-nbase),
|
1435
|
+
int(feat.m_n[1]-nbase),
|
1436
|
+
int(feat.m_n[2]-nbase)};
|
1437
|
+
for(j=2,k=0;k<3;j=k++)
|
1438
|
+
{
|
1439
|
+
if((idx[j]<ncount)&&(idx[k]<ncount))
|
1440
|
+
{
|
1441
|
+
const int ni=edges(idx[j],idx[k]);
|
1442
|
+
if(ni>0)
|
1443
|
+
{
|
1444
|
+
appendFace(i);
|
1445
|
+
const int l=(k+1)%3;
|
1446
|
+
Face* pft[]={ &m_faces[i],
|
1447
|
+
&m_faces[m_faces.size()-1]};
|
1448
|
+
pft[0]->m_n[0]=&m_nodes[idx[l]];
|
1449
|
+
pft[0]->m_n[1]=&m_nodes[idx[j]];
|
1450
|
+
pft[0]->m_n[2]=&m_nodes[ni];
|
1451
|
+
pft[1]->m_n[0]=&m_nodes[ni];
|
1452
|
+
pft[1]->m_n[1]=&m_nodes[idx[k]];
|
1453
|
+
pft[1]->m_n[2]=&m_nodes[idx[l]];
|
1454
|
+
appendLink(ni,idx[l],pft[0]->m_material);
|
1455
|
+
--i;break;
|
1456
|
+
}
|
1457
|
+
}
|
1458
|
+
}
|
1459
|
+
}
|
1460
|
+
/* Cut */
|
1461
|
+
if(cut)
|
1462
|
+
{
|
1463
|
+
btAlignedObjectArray<int> cnodes;
|
1464
|
+
const int pcount=ncount;
|
1465
|
+
int i;
|
1466
|
+
ncount=m_nodes.size();
|
1467
|
+
cnodes.resize(ncount,0);
|
1468
|
+
/* Nodes */
|
1469
|
+
for(i=0;i<ncount;++i)
|
1470
|
+
{
|
1471
|
+
const btVector3 x=m_nodes[i].m_x;
|
1472
|
+
if((i>=pcount)||(btFabs(ifn->Eval(x))<accurary))
|
1473
|
+
{
|
1474
|
+
const btVector3 v=m_nodes[i].m_v;
|
1475
|
+
btScalar m=getMass(i);
|
1476
|
+
if(m>0) { m*=0.5;m_nodes[i].m_im/=0.5; }
|
1477
|
+
appendNode(x,m);
|
1478
|
+
cnodes[i]=m_nodes.size()-1;
|
1479
|
+
m_nodes[cnodes[i]].m_v=v;
|
1480
|
+
}
|
1481
|
+
}
|
1482
|
+
nbase=&m_nodes[0];
|
1483
|
+
/* Links */
|
1484
|
+
for(i=0,ni=m_links.size();i<ni;++i)
|
1485
|
+
{
|
1486
|
+
const int id[]={ int(m_links[i].m_n[0]-nbase),
|
1487
|
+
int(m_links[i].m_n[1]-nbase)};
|
1488
|
+
int todetach=0;
|
1489
|
+
if(cnodes[id[0]]&&cnodes[id[1]])
|
1490
|
+
{
|
1491
|
+
appendLink(i);
|
1492
|
+
todetach=m_links.size()-1;
|
1493
|
+
}
|
1494
|
+
else
|
1495
|
+
{
|
1496
|
+
if(( (ifn->Eval(m_nodes[id[0]].m_x)<accurary)&&
|
1497
|
+
(ifn->Eval(m_nodes[id[1]].m_x)<accurary)))
|
1498
|
+
todetach=i;
|
1499
|
+
}
|
1500
|
+
if(todetach)
|
1501
|
+
{
|
1502
|
+
Link& l=m_links[todetach];
|
1503
|
+
for(int j=0;j<2;++j)
|
1504
|
+
{
|
1505
|
+
int cn=cnodes[int(l.m_n[j]-nbase)];
|
1506
|
+
if(cn) l.m_n[j]=&m_nodes[cn];
|
1507
|
+
}
|
1508
|
+
}
|
1509
|
+
}
|
1510
|
+
/* Faces */
|
1511
|
+
for(i=0,ni=m_faces.size();i<ni;++i)
|
1512
|
+
{
|
1513
|
+
Node** n= m_faces[i].m_n;
|
1514
|
+
if( (ifn->Eval(n[0]->m_x)<accurary)&&
|
1515
|
+
(ifn->Eval(n[1]->m_x)<accurary)&&
|
1516
|
+
(ifn->Eval(n[2]->m_x)<accurary))
|
1517
|
+
{
|
1518
|
+
for(int j=0;j<3;++j)
|
1519
|
+
{
|
1520
|
+
int cn=cnodes[int(n[j]-nbase)];
|
1521
|
+
if(cn) n[j]=&m_nodes[cn];
|
1522
|
+
}
|
1523
|
+
}
|
1524
|
+
}
|
1525
|
+
/* Clean orphans */
|
1526
|
+
int nnodes=m_nodes.size();
|
1527
|
+
btAlignedObjectArray<int> ranks;
|
1528
|
+
btAlignedObjectArray<int> todelete;
|
1529
|
+
ranks.resize(nnodes,0);
|
1530
|
+
for(i=0,ni=m_links.size();i<ni;++i)
|
1531
|
+
{
|
1532
|
+
for(int j=0;j<2;++j) ranks[int(m_links[i].m_n[j]-nbase)]++;
|
1533
|
+
}
|
1534
|
+
for(i=0,ni=m_faces.size();i<ni;++i)
|
1535
|
+
{
|
1536
|
+
for(int j=0;j<3;++j) ranks[int(m_faces[i].m_n[j]-nbase)]++;
|
1537
|
+
}
|
1538
|
+
for(i=0;i<m_links.size();++i)
|
1539
|
+
{
|
1540
|
+
const int id[]={ int(m_links[i].m_n[0]-nbase),
|
1541
|
+
int(m_links[i].m_n[1]-nbase)};
|
1542
|
+
const bool sg[]={ ranks[id[0]]==1,
|
1543
|
+
ranks[id[1]]==1};
|
1544
|
+
if(sg[0]||sg[1])
|
1545
|
+
{
|
1546
|
+
--ranks[id[0]];
|
1547
|
+
--ranks[id[1]];
|
1548
|
+
btSwap(m_links[i],m_links[m_links.size()-1]);
|
1549
|
+
m_links.pop_back();--i;
|
1550
|
+
}
|
1551
|
+
}
|
1552
|
+
#if 0
|
1553
|
+
for(i=nnodes-1;i>=0;--i)
|
1554
|
+
{
|
1555
|
+
if(!ranks[i]) todelete.push_back(i);
|
1556
|
+
}
|
1557
|
+
if(todelete.size())
|
1558
|
+
{
|
1559
|
+
btAlignedObjectArray<int>& map=ranks;
|
1560
|
+
for(int i=0;i<nnodes;++i) map[i]=i;
|
1561
|
+
PointersToIndices(this);
|
1562
|
+
for(int i=0,ni=todelete.size();i<ni;++i)
|
1563
|
+
{
|
1564
|
+
int j=todelete[i];
|
1565
|
+
int& a=map[j];
|
1566
|
+
int& b=map[--nnodes];
|
1567
|
+
m_ndbvt.remove(m_nodes[a].m_leaf);m_nodes[a].m_leaf=0;
|
1568
|
+
btSwap(m_nodes[a],m_nodes[b]);
|
1569
|
+
j=a;a=b;b=j;
|
1570
|
+
}
|
1571
|
+
IndicesToPointers(this,&map[0]);
|
1572
|
+
m_nodes.resize(nnodes);
|
1573
|
+
}
|
1574
|
+
#endif
|
1575
|
+
}
|
1576
|
+
m_bUpdateRtCst=true;
|
1577
|
+
}
|
1578
|
+
|
1579
|
+
//
|
1580
|
+
bool btSoftBody::cutLink(const Node* node0,const Node* node1,btScalar position)
|
1581
|
+
{
|
1582
|
+
return(cutLink(int(node0-&m_nodes[0]),int(node1-&m_nodes[0]),position));
|
1583
|
+
}
|
1584
|
+
|
1585
|
+
//
|
1586
|
+
bool btSoftBody::cutLink(int node0,int node1,btScalar position)
|
1587
|
+
{
|
1588
|
+
bool done=false;
|
1589
|
+
int i,ni;
|
1590
|
+
const btVector3 d=m_nodes[node0].m_x-m_nodes[node1].m_x;
|
1591
|
+
const btVector3 x=Lerp(m_nodes[node0].m_x,m_nodes[node1].m_x,position);
|
1592
|
+
const btVector3 v=Lerp(m_nodes[node0].m_v,m_nodes[node1].m_v,position);
|
1593
|
+
const btScalar m=1;
|
1594
|
+
appendNode(x,m);
|
1595
|
+
appendNode(x,m);
|
1596
|
+
Node* pa=&m_nodes[node0];
|
1597
|
+
Node* pb=&m_nodes[node1];
|
1598
|
+
Node* pn[2]={ &m_nodes[m_nodes.size()-2],
|
1599
|
+
&m_nodes[m_nodes.size()-1]};
|
1600
|
+
pn[0]->m_v=v;
|
1601
|
+
pn[1]->m_v=v;
|
1602
|
+
for(i=0,ni=m_links.size();i<ni;++i)
|
1603
|
+
{
|
1604
|
+
const int mtch=MatchEdge(m_links[i].m_n[0],m_links[i].m_n[1],pa,pb);
|
1605
|
+
if(mtch!=-1)
|
1606
|
+
{
|
1607
|
+
appendLink(i);
|
1608
|
+
Link* pft[]={&m_links[i],&m_links[m_links.size()-1]};
|
1609
|
+
pft[0]->m_n[1]=pn[mtch];
|
1610
|
+
pft[1]->m_n[0]=pn[1-mtch];
|
1611
|
+
done=true;
|
1612
|
+
}
|
1613
|
+
}
|
1614
|
+
for(i=0,ni=m_faces.size();i<ni;++i)
|
1615
|
+
{
|
1616
|
+
for(int k=2,l=0;l<3;k=l++)
|
1617
|
+
{
|
1618
|
+
const int mtch=MatchEdge(m_faces[i].m_n[k],m_faces[i].m_n[l],pa,pb);
|
1619
|
+
if(mtch!=-1)
|
1620
|
+
{
|
1621
|
+
appendFace(i);
|
1622
|
+
Face* pft[]={&m_faces[i],&m_faces[m_faces.size()-1]};
|
1623
|
+
pft[0]->m_n[l]=pn[mtch];
|
1624
|
+
pft[1]->m_n[k]=pn[1-mtch];
|
1625
|
+
appendLink(pn[0],pft[0]->m_n[(l+1)%3],pft[0]->m_material,true);
|
1626
|
+
appendLink(pn[1],pft[0]->m_n[(l+1)%3],pft[0]->m_material,true);
|
1627
|
+
}
|
1628
|
+
}
|
1629
|
+
}
|
1630
|
+
if(!done)
|
1631
|
+
{
|
1632
|
+
m_ndbvt.remove(pn[0]->m_leaf);
|
1633
|
+
m_ndbvt.remove(pn[1]->m_leaf);
|
1634
|
+
m_nodes.pop_back();
|
1635
|
+
m_nodes.pop_back();
|
1636
|
+
}
|
1637
|
+
return(done);
|
1638
|
+
}
|
1639
|
+
|
1640
|
+
//
|
1641
|
+
bool btSoftBody::rayTest(const btVector3& rayFrom,
|
1642
|
+
const btVector3& rayTo,
|
1643
|
+
sRayCast& results)
|
1644
|
+
{
|
1645
|
+
if(m_faces.size()&&m_fdbvt.empty())
|
1646
|
+
initializeFaceTree();
|
1647
|
+
|
1648
|
+
results.body = this;
|
1649
|
+
results.fraction = 1.f;
|
1650
|
+
results.feature = eFeature::None;
|
1651
|
+
results.index = -1;
|
1652
|
+
|
1653
|
+
return(rayTest(rayFrom,rayTo,results.fraction,results.feature,results.index,false)!=0);
|
1654
|
+
}
|
1655
|
+
|
1656
|
+
//
|
1657
|
+
void btSoftBody::setSolver(eSolverPresets::_ preset)
|
1658
|
+
{
|
1659
|
+
m_cfg.m_vsequence.clear();
|
1660
|
+
m_cfg.m_psequence.clear();
|
1661
|
+
m_cfg.m_dsequence.clear();
|
1662
|
+
switch(preset)
|
1663
|
+
{
|
1664
|
+
case eSolverPresets::Positions:
|
1665
|
+
m_cfg.m_psequence.push_back(ePSolver::Anchors);
|
1666
|
+
m_cfg.m_psequence.push_back(ePSolver::RContacts);
|
1667
|
+
m_cfg.m_psequence.push_back(ePSolver::SContacts);
|
1668
|
+
m_cfg.m_psequence.push_back(ePSolver::Linear);
|
1669
|
+
break;
|
1670
|
+
case eSolverPresets::Velocities:
|
1671
|
+
m_cfg.m_vsequence.push_back(eVSolver::Linear);
|
1672
|
+
|
1673
|
+
m_cfg.m_psequence.push_back(ePSolver::Anchors);
|
1674
|
+
m_cfg.m_psequence.push_back(ePSolver::RContacts);
|
1675
|
+
m_cfg.m_psequence.push_back(ePSolver::SContacts);
|
1676
|
+
|
1677
|
+
m_cfg.m_dsequence.push_back(ePSolver::Linear);
|
1678
|
+
break;
|
1679
|
+
}
|
1680
|
+
}
|
1681
|
+
|
1682
|
+
//
|
1683
|
+
void btSoftBody::predictMotion(btScalar dt)
|
1684
|
+
{
|
1685
|
+
|
1686
|
+
int i,ni;
|
1687
|
+
|
1688
|
+
/* Update */
|
1689
|
+
if(m_bUpdateRtCst)
|
1690
|
+
{
|
1691
|
+
m_bUpdateRtCst=false;
|
1692
|
+
updateConstants();
|
1693
|
+
m_fdbvt.clear();
|
1694
|
+
if(m_cfg.collisions&fCollision::VF_SS)
|
1695
|
+
{
|
1696
|
+
initializeFaceTree();
|
1697
|
+
}
|
1698
|
+
}
|
1699
|
+
|
1700
|
+
/* Prepare */
|
1701
|
+
m_sst.sdt = dt*m_cfg.timescale;
|
1702
|
+
m_sst.isdt = 1/m_sst.sdt;
|
1703
|
+
m_sst.velmrg = m_sst.sdt*3;
|
1704
|
+
m_sst.radmrg = getCollisionShape()->getMargin();
|
1705
|
+
m_sst.updmrg = m_sst.radmrg*(btScalar)0.25;
|
1706
|
+
/* Forces */
|
1707
|
+
addVelocity(m_worldInfo->m_gravity*m_sst.sdt);
|
1708
|
+
applyForces();
|
1709
|
+
/* Integrate */
|
1710
|
+
for(i=0,ni=m_nodes.size();i<ni;++i)
|
1711
|
+
{
|
1712
|
+
Node& n=m_nodes[i];
|
1713
|
+
n.m_q = n.m_x;
|
1714
|
+
n.m_v += n.m_f*n.m_im*m_sst.sdt;
|
1715
|
+
n.m_x += n.m_v*m_sst.sdt;
|
1716
|
+
n.m_f = btVector3(0,0,0);
|
1717
|
+
}
|
1718
|
+
/* Clusters */
|
1719
|
+
updateClusters();
|
1720
|
+
/* Bounds */
|
1721
|
+
updateBounds();
|
1722
|
+
/* Nodes */
|
1723
|
+
ATTRIBUTE_ALIGNED16(btDbvtVolume) vol;
|
1724
|
+
for(i=0,ni=m_nodes.size();i<ni;++i)
|
1725
|
+
{
|
1726
|
+
Node& n=m_nodes[i];
|
1727
|
+
vol = btDbvtVolume::FromCR(n.m_x,m_sst.radmrg);
|
1728
|
+
m_ndbvt.update( n.m_leaf,
|
1729
|
+
vol,
|
1730
|
+
n.m_v*m_sst.velmrg,
|
1731
|
+
m_sst.updmrg);
|
1732
|
+
}
|
1733
|
+
/* Faces */
|
1734
|
+
if(!m_fdbvt.empty())
|
1735
|
+
{
|
1736
|
+
for(int i=0;i<m_faces.size();++i)
|
1737
|
+
{
|
1738
|
+
Face& f=m_faces[i];
|
1739
|
+
const btVector3 v=( f.m_n[0]->m_v+
|
1740
|
+
f.m_n[1]->m_v+
|
1741
|
+
f.m_n[2]->m_v)/3;
|
1742
|
+
vol = VolumeOf(f,m_sst.radmrg);
|
1743
|
+
m_fdbvt.update( f.m_leaf,
|
1744
|
+
vol,
|
1745
|
+
v*m_sst.velmrg,
|
1746
|
+
m_sst.updmrg);
|
1747
|
+
}
|
1748
|
+
}
|
1749
|
+
/* Pose */
|
1750
|
+
updatePose();
|
1751
|
+
/* Match */
|
1752
|
+
if(m_pose.m_bframe&&(m_cfg.kMT>0))
|
1753
|
+
{
|
1754
|
+
const btMatrix3x3 posetrs=m_pose.m_rot;
|
1755
|
+
for(int i=0,ni=m_nodes.size();i<ni;++i)
|
1756
|
+
{
|
1757
|
+
Node& n=m_nodes[i];
|
1758
|
+
if(n.m_im>0)
|
1759
|
+
{
|
1760
|
+
const btVector3 x=posetrs*m_pose.m_pos[i]+m_pose.m_com;
|
1761
|
+
n.m_x=Lerp(n.m_x,x,m_cfg.kMT);
|
1762
|
+
}
|
1763
|
+
}
|
1764
|
+
}
|
1765
|
+
/* Clear contacts */
|
1766
|
+
m_rcontacts.resize(0);
|
1767
|
+
m_scontacts.resize(0);
|
1768
|
+
/* Optimize dbvt's */
|
1769
|
+
m_ndbvt.optimizeIncremental(1);
|
1770
|
+
m_fdbvt.optimizeIncremental(1);
|
1771
|
+
m_cdbvt.optimizeIncremental(1);
|
1772
|
+
}
|
1773
|
+
|
1774
|
+
//
|
1775
|
+
void btSoftBody::solveConstraints()
|
1776
|
+
{
|
1777
|
+
|
1778
|
+
/* Apply clusters */
|
1779
|
+
applyClusters(false);
|
1780
|
+
/* Prepare links */
|
1781
|
+
|
1782
|
+
int i,ni;
|
1783
|
+
|
1784
|
+
for(i=0,ni=m_links.size();i<ni;++i)
|
1785
|
+
{
|
1786
|
+
Link& l=m_links[i];
|
1787
|
+
l.m_c3 = l.m_n[1]->m_q-l.m_n[0]->m_q;
|
1788
|
+
l.m_c2 = 1/(l.m_c3.length2()*l.m_c0);
|
1789
|
+
}
|
1790
|
+
/* Prepare anchors */
|
1791
|
+
for(i=0,ni=m_anchors.size();i<ni;++i)
|
1792
|
+
{
|
1793
|
+
Anchor& a=m_anchors[i];
|
1794
|
+
const btVector3 ra=a.m_body->getWorldTransform().getBasis()*a.m_local;
|
1795
|
+
a.m_c0 = ImpulseMatrix( m_sst.sdt,
|
1796
|
+
a.m_node->m_im,
|
1797
|
+
a.m_body->getInvMass(),
|
1798
|
+
a.m_body->getInvInertiaTensorWorld(),
|
1799
|
+
ra);
|
1800
|
+
a.m_c1 = ra;
|
1801
|
+
a.m_c2 = m_sst.sdt*a.m_node->m_im;
|
1802
|
+
a.m_body->activate();
|
1803
|
+
}
|
1804
|
+
/* Solve velocities */
|
1805
|
+
if(m_cfg.viterations>0)
|
1806
|
+
{
|
1807
|
+
/* Solve */
|
1808
|
+
for(int isolve=0;isolve<m_cfg.viterations;++isolve)
|
1809
|
+
{
|
1810
|
+
for(int iseq=0;iseq<m_cfg.m_vsequence.size();++iseq)
|
1811
|
+
{
|
1812
|
+
getSolver(m_cfg.m_vsequence[iseq])(this,1);
|
1813
|
+
}
|
1814
|
+
}
|
1815
|
+
/* Update */
|
1816
|
+
for(i=0,ni=m_nodes.size();i<ni;++i)
|
1817
|
+
{
|
1818
|
+
Node& n=m_nodes[i];
|
1819
|
+
n.m_x = n.m_q+n.m_v*m_sst.sdt;
|
1820
|
+
}
|
1821
|
+
}
|
1822
|
+
/* Solve positions */
|
1823
|
+
if(m_cfg.piterations>0)
|
1824
|
+
{
|
1825
|
+
for(int isolve=0;isolve<m_cfg.piterations;++isolve)
|
1826
|
+
{
|
1827
|
+
const btScalar ti=isolve/(btScalar)m_cfg.piterations;
|
1828
|
+
for(int iseq=0;iseq<m_cfg.m_psequence.size();++iseq)
|
1829
|
+
{
|
1830
|
+
getSolver(m_cfg.m_psequence[iseq])(this,1,ti);
|
1831
|
+
}
|
1832
|
+
}
|
1833
|
+
const btScalar vc=m_sst.isdt*(1-m_cfg.kDP);
|
1834
|
+
for(i=0,ni=m_nodes.size();i<ni;++i)
|
1835
|
+
{
|
1836
|
+
Node& n=m_nodes[i];
|
1837
|
+
n.m_v = (n.m_x-n.m_q)*vc;
|
1838
|
+
n.m_f = btVector3(0,0,0);
|
1839
|
+
}
|
1840
|
+
}
|
1841
|
+
/* Solve drift */
|
1842
|
+
if(m_cfg.diterations>0)
|
1843
|
+
{
|
1844
|
+
const btScalar vcf=m_cfg.kVCF*m_sst.isdt;
|
1845
|
+
for(i=0,ni=m_nodes.size();i<ni;++i)
|
1846
|
+
{
|
1847
|
+
Node& n=m_nodes[i];
|
1848
|
+
n.m_q = n.m_x;
|
1849
|
+
}
|
1850
|
+
for(int idrift=0;idrift<m_cfg.diterations;++idrift)
|
1851
|
+
{
|
1852
|
+
for(int iseq=0;iseq<m_cfg.m_dsequence.size();++iseq)
|
1853
|
+
{
|
1854
|
+
getSolver(m_cfg.m_dsequence[iseq])(this,1,0);
|
1855
|
+
}
|
1856
|
+
}
|
1857
|
+
for(int i=0,ni=m_nodes.size();i<ni;++i)
|
1858
|
+
{
|
1859
|
+
Node& n=m_nodes[i];
|
1860
|
+
n.m_v += (n.m_x-n.m_q)*vcf;
|
1861
|
+
}
|
1862
|
+
}
|
1863
|
+
/* Apply clusters */
|
1864
|
+
dampClusters();
|
1865
|
+
applyClusters(true);
|
1866
|
+
}
|
1867
|
+
|
1868
|
+
//
|
1869
|
+
void btSoftBody::staticSolve(int iterations)
|
1870
|
+
{
|
1871
|
+
for(int isolve=0;isolve<iterations;++isolve)
|
1872
|
+
{
|
1873
|
+
for(int iseq=0;iseq<m_cfg.m_psequence.size();++iseq)
|
1874
|
+
{
|
1875
|
+
getSolver(m_cfg.m_psequence[iseq])(this,1,0);
|
1876
|
+
}
|
1877
|
+
}
|
1878
|
+
}
|
1879
|
+
|
1880
|
+
//
|
1881
|
+
void btSoftBody::solveCommonConstraints(btSoftBody** /*bodies*/,int /*count*/,int /*iterations*/)
|
1882
|
+
{
|
1883
|
+
/// placeholder
|
1884
|
+
}
|
1885
|
+
|
1886
|
+
//
|
1887
|
+
void btSoftBody::solveClusters(const btAlignedObjectArray<btSoftBody*>& bodies)
|
1888
|
+
{
|
1889
|
+
const int nb=bodies.size();
|
1890
|
+
int iterations=0;
|
1891
|
+
int i;
|
1892
|
+
|
1893
|
+
for(i=0;i<nb;++i)
|
1894
|
+
{
|
1895
|
+
iterations=btMax(iterations,bodies[i]->m_cfg.citerations);
|
1896
|
+
}
|
1897
|
+
for(i=0;i<nb;++i)
|
1898
|
+
{
|
1899
|
+
bodies[i]->prepareClusters(iterations);
|
1900
|
+
}
|
1901
|
+
for(i=0;i<iterations;++i)
|
1902
|
+
{
|
1903
|
+
const btScalar sor=1;
|
1904
|
+
for(int j=0;j<nb;++j)
|
1905
|
+
{
|
1906
|
+
bodies[j]->solveClusters(sor);
|
1907
|
+
}
|
1908
|
+
}
|
1909
|
+
for(i=0;i<nb;++i)
|
1910
|
+
{
|
1911
|
+
bodies[i]->cleanupClusters();
|
1912
|
+
}
|
1913
|
+
}
|
1914
|
+
|
1915
|
+
//
|
1916
|
+
void btSoftBody::integrateMotion()
|
1917
|
+
{
|
1918
|
+
/* Update */
|
1919
|
+
updateNormals();
|
1920
|
+
}
|
1921
|
+
|
1922
|
+
//
|
1923
|
+
btSoftBody::RayFromToCaster::RayFromToCaster(const btVector3& rayFrom,const btVector3& rayTo,btScalar mxt)
|
1924
|
+
{
|
1925
|
+
m_rayFrom = rayFrom;
|
1926
|
+
m_rayNormalizedDirection = (rayTo-rayFrom);
|
1927
|
+
m_rayTo = rayTo;
|
1928
|
+
m_mint = mxt;
|
1929
|
+
m_face = 0;
|
1930
|
+
m_tests = 0;
|
1931
|
+
}
|
1932
|
+
|
1933
|
+
//
|
1934
|
+
void btSoftBody::RayFromToCaster::Process(const btDbvtNode* leaf)
|
1935
|
+
{
|
1936
|
+
btSoftBody::Face& f=*(btSoftBody::Face*)leaf->data;
|
1937
|
+
const btScalar t=rayFromToTriangle( m_rayFrom,m_rayTo,m_rayNormalizedDirection,
|
1938
|
+
f.m_n[0]->m_x,
|
1939
|
+
f.m_n[1]->m_x,
|
1940
|
+
f.m_n[2]->m_x,
|
1941
|
+
m_mint);
|
1942
|
+
if((t>0)&&(t<m_mint))
|
1943
|
+
{
|
1944
|
+
m_mint=t;m_face=&f;
|
1945
|
+
}
|
1946
|
+
++m_tests;
|
1947
|
+
}
|
1948
|
+
|
1949
|
+
//
|
1950
|
+
btScalar btSoftBody::RayFromToCaster::rayFromToTriangle( const btVector3& rayFrom,
|
1951
|
+
const btVector3& rayTo,
|
1952
|
+
const btVector3& rayNormalizedDirection,
|
1953
|
+
const btVector3& a,
|
1954
|
+
const btVector3& b,
|
1955
|
+
const btVector3& c,
|
1956
|
+
btScalar maxt)
|
1957
|
+
{
|
1958
|
+
static const btScalar ceps=-SIMD_EPSILON*10;
|
1959
|
+
static const btScalar teps=SIMD_EPSILON*10;
|
1960
|
+
|
1961
|
+
const btVector3 n=btCross(b-a,c-a);
|
1962
|
+
const btScalar d=btDot(a,n);
|
1963
|
+
const btScalar den=btDot(rayNormalizedDirection,n);
|
1964
|
+
if(!btFuzzyZero(den))
|
1965
|
+
{
|
1966
|
+
const btScalar num=btDot(rayFrom,n)-d;
|
1967
|
+
const btScalar t=-num/den;
|
1968
|
+
if((t>teps)&&(t<maxt))
|
1969
|
+
{
|
1970
|
+
const btVector3 hit=rayFrom+rayNormalizedDirection*t;
|
1971
|
+
if( (btDot(n,btCross(a-hit,b-hit))>ceps) &&
|
1972
|
+
(btDot(n,btCross(b-hit,c-hit))>ceps) &&
|
1973
|
+
(btDot(n,btCross(c-hit,a-hit))>ceps))
|
1974
|
+
{
|
1975
|
+
return(t);
|
1976
|
+
}
|
1977
|
+
}
|
1978
|
+
}
|
1979
|
+
return(-1);
|
1980
|
+
}
|
1981
|
+
|
1982
|
+
//
|
1983
|
+
void btSoftBody::pointersToIndices()
|
1984
|
+
{
|
1985
|
+
#define PTR2IDX(_p_,_b_) reinterpret_cast<btSoftBody::Node*>((_p_)-(_b_))
|
1986
|
+
btSoftBody::Node* base=m_nodes.size() ? &m_nodes[0] : 0;
|
1987
|
+
int i,ni;
|
1988
|
+
|
1989
|
+
for(i=0,ni=m_nodes.size();i<ni;++i)
|
1990
|
+
{
|
1991
|
+
if(m_nodes[i].m_leaf)
|
1992
|
+
{
|
1993
|
+
m_nodes[i].m_leaf->data=*(void**)&i;
|
1994
|
+
}
|
1995
|
+
}
|
1996
|
+
for(i=0,ni=m_links.size();i<ni;++i)
|
1997
|
+
{
|
1998
|
+
m_links[i].m_n[0]=PTR2IDX(m_links[i].m_n[0],base);
|
1999
|
+
m_links[i].m_n[1]=PTR2IDX(m_links[i].m_n[1],base);
|
2000
|
+
}
|
2001
|
+
for(i=0,ni=m_faces.size();i<ni;++i)
|
2002
|
+
{
|
2003
|
+
m_faces[i].m_n[0]=PTR2IDX(m_faces[i].m_n[0],base);
|
2004
|
+
m_faces[i].m_n[1]=PTR2IDX(m_faces[i].m_n[1],base);
|
2005
|
+
m_faces[i].m_n[2]=PTR2IDX(m_faces[i].m_n[2],base);
|
2006
|
+
if(m_faces[i].m_leaf)
|
2007
|
+
{
|
2008
|
+
m_faces[i].m_leaf->data=*(void**)&i;
|
2009
|
+
}
|
2010
|
+
}
|
2011
|
+
for(i=0,ni=m_anchors.size();i<ni;++i)
|
2012
|
+
{
|
2013
|
+
m_anchors[i].m_node=PTR2IDX(m_anchors[i].m_node,base);
|
2014
|
+
}
|
2015
|
+
for(i=0,ni=m_notes.size();i<ni;++i)
|
2016
|
+
{
|
2017
|
+
for(int j=0;j<m_notes[i].m_rank;++j)
|
2018
|
+
{
|
2019
|
+
m_notes[i].m_nodes[j]=PTR2IDX(m_notes[i].m_nodes[j],base);
|
2020
|
+
}
|
2021
|
+
}
|
2022
|
+
#undef PTR2IDX
|
2023
|
+
}
|
2024
|
+
|
2025
|
+
//
|
2026
|
+
void btSoftBody::indicesToPointers(const int* map)
|
2027
|
+
{
|
2028
|
+
#define IDX2PTR(_p_,_b_) map?(&(_b_)[map[(((char*)_p_)-(char*)0)]]): \
|
2029
|
+
(&(_b_)[(((char*)_p_)-(char*)0)])
|
2030
|
+
btSoftBody::Node* base=m_nodes.size() ? &m_nodes[0]:0;
|
2031
|
+
int i,ni;
|
2032
|
+
|
2033
|
+
for(i=0,ni=m_nodes.size();i<ni;++i)
|
2034
|
+
{
|
2035
|
+
if(m_nodes[i].m_leaf)
|
2036
|
+
{
|
2037
|
+
m_nodes[i].m_leaf->data=&m_nodes[i];
|
2038
|
+
}
|
2039
|
+
}
|
2040
|
+
for(i=0,ni=m_links.size();i<ni;++i)
|
2041
|
+
{
|
2042
|
+
m_links[i].m_n[0]=IDX2PTR(m_links[i].m_n[0],base);
|
2043
|
+
m_links[i].m_n[1]=IDX2PTR(m_links[i].m_n[1],base);
|
2044
|
+
}
|
2045
|
+
for(i=0,ni=m_faces.size();i<ni;++i)
|
2046
|
+
{
|
2047
|
+
m_faces[i].m_n[0]=IDX2PTR(m_faces[i].m_n[0],base);
|
2048
|
+
m_faces[i].m_n[1]=IDX2PTR(m_faces[i].m_n[1],base);
|
2049
|
+
m_faces[i].m_n[2]=IDX2PTR(m_faces[i].m_n[2],base);
|
2050
|
+
if(m_faces[i].m_leaf)
|
2051
|
+
{
|
2052
|
+
m_faces[i].m_leaf->data=&m_faces[i];
|
2053
|
+
}
|
2054
|
+
}
|
2055
|
+
for(i=0,ni=m_anchors.size();i<ni;++i)
|
2056
|
+
{
|
2057
|
+
m_anchors[i].m_node=IDX2PTR(m_anchors[i].m_node,base);
|
2058
|
+
}
|
2059
|
+
for(i=0,ni=m_notes.size();i<ni;++i)
|
2060
|
+
{
|
2061
|
+
for(int j=0;j<m_notes[i].m_rank;++j)
|
2062
|
+
{
|
2063
|
+
m_notes[i].m_nodes[j]=IDX2PTR(m_notes[i].m_nodes[j],base);
|
2064
|
+
}
|
2065
|
+
}
|
2066
|
+
#undef IDX2PTR
|
2067
|
+
}
|
2068
|
+
|
2069
|
+
//
|
2070
|
+
int btSoftBody::rayTest(const btVector3& rayFrom,const btVector3& rayTo,
|
2071
|
+
btScalar& mint,eFeature::_& feature,int& index,bool bcountonly) const
|
2072
|
+
{
|
2073
|
+
int cnt=0;
|
2074
|
+
btVector3 dir = rayTo-rayFrom;
|
2075
|
+
|
2076
|
+
|
2077
|
+
if(bcountonly||m_fdbvt.empty())
|
2078
|
+
{/* Full search */
|
2079
|
+
|
2080
|
+
for(int i=0,ni=m_faces.size();i<ni;++i)
|
2081
|
+
{
|
2082
|
+
const btSoftBody::Face& f=m_faces[i];
|
2083
|
+
|
2084
|
+
const btScalar t=RayFromToCaster::rayFromToTriangle( rayFrom,rayTo,dir,
|
2085
|
+
f.m_n[0]->m_x,
|
2086
|
+
f.m_n[1]->m_x,
|
2087
|
+
f.m_n[2]->m_x,
|
2088
|
+
mint);
|
2089
|
+
if(t>0)
|
2090
|
+
{
|
2091
|
+
++cnt;
|
2092
|
+
if(!bcountonly)
|
2093
|
+
{
|
2094
|
+
feature=btSoftBody::eFeature::Face;
|
2095
|
+
index=i;
|
2096
|
+
mint=t;
|
2097
|
+
}
|
2098
|
+
}
|
2099
|
+
}
|
2100
|
+
}
|
2101
|
+
else
|
2102
|
+
{/* Use dbvt */
|
2103
|
+
RayFromToCaster collider(rayFrom,rayTo,mint);
|
2104
|
+
|
2105
|
+
btDbvt::rayTest(m_fdbvt.m_root,rayFrom,rayTo,collider);
|
2106
|
+
if(collider.m_face)
|
2107
|
+
{
|
2108
|
+
mint=collider.m_mint;
|
2109
|
+
feature=btSoftBody::eFeature::Face;
|
2110
|
+
index=(int)(collider.m_face-&m_faces[0]);
|
2111
|
+
cnt=1;
|
2112
|
+
}
|
2113
|
+
}
|
2114
|
+
|
2115
|
+
for (int i=0;i<m_tetras.size();i++)
|
2116
|
+
{
|
2117
|
+
const btSoftBody::Tetra& tet = m_tetras[i];
|
2118
|
+
int tetfaces[4][3] = {{0,1,2},{0,1,3},{1,2,3},{0,2,3}};
|
2119
|
+
for (int f=0;f<4;f++)
|
2120
|
+
{
|
2121
|
+
|
2122
|
+
int index0=tetfaces[f][0];
|
2123
|
+
int index1=tetfaces[f][1];
|
2124
|
+
int index2=tetfaces[f][2];
|
2125
|
+
btVector3 v0=tet.m_n[index0]->m_x;
|
2126
|
+
btVector3 v1=tet.m_n[index1]->m_x;
|
2127
|
+
btVector3 v2=tet.m_n[index2]->m_x;
|
2128
|
+
|
2129
|
+
|
2130
|
+
const btScalar t=RayFromToCaster::rayFromToTriangle( rayFrom,rayTo,dir,
|
2131
|
+
v0,v1,v2,
|
2132
|
+
mint);
|
2133
|
+
if(t>0)
|
2134
|
+
{
|
2135
|
+
++cnt;
|
2136
|
+
if(!bcountonly)
|
2137
|
+
{
|
2138
|
+
feature=btSoftBody::eFeature::Tetra;
|
2139
|
+
index=i;
|
2140
|
+
mint=t;
|
2141
|
+
}
|
2142
|
+
}
|
2143
|
+
}
|
2144
|
+
}
|
2145
|
+
return(cnt);
|
2146
|
+
}
|
2147
|
+
|
2148
|
+
//
|
2149
|
+
void btSoftBody::initializeFaceTree()
|
2150
|
+
{
|
2151
|
+
m_fdbvt.clear();
|
2152
|
+
for(int i=0;i<m_faces.size();++i)
|
2153
|
+
{
|
2154
|
+
Face& f=m_faces[i];
|
2155
|
+
f.m_leaf=m_fdbvt.insert(VolumeOf(f,0),&f);
|
2156
|
+
}
|
2157
|
+
}
|
2158
|
+
|
2159
|
+
//
|
2160
|
+
btVector3 btSoftBody::evaluateCom() const
|
2161
|
+
{
|
2162
|
+
btVector3 com(0,0,0);
|
2163
|
+
if(m_pose.m_bframe)
|
2164
|
+
{
|
2165
|
+
for(int i=0,ni=m_nodes.size();i<ni;++i)
|
2166
|
+
{
|
2167
|
+
com+=m_nodes[i].m_x*m_pose.m_wgh[i];
|
2168
|
+
}
|
2169
|
+
}
|
2170
|
+
return(com);
|
2171
|
+
}
|
2172
|
+
|
2173
|
+
//
|
2174
|
+
bool btSoftBody::checkContact( btCollisionObject* colObj,
|
2175
|
+
const btVector3& x,
|
2176
|
+
btScalar margin,
|
2177
|
+
btSoftBody::sCti& cti) const
|
2178
|
+
{
|
2179
|
+
btVector3 nrm;
|
2180
|
+
btCollisionShape *shp = colObj->getCollisionShape();
|
2181
|
+
btRigidBody *tmpRigid = btRigidBody::upcast(colObj);
|
2182
|
+
const btTransform &wtr = tmpRigid ? tmpRigid->getWorldTransform() : colObj->getWorldTransform();
|
2183
|
+
btScalar dst =
|
2184
|
+
m_worldInfo->m_sparsesdf.Evaluate(
|
2185
|
+
wtr.invXform(x),
|
2186
|
+
shp,
|
2187
|
+
nrm,
|
2188
|
+
margin);
|
2189
|
+
if(dst<0)
|
2190
|
+
{
|
2191
|
+
cti.m_colObj = colObj;
|
2192
|
+
cti.m_normal = wtr.getBasis()*nrm;
|
2193
|
+
cti.m_offset = -btDot( cti.m_normal, x - cti.m_normal * dst );
|
2194
|
+
return(true);
|
2195
|
+
}
|
2196
|
+
return(false);
|
2197
|
+
}
|
2198
|
+
|
2199
|
+
//
|
2200
|
+
void btSoftBody::updateNormals()
|
2201
|
+
{
|
2202
|
+
|
2203
|
+
const btVector3 zv(0,0,0);
|
2204
|
+
int i,ni;
|
2205
|
+
|
2206
|
+
for(i=0,ni=m_nodes.size();i<ni;++i)
|
2207
|
+
{
|
2208
|
+
m_nodes[i].m_n=zv;
|
2209
|
+
}
|
2210
|
+
for(i=0,ni=m_faces.size();i<ni;++i)
|
2211
|
+
{
|
2212
|
+
btSoftBody::Face& f=m_faces[i];
|
2213
|
+
const btVector3 n=btCross(f.m_n[1]->m_x-f.m_n[0]->m_x,
|
2214
|
+
f.m_n[2]->m_x-f.m_n[0]->m_x);
|
2215
|
+
f.m_normal=n.normalized();
|
2216
|
+
f.m_n[0]->m_n+=n;
|
2217
|
+
f.m_n[1]->m_n+=n;
|
2218
|
+
f.m_n[2]->m_n+=n;
|
2219
|
+
}
|
2220
|
+
for(i=0,ni=m_nodes.size();i<ni;++i)
|
2221
|
+
{
|
2222
|
+
btScalar len = m_nodes[i].m_n.length();
|
2223
|
+
if (len>SIMD_EPSILON)
|
2224
|
+
m_nodes[i].m_n /= len;
|
2225
|
+
}
|
2226
|
+
}
|
2227
|
+
|
2228
|
+
//
|
2229
|
+
void btSoftBody::updateBounds()
|
2230
|
+
{
|
2231
|
+
/*if( m_acceleratedSoftBody )
|
2232
|
+
{
|
2233
|
+
// If we have an accelerated softbody we need to obtain the bounds correctly
|
2234
|
+
// For now (slightly hackily) just have a very large AABB
|
2235
|
+
// TODO: Write get bounds kernel
|
2236
|
+
// If that is updating in place, atomic collisions might be low (when the cloth isn't perfectly aligned to an axis) and we could
|
2237
|
+
// probably do a test and exchange reasonably efficiently.
|
2238
|
+
|
2239
|
+
m_bounds[0] = btVector3(-1000, -1000, -1000);
|
2240
|
+
m_bounds[1] = btVector3(1000, 1000, 1000);
|
2241
|
+
|
2242
|
+
} else {*/
|
2243
|
+
if(m_ndbvt.m_root)
|
2244
|
+
{
|
2245
|
+
const btVector3& mins=m_ndbvt.m_root->volume.Mins();
|
2246
|
+
const btVector3& maxs=m_ndbvt.m_root->volume.Maxs();
|
2247
|
+
const btScalar csm=getCollisionShape()->getMargin();
|
2248
|
+
const btVector3 mrg=btVector3( csm,
|
2249
|
+
csm,
|
2250
|
+
csm)*1; // ??? to investigate...
|
2251
|
+
m_bounds[0]=mins-mrg;
|
2252
|
+
m_bounds[1]=maxs+mrg;
|
2253
|
+
if(0!=getBroadphaseHandle())
|
2254
|
+
{
|
2255
|
+
m_worldInfo->m_broadphase->setAabb( getBroadphaseHandle(),
|
2256
|
+
m_bounds[0],
|
2257
|
+
m_bounds[1],
|
2258
|
+
m_worldInfo->m_dispatcher);
|
2259
|
+
}
|
2260
|
+
}
|
2261
|
+
else
|
2262
|
+
{
|
2263
|
+
m_bounds[0]=
|
2264
|
+
m_bounds[1]=btVector3(0,0,0);
|
2265
|
+
}
|
2266
|
+
//}
|
2267
|
+
}
|
2268
|
+
|
2269
|
+
|
2270
|
+
//
|
2271
|
+
void btSoftBody::updatePose()
|
2272
|
+
{
|
2273
|
+
if(m_pose.m_bframe)
|
2274
|
+
{
|
2275
|
+
btSoftBody::Pose& pose=m_pose;
|
2276
|
+
const btVector3 com=evaluateCom();
|
2277
|
+
/* Com */
|
2278
|
+
pose.m_com = com;
|
2279
|
+
/* Rotation */
|
2280
|
+
btMatrix3x3 Apq;
|
2281
|
+
const btScalar eps=SIMD_EPSILON;
|
2282
|
+
Apq[0]=Apq[1]=Apq[2]=btVector3(0,0,0);
|
2283
|
+
Apq[0].setX(eps);Apq[1].setY(eps*2);Apq[2].setZ(eps*3);
|
2284
|
+
for(int i=0,ni=m_nodes.size();i<ni;++i)
|
2285
|
+
{
|
2286
|
+
const btVector3 a=pose.m_wgh[i]*(m_nodes[i].m_x-com);
|
2287
|
+
const btVector3& b=pose.m_pos[i];
|
2288
|
+
Apq[0]+=a.x()*b;
|
2289
|
+
Apq[1]+=a.y()*b;
|
2290
|
+
Apq[2]+=a.z()*b;
|
2291
|
+
}
|
2292
|
+
btMatrix3x3 r,s;
|
2293
|
+
PolarDecompose(Apq,r,s);
|
2294
|
+
pose.m_rot=r;
|
2295
|
+
pose.m_scl=pose.m_aqq*r.transpose()*Apq;
|
2296
|
+
if(m_cfg.maxvolume>1)
|
2297
|
+
{
|
2298
|
+
const btScalar idet=Clamp<btScalar>( 1/pose.m_scl.determinant(),
|
2299
|
+
1,m_cfg.maxvolume);
|
2300
|
+
pose.m_scl=Mul(pose.m_scl,idet);
|
2301
|
+
}
|
2302
|
+
|
2303
|
+
}
|
2304
|
+
}
|
2305
|
+
|
2306
|
+
//
|
2307
|
+
void btSoftBody::updateConstants()
|
2308
|
+
{
|
2309
|
+
int i,ni;
|
2310
|
+
|
2311
|
+
/* Links */
|
2312
|
+
for(i=0,ni=m_links.size();i<ni;++i)
|
2313
|
+
{
|
2314
|
+
Link& l=m_links[i];
|
2315
|
+
Material& m=*l.m_material;
|
2316
|
+
l.m_rl = (l.m_n[0]->m_x-l.m_n[1]->m_x).length();
|
2317
|
+
l.m_c0 = (l.m_n[0]->m_im+l.m_n[1]->m_im)/m.m_kLST;
|
2318
|
+
l.m_c1 = l.m_rl*l.m_rl;
|
2319
|
+
}
|
2320
|
+
/* Faces */
|
2321
|
+
for(i=0,ni=m_faces.size();i<ni;++i)
|
2322
|
+
{
|
2323
|
+
Face& f=m_faces[i];
|
2324
|
+
f.m_ra = AreaOf(f.m_n[0]->m_x,f.m_n[1]->m_x,f.m_n[2]->m_x);
|
2325
|
+
}
|
2326
|
+
/* Area's */
|
2327
|
+
btAlignedObjectArray<int> counts;
|
2328
|
+
counts.resize(m_nodes.size(),0);
|
2329
|
+
for(i=0,ni=m_nodes.size();i<ni;++i)
|
2330
|
+
{
|
2331
|
+
m_nodes[i].m_area = 0;
|
2332
|
+
}
|
2333
|
+
for(i=0,ni=m_faces.size();i<ni;++i)
|
2334
|
+
{
|
2335
|
+
btSoftBody::Face& f=m_faces[i];
|
2336
|
+
for(int j=0;j<3;++j)
|
2337
|
+
{
|
2338
|
+
const int index=(int)(f.m_n[j]-&m_nodes[0]);
|
2339
|
+
counts[index]++;
|
2340
|
+
f.m_n[j]->m_area+=btFabs(f.m_ra);
|
2341
|
+
}
|
2342
|
+
}
|
2343
|
+
for(i=0,ni=m_nodes.size();i<ni;++i)
|
2344
|
+
{
|
2345
|
+
if(counts[i]>0)
|
2346
|
+
m_nodes[i].m_area/=(btScalar)counts[i];
|
2347
|
+
else
|
2348
|
+
m_nodes[i].m_area=0;
|
2349
|
+
}
|
2350
|
+
}
|
2351
|
+
|
2352
|
+
//
|
2353
|
+
void btSoftBody::initializeClusters()
|
2354
|
+
{
|
2355
|
+
int i;
|
2356
|
+
|
2357
|
+
for( i=0;i<m_clusters.size();++i)
|
2358
|
+
{
|
2359
|
+
Cluster& c=*m_clusters[i];
|
2360
|
+
c.m_imass=0;
|
2361
|
+
c.m_masses.resize(c.m_nodes.size());
|
2362
|
+
for(int j=0;j<c.m_nodes.size();++j)
|
2363
|
+
{
|
2364
|
+
if (c.m_nodes[j]->m_im==0)
|
2365
|
+
{
|
2366
|
+
c.m_containsAnchor = true;
|
2367
|
+
c.m_masses[j] = BT_LARGE_FLOAT;
|
2368
|
+
} else
|
2369
|
+
{
|
2370
|
+
c.m_masses[j] = btScalar(1.)/c.m_nodes[j]->m_im;
|
2371
|
+
}
|
2372
|
+
c.m_imass += c.m_masses[j];
|
2373
|
+
}
|
2374
|
+
c.m_imass = btScalar(1.)/c.m_imass;
|
2375
|
+
c.m_com = btSoftBody::clusterCom(&c);
|
2376
|
+
c.m_lv = btVector3(0,0,0);
|
2377
|
+
c.m_av = btVector3(0,0,0);
|
2378
|
+
c.m_leaf = 0;
|
2379
|
+
/* Inertia */
|
2380
|
+
btMatrix3x3& ii=c.m_locii;
|
2381
|
+
ii[0]=ii[1]=ii[2]=btVector3(0,0,0);
|
2382
|
+
{
|
2383
|
+
int i,ni;
|
2384
|
+
|
2385
|
+
for(i=0,ni=c.m_nodes.size();i<ni;++i)
|
2386
|
+
{
|
2387
|
+
const btVector3 k=c.m_nodes[i]->m_x-c.m_com;
|
2388
|
+
const btVector3 q=k*k;
|
2389
|
+
const btScalar m=c.m_masses[i];
|
2390
|
+
ii[0][0] += m*(q[1]+q[2]);
|
2391
|
+
ii[1][1] += m*(q[0]+q[2]);
|
2392
|
+
ii[2][2] += m*(q[0]+q[1]);
|
2393
|
+
ii[0][1] -= m*k[0]*k[1];
|
2394
|
+
ii[0][2] -= m*k[0]*k[2];
|
2395
|
+
ii[1][2] -= m*k[1]*k[2];
|
2396
|
+
}
|
2397
|
+
}
|
2398
|
+
ii[1][0]=ii[0][1];
|
2399
|
+
ii[2][0]=ii[0][2];
|
2400
|
+
ii[2][1]=ii[1][2];
|
2401
|
+
|
2402
|
+
ii = ii.inverse();
|
2403
|
+
|
2404
|
+
/* Frame */
|
2405
|
+
c.m_framexform.setIdentity();
|
2406
|
+
c.m_framexform.setOrigin(c.m_com);
|
2407
|
+
c.m_framerefs.resize(c.m_nodes.size());
|
2408
|
+
{
|
2409
|
+
int i;
|
2410
|
+
for(i=0;i<c.m_framerefs.size();++i)
|
2411
|
+
{
|
2412
|
+
c.m_framerefs[i]=c.m_nodes[i]->m_x-c.m_com;
|
2413
|
+
}
|
2414
|
+
}
|
2415
|
+
}
|
2416
|
+
}
|
2417
|
+
|
2418
|
+
//
|
2419
|
+
void btSoftBody::updateClusters()
|
2420
|
+
{
|
2421
|
+
BT_PROFILE("UpdateClusters");
|
2422
|
+
int i;
|
2423
|
+
|
2424
|
+
for(i=0;i<m_clusters.size();++i)
|
2425
|
+
{
|
2426
|
+
btSoftBody::Cluster& c=*m_clusters[i];
|
2427
|
+
const int n=c.m_nodes.size();
|
2428
|
+
//const btScalar invn=1/(btScalar)n;
|
2429
|
+
if(n)
|
2430
|
+
{
|
2431
|
+
/* Frame */
|
2432
|
+
const btScalar eps=btScalar(0.0001);
|
2433
|
+
btMatrix3x3 m,r,s;
|
2434
|
+
m[0]=m[1]=m[2]=btVector3(0,0,0);
|
2435
|
+
m[0][0]=eps*1;
|
2436
|
+
m[1][1]=eps*2;
|
2437
|
+
m[2][2]=eps*3;
|
2438
|
+
c.m_com=clusterCom(&c);
|
2439
|
+
for(int i=0;i<c.m_nodes.size();++i)
|
2440
|
+
{
|
2441
|
+
const btVector3 a=c.m_nodes[i]->m_x-c.m_com;
|
2442
|
+
const btVector3& b=c.m_framerefs[i];
|
2443
|
+
m[0]+=a[0]*b;m[1]+=a[1]*b;m[2]+=a[2]*b;
|
2444
|
+
}
|
2445
|
+
PolarDecompose(m,r,s);
|
2446
|
+
c.m_framexform.setOrigin(c.m_com);
|
2447
|
+
c.m_framexform.setBasis(r);
|
2448
|
+
/* Inertia */
|
2449
|
+
#if 1/* Constant */
|
2450
|
+
c.m_invwi=c.m_framexform.getBasis()*c.m_locii*c.m_framexform.getBasis().transpose();
|
2451
|
+
#else
|
2452
|
+
#if 0/* Sphere */
|
2453
|
+
const btScalar rk=(2*c.m_extents.length2())/(5*c.m_imass);
|
2454
|
+
const btVector3 inertia(rk,rk,rk);
|
2455
|
+
const btVector3 iin(btFabs(inertia[0])>SIMD_EPSILON?1/inertia[0]:0,
|
2456
|
+
btFabs(inertia[1])>SIMD_EPSILON?1/inertia[1]:0,
|
2457
|
+
btFabs(inertia[2])>SIMD_EPSILON?1/inertia[2]:0);
|
2458
|
+
|
2459
|
+
c.m_invwi=c.m_xform.getBasis().scaled(iin)*c.m_xform.getBasis().transpose();
|
2460
|
+
#else/* Actual */
|
2461
|
+
c.m_invwi[0]=c.m_invwi[1]=c.m_invwi[2]=btVector3(0,0,0);
|
2462
|
+
for(int i=0;i<n;++i)
|
2463
|
+
{
|
2464
|
+
const btVector3 k=c.m_nodes[i]->m_x-c.m_com;
|
2465
|
+
const btVector3 q=k*k;
|
2466
|
+
const btScalar m=1/c.m_nodes[i]->m_im;
|
2467
|
+
c.m_invwi[0][0] += m*(q[1]+q[2]);
|
2468
|
+
c.m_invwi[1][1] += m*(q[0]+q[2]);
|
2469
|
+
c.m_invwi[2][2] += m*(q[0]+q[1]);
|
2470
|
+
c.m_invwi[0][1] -= m*k[0]*k[1];
|
2471
|
+
c.m_invwi[0][2] -= m*k[0]*k[2];
|
2472
|
+
c.m_invwi[1][2] -= m*k[1]*k[2];
|
2473
|
+
}
|
2474
|
+
c.m_invwi[1][0]=c.m_invwi[0][1];
|
2475
|
+
c.m_invwi[2][0]=c.m_invwi[0][2];
|
2476
|
+
c.m_invwi[2][1]=c.m_invwi[1][2];
|
2477
|
+
c.m_invwi=c.m_invwi.inverse();
|
2478
|
+
#endif
|
2479
|
+
#endif
|
2480
|
+
/* Velocities */
|
2481
|
+
c.m_lv=btVector3(0,0,0);
|
2482
|
+
c.m_av=btVector3(0,0,0);
|
2483
|
+
{
|
2484
|
+
int i;
|
2485
|
+
|
2486
|
+
for(i=0;i<n;++i)
|
2487
|
+
{
|
2488
|
+
const btVector3 v=c.m_nodes[i]->m_v*c.m_masses[i];
|
2489
|
+
c.m_lv += v;
|
2490
|
+
c.m_av += btCross(c.m_nodes[i]->m_x-c.m_com,v);
|
2491
|
+
}
|
2492
|
+
}
|
2493
|
+
c.m_lv=c.m_imass*c.m_lv*(1-c.m_ldamping);
|
2494
|
+
c.m_av=c.m_invwi*c.m_av*(1-c.m_adamping);
|
2495
|
+
c.m_vimpulses[0] =
|
2496
|
+
c.m_vimpulses[1] = btVector3(0,0,0);
|
2497
|
+
c.m_dimpulses[0] =
|
2498
|
+
c.m_dimpulses[1] = btVector3(0,0,0);
|
2499
|
+
c.m_nvimpulses = 0;
|
2500
|
+
c.m_ndimpulses = 0;
|
2501
|
+
/* Matching */
|
2502
|
+
if(c.m_matching>0)
|
2503
|
+
{
|
2504
|
+
for(int j=0;j<c.m_nodes.size();++j)
|
2505
|
+
{
|
2506
|
+
Node& n=*c.m_nodes[j];
|
2507
|
+
const btVector3 x=c.m_framexform*c.m_framerefs[j];
|
2508
|
+
n.m_x=Lerp(n.m_x,x,c.m_matching);
|
2509
|
+
}
|
2510
|
+
}
|
2511
|
+
/* Dbvt */
|
2512
|
+
if(c.m_collide)
|
2513
|
+
{
|
2514
|
+
btVector3 mi=c.m_nodes[0]->m_x;
|
2515
|
+
btVector3 mx=mi;
|
2516
|
+
for(int j=1;j<n;++j)
|
2517
|
+
{
|
2518
|
+
mi.setMin(c.m_nodes[j]->m_x);
|
2519
|
+
mx.setMax(c.m_nodes[j]->m_x);
|
2520
|
+
}
|
2521
|
+
ATTRIBUTE_ALIGNED16(btDbvtVolume) bounds=btDbvtVolume::FromMM(mi,mx);
|
2522
|
+
if(c.m_leaf)
|
2523
|
+
m_cdbvt.update(c.m_leaf,bounds,c.m_lv*m_sst.sdt*3,m_sst.radmrg);
|
2524
|
+
else
|
2525
|
+
c.m_leaf=m_cdbvt.insert(bounds,&c);
|
2526
|
+
}
|
2527
|
+
}
|
2528
|
+
}
|
2529
|
+
|
2530
|
+
|
2531
|
+
}
|
2532
|
+
|
2533
|
+
|
2534
|
+
|
2535
|
+
|
2536
|
+
//
|
2537
|
+
void btSoftBody::cleanupClusters()
|
2538
|
+
{
|
2539
|
+
for(int i=0;i<m_joints.size();++i)
|
2540
|
+
{
|
2541
|
+
m_joints[i]->Terminate(m_sst.sdt);
|
2542
|
+
if(m_joints[i]->m_delete)
|
2543
|
+
{
|
2544
|
+
btAlignedFree(m_joints[i]);
|
2545
|
+
m_joints.remove(m_joints[i--]);
|
2546
|
+
}
|
2547
|
+
}
|
2548
|
+
}
|
2549
|
+
|
2550
|
+
//
|
2551
|
+
void btSoftBody::prepareClusters(int iterations)
|
2552
|
+
{
|
2553
|
+
for(int i=0;i<m_joints.size();++i)
|
2554
|
+
{
|
2555
|
+
m_joints[i]->Prepare(m_sst.sdt,iterations);
|
2556
|
+
}
|
2557
|
+
}
|
2558
|
+
|
2559
|
+
|
2560
|
+
//
|
2561
|
+
void btSoftBody::solveClusters(btScalar sor)
|
2562
|
+
{
|
2563
|
+
for(int i=0,ni=m_joints.size();i<ni;++i)
|
2564
|
+
{
|
2565
|
+
m_joints[i]->Solve(m_sst.sdt,sor);
|
2566
|
+
}
|
2567
|
+
}
|
2568
|
+
|
2569
|
+
//
|
2570
|
+
void btSoftBody::applyClusters(bool drift)
|
2571
|
+
{
|
2572
|
+
BT_PROFILE("ApplyClusters");
|
2573
|
+
// const btScalar f0=m_sst.sdt;
|
2574
|
+
//const btScalar f1=f0/2;
|
2575
|
+
btAlignedObjectArray<btVector3> deltas;
|
2576
|
+
btAlignedObjectArray<btScalar> weights;
|
2577
|
+
deltas.resize(m_nodes.size(),btVector3(0,0,0));
|
2578
|
+
weights.resize(m_nodes.size(),0);
|
2579
|
+
int i;
|
2580
|
+
|
2581
|
+
if(drift)
|
2582
|
+
{
|
2583
|
+
for(i=0;i<m_clusters.size();++i)
|
2584
|
+
{
|
2585
|
+
Cluster& c=*m_clusters[i];
|
2586
|
+
if(c.m_ndimpulses)
|
2587
|
+
{
|
2588
|
+
c.m_dimpulses[0]/=(btScalar)c.m_ndimpulses;
|
2589
|
+
c.m_dimpulses[1]/=(btScalar)c.m_ndimpulses;
|
2590
|
+
}
|
2591
|
+
}
|
2592
|
+
}
|
2593
|
+
|
2594
|
+
for(i=0;i<m_clusters.size();++i)
|
2595
|
+
{
|
2596
|
+
Cluster& c=*m_clusters[i];
|
2597
|
+
if(0<(drift?c.m_ndimpulses:c.m_nvimpulses))
|
2598
|
+
{
|
2599
|
+
const btVector3 v=(drift?c.m_dimpulses[0]:c.m_vimpulses[0])*m_sst.sdt;
|
2600
|
+
const btVector3 w=(drift?c.m_dimpulses[1]:c.m_vimpulses[1])*m_sst.sdt;
|
2601
|
+
for(int j=0;j<c.m_nodes.size();++j)
|
2602
|
+
{
|
2603
|
+
const int idx=int(c.m_nodes[j]-&m_nodes[0]);
|
2604
|
+
const btVector3& x=c.m_nodes[j]->m_x;
|
2605
|
+
const btScalar q=c.m_masses[j];
|
2606
|
+
deltas[idx] += (v+btCross(w,x-c.m_com))*q;
|
2607
|
+
weights[idx] += q;
|
2608
|
+
}
|
2609
|
+
}
|
2610
|
+
}
|
2611
|
+
for(i=0;i<deltas.size();++i)
|
2612
|
+
{
|
2613
|
+
if(weights[i]>0)
|
2614
|
+
{
|
2615
|
+
m_nodes[i].m_x+=deltas[i]/weights[i];
|
2616
|
+
}
|
2617
|
+
}
|
2618
|
+
}
|
2619
|
+
|
2620
|
+
//
|
2621
|
+
void btSoftBody::dampClusters()
|
2622
|
+
{
|
2623
|
+
int i;
|
2624
|
+
|
2625
|
+
for(i=0;i<m_clusters.size();++i)
|
2626
|
+
{
|
2627
|
+
Cluster& c=*m_clusters[i];
|
2628
|
+
if(c.m_ndamping>0)
|
2629
|
+
{
|
2630
|
+
for(int j=0;j<c.m_nodes.size();++j)
|
2631
|
+
{
|
2632
|
+
Node& n=*c.m_nodes[j];
|
2633
|
+
if(n.m_im>0)
|
2634
|
+
{
|
2635
|
+
const btVector3 vx=c.m_lv+btCross(c.m_av,c.m_nodes[j]->m_q-c.m_com);
|
2636
|
+
if(vx.length2()<=n.m_v.length2())
|
2637
|
+
{
|
2638
|
+
n.m_v += c.m_ndamping*(vx-n.m_v);
|
2639
|
+
}
|
2640
|
+
}
|
2641
|
+
}
|
2642
|
+
}
|
2643
|
+
}
|
2644
|
+
}
|
2645
|
+
|
2646
|
+
//
|
2647
|
+
void btSoftBody::Joint::Prepare(btScalar dt,int)
|
2648
|
+
{
|
2649
|
+
m_bodies[0].activate();
|
2650
|
+
m_bodies[1].activate();
|
2651
|
+
}
|
2652
|
+
|
2653
|
+
//
|
2654
|
+
void btSoftBody::LJoint::Prepare(btScalar dt,int iterations)
|
2655
|
+
{
|
2656
|
+
static const btScalar maxdrift=4;
|
2657
|
+
Joint::Prepare(dt,iterations);
|
2658
|
+
m_rpos[0] = m_bodies[0].xform()*m_refs[0];
|
2659
|
+
m_rpos[1] = m_bodies[1].xform()*m_refs[1];
|
2660
|
+
m_drift = Clamp(m_rpos[0]-m_rpos[1],maxdrift)*m_erp/dt;
|
2661
|
+
m_rpos[0] -= m_bodies[0].xform().getOrigin();
|
2662
|
+
m_rpos[1] -= m_bodies[1].xform().getOrigin();
|
2663
|
+
m_massmatrix = ImpulseMatrix( m_bodies[0].invMass(),m_bodies[0].invWorldInertia(),m_rpos[0],
|
2664
|
+
m_bodies[1].invMass(),m_bodies[1].invWorldInertia(),m_rpos[1]);
|
2665
|
+
if(m_split>0)
|
2666
|
+
{
|
2667
|
+
m_sdrift = m_massmatrix*(m_drift*m_split);
|
2668
|
+
m_drift *= 1-m_split;
|
2669
|
+
}
|
2670
|
+
m_drift /=(btScalar)iterations;
|
2671
|
+
}
|
2672
|
+
|
2673
|
+
//
|
2674
|
+
void btSoftBody::LJoint::Solve(btScalar dt,btScalar sor)
|
2675
|
+
{
|
2676
|
+
const btVector3 va=m_bodies[0].velocity(m_rpos[0]);
|
2677
|
+
const btVector3 vb=m_bodies[1].velocity(m_rpos[1]);
|
2678
|
+
const btVector3 vr=va-vb;
|
2679
|
+
btSoftBody::Impulse impulse;
|
2680
|
+
impulse.m_asVelocity = 1;
|
2681
|
+
impulse.m_velocity = m_massmatrix*(m_drift+vr*m_cfm)*sor;
|
2682
|
+
m_bodies[0].applyImpulse(-impulse,m_rpos[0]);
|
2683
|
+
m_bodies[1].applyImpulse( impulse,m_rpos[1]);
|
2684
|
+
}
|
2685
|
+
|
2686
|
+
//
|
2687
|
+
void btSoftBody::LJoint::Terminate(btScalar dt)
|
2688
|
+
{
|
2689
|
+
if(m_split>0)
|
2690
|
+
{
|
2691
|
+
m_bodies[0].applyDImpulse(-m_sdrift,m_rpos[0]);
|
2692
|
+
m_bodies[1].applyDImpulse( m_sdrift,m_rpos[1]);
|
2693
|
+
}
|
2694
|
+
}
|
2695
|
+
|
2696
|
+
//
|
2697
|
+
void btSoftBody::AJoint::Prepare(btScalar dt,int iterations)
|
2698
|
+
{
|
2699
|
+
static const btScalar maxdrift=SIMD_PI/16;
|
2700
|
+
m_icontrol->Prepare(this);
|
2701
|
+
Joint::Prepare(dt,iterations);
|
2702
|
+
m_axis[0] = m_bodies[0].xform().getBasis()*m_refs[0];
|
2703
|
+
m_axis[1] = m_bodies[1].xform().getBasis()*m_refs[1];
|
2704
|
+
m_drift = NormalizeAny(btCross(m_axis[1],m_axis[0]));
|
2705
|
+
m_drift *= btMin(maxdrift,btAcos(Clamp<btScalar>(btDot(m_axis[0],m_axis[1]),-1,+1)));
|
2706
|
+
m_drift *= m_erp/dt;
|
2707
|
+
m_massmatrix= AngularImpulseMatrix(m_bodies[0].invWorldInertia(),m_bodies[1].invWorldInertia());
|
2708
|
+
if(m_split>0)
|
2709
|
+
{
|
2710
|
+
m_sdrift = m_massmatrix*(m_drift*m_split);
|
2711
|
+
m_drift *= 1-m_split;
|
2712
|
+
}
|
2713
|
+
m_drift /=(btScalar)iterations;
|
2714
|
+
}
|
2715
|
+
|
2716
|
+
//
|
2717
|
+
void btSoftBody::AJoint::Solve(btScalar dt,btScalar sor)
|
2718
|
+
{
|
2719
|
+
const btVector3 va=m_bodies[0].angularVelocity();
|
2720
|
+
const btVector3 vb=m_bodies[1].angularVelocity();
|
2721
|
+
const btVector3 vr=va-vb;
|
2722
|
+
const btScalar sp=btDot(vr,m_axis[0]);
|
2723
|
+
const btVector3 vc=vr-m_axis[0]*m_icontrol->Speed(this,sp);
|
2724
|
+
btSoftBody::Impulse impulse;
|
2725
|
+
impulse.m_asVelocity = 1;
|
2726
|
+
impulse.m_velocity = m_massmatrix*(m_drift+vc*m_cfm)*sor;
|
2727
|
+
m_bodies[0].applyAImpulse(-impulse);
|
2728
|
+
m_bodies[1].applyAImpulse( impulse);
|
2729
|
+
}
|
2730
|
+
|
2731
|
+
//
|
2732
|
+
void btSoftBody::AJoint::Terminate(btScalar dt)
|
2733
|
+
{
|
2734
|
+
if(m_split>0)
|
2735
|
+
{
|
2736
|
+
m_bodies[0].applyDAImpulse(-m_sdrift);
|
2737
|
+
m_bodies[1].applyDAImpulse( m_sdrift);
|
2738
|
+
}
|
2739
|
+
}
|
2740
|
+
|
2741
|
+
//
|
2742
|
+
void btSoftBody::CJoint::Prepare(btScalar dt,int iterations)
|
2743
|
+
{
|
2744
|
+
Joint::Prepare(dt,iterations);
|
2745
|
+
const bool dodrift=(m_life==0);
|
2746
|
+
m_delete=(++m_life)>m_maxlife;
|
2747
|
+
if(dodrift)
|
2748
|
+
{
|
2749
|
+
m_drift=m_drift*m_erp/dt;
|
2750
|
+
if(m_split>0)
|
2751
|
+
{
|
2752
|
+
m_sdrift = m_massmatrix*(m_drift*m_split);
|
2753
|
+
m_drift *= 1-m_split;
|
2754
|
+
}
|
2755
|
+
m_drift/=(btScalar)iterations;
|
2756
|
+
}
|
2757
|
+
else
|
2758
|
+
{
|
2759
|
+
m_drift=m_sdrift=btVector3(0,0,0);
|
2760
|
+
}
|
2761
|
+
}
|
2762
|
+
|
2763
|
+
//
|
2764
|
+
void btSoftBody::CJoint::Solve(btScalar dt,btScalar sor)
|
2765
|
+
{
|
2766
|
+
const btVector3 va=m_bodies[0].velocity(m_rpos[0]);
|
2767
|
+
const btVector3 vb=m_bodies[1].velocity(m_rpos[1]);
|
2768
|
+
const btVector3 vrel=va-vb;
|
2769
|
+
const btScalar rvac=btDot(vrel,m_normal);
|
2770
|
+
btSoftBody::Impulse impulse;
|
2771
|
+
impulse.m_asVelocity = 1;
|
2772
|
+
impulse.m_velocity = m_drift;
|
2773
|
+
if(rvac<0)
|
2774
|
+
{
|
2775
|
+
const btVector3 iv=m_normal*rvac;
|
2776
|
+
const btVector3 fv=vrel-iv;
|
2777
|
+
impulse.m_velocity += iv+fv*m_friction;
|
2778
|
+
}
|
2779
|
+
impulse.m_velocity=m_massmatrix*impulse.m_velocity*sor;
|
2780
|
+
|
2781
|
+
if (m_bodies[0].m_soft==m_bodies[1].m_soft)
|
2782
|
+
{
|
2783
|
+
if ((impulse.m_velocity.getX() ==impulse.m_velocity.getX())&&(impulse.m_velocity.getY() ==impulse.m_velocity.getY())&&
|
2784
|
+
(impulse.m_velocity.getZ() ==impulse.m_velocity.getZ()))
|
2785
|
+
{
|
2786
|
+
if (impulse.m_asVelocity)
|
2787
|
+
{
|
2788
|
+
if (impulse.m_velocity.length() <m_bodies[0].m_soft->m_maxSelfCollisionImpulse)
|
2789
|
+
{
|
2790
|
+
|
2791
|
+
} else
|
2792
|
+
{
|
2793
|
+
m_bodies[0].applyImpulse(-impulse*m_bodies[0].m_soft->m_selfCollisionImpulseFactor,m_rpos[0]);
|
2794
|
+
m_bodies[1].applyImpulse( impulse*m_bodies[0].m_soft->m_selfCollisionImpulseFactor,m_rpos[1]);
|
2795
|
+
}
|
2796
|
+
}
|
2797
|
+
}
|
2798
|
+
} else
|
2799
|
+
{
|
2800
|
+
m_bodies[0].applyImpulse(-impulse,m_rpos[0]);
|
2801
|
+
m_bodies[1].applyImpulse( impulse,m_rpos[1]);
|
2802
|
+
}
|
2803
|
+
}
|
2804
|
+
|
2805
|
+
//
|
2806
|
+
void btSoftBody::CJoint::Terminate(btScalar dt)
|
2807
|
+
{
|
2808
|
+
if(m_split>0)
|
2809
|
+
{
|
2810
|
+
m_bodies[0].applyDImpulse(-m_sdrift,m_rpos[0]);
|
2811
|
+
m_bodies[1].applyDImpulse( m_sdrift,m_rpos[1]);
|
2812
|
+
}
|
2813
|
+
}
|
2814
|
+
|
2815
|
+
//
|
2816
|
+
void btSoftBody::applyForces()
|
2817
|
+
{
|
2818
|
+
|
2819
|
+
BT_PROFILE("SoftBody applyForces");
|
2820
|
+
const btScalar dt = m_sst.sdt;
|
2821
|
+
const btScalar kLF = m_cfg.kLF;
|
2822
|
+
const btScalar kDG = m_cfg.kDG;
|
2823
|
+
const btScalar kPR = m_cfg.kPR;
|
2824
|
+
const btScalar kVC = m_cfg.kVC;
|
2825
|
+
const bool as_lift = kLF>0;
|
2826
|
+
const bool as_drag = kDG>0;
|
2827
|
+
const bool as_pressure = kPR!=0;
|
2828
|
+
const bool as_volume = kVC>0;
|
2829
|
+
const bool as_aero = as_lift ||
|
2830
|
+
as_drag ;
|
2831
|
+
const bool as_vaero = as_aero &&
|
2832
|
+
(m_cfg.aeromodel < btSoftBody::eAeroModel::F_TwoSided);
|
2833
|
+
const bool as_faero = as_aero &&
|
2834
|
+
(m_cfg.aeromodel >= btSoftBody::eAeroModel::F_TwoSided);
|
2835
|
+
const bool use_medium = as_aero;
|
2836
|
+
const bool use_volume = as_pressure ||
|
2837
|
+
as_volume ;
|
2838
|
+
btScalar volume = 0;
|
2839
|
+
btScalar ivolumetp = 0;
|
2840
|
+
btScalar dvolumetv = 0;
|
2841
|
+
btSoftBody::sMedium medium;
|
2842
|
+
if(use_volume)
|
2843
|
+
{
|
2844
|
+
volume = getVolume();
|
2845
|
+
ivolumetp = 1/btFabs(volume)*kPR;
|
2846
|
+
dvolumetv = (m_pose.m_volume-volume)*kVC;
|
2847
|
+
}
|
2848
|
+
/* Per vertex forces */
|
2849
|
+
int i,ni;
|
2850
|
+
|
2851
|
+
for(i=0,ni=m_nodes.size();i<ni;++i)
|
2852
|
+
{
|
2853
|
+
btSoftBody::Node& n=m_nodes[i];
|
2854
|
+
if(n.m_im>0)
|
2855
|
+
{
|
2856
|
+
if(use_medium)
|
2857
|
+
{
|
2858
|
+
/* Aerodynamics */
|
2859
|
+
addAeroForceToNode(m_windVelocity, i);
|
2860
|
+
}
|
2861
|
+
/* Pressure */
|
2862
|
+
if(as_pressure)
|
2863
|
+
{
|
2864
|
+
n.m_f += n.m_n*(n.m_area*ivolumetp);
|
2865
|
+
}
|
2866
|
+
/* Volume */
|
2867
|
+
if(as_volume)
|
2868
|
+
{
|
2869
|
+
n.m_f += n.m_n*(n.m_area*dvolumetv);
|
2870
|
+
}
|
2871
|
+
}
|
2872
|
+
}
|
2873
|
+
|
2874
|
+
/* Per face forces */
|
2875
|
+
for(i=0,ni=m_faces.size();i<ni;++i)
|
2876
|
+
{
|
2877
|
+
btSoftBody::Face& f=m_faces[i];
|
2878
|
+
|
2879
|
+
/* Aerodynamics */
|
2880
|
+
addAeroForceToFace(m_windVelocity, i);
|
2881
|
+
}
|
2882
|
+
}
|
2883
|
+
|
2884
|
+
//
|
2885
|
+
void btSoftBody::PSolve_Anchors(btSoftBody* psb,btScalar kst,btScalar ti)
|
2886
|
+
{
|
2887
|
+
const btScalar kAHR=psb->m_cfg.kAHR*kst;
|
2888
|
+
const btScalar dt=psb->m_sst.sdt;
|
2889
|
+
for(int i=0,ni=psb->m_anchors.size();i<ni;++i)
|
2890
|
+
{
|
2891
|
+
const Anchor& a=psb->m_anchors[i];
|
2892
|
+
const btTransform& t=a.m_body->getWorldTransform();
|
2893
|
+
Node& n=*a.m_node;
|
2894
|
+
const btVector3 wa=t*a.m_local;
|
2895
|
+
const btVector3 va=a.m_body->getVelocityInLocalPoint(a.m_c1)*dt;
|
2896
|
+
const btVector3 vb=n.m_x-n.m_q;
|
2897
|
+
const btVector3 vr=(va-vb)+(wa-n.m_x)*kAHR;
|
2898
|
+
const btVector3 impulse=a.m_c0*vr*a.m_influence;
|
2899
|
+
n.m_x+=impulse*a.m_c2;
|
2900
|
+
a.m_body->applyImpulse(-impulse,a.m_c1);
|
2901
|
+
}
|
2902
|
+
}
|
2903
|
+
|
2904
|
+
//
|
2905
|
+
void btSoftBody::PSolve_RContacts(btSoftBody* psb, btScalar kst, btScalar ti)
|
2906
|
+
{
|
2907
|
+
const btScalar dt = psb->m_sst.sdt;
|
2908
|
+
const btScalar mrg = psb->getCollisionShape()->getMargin();
|
2909
|
+
for(int i=0,ni=psb->m_rcontacts.size();i<ni;++i)
|
2910
|
+
{
|
2911
|
+
const RContact& c = psb->m_rcontacts[i];
|
2912
|
+
const sCti& cti = c.m_cti;
|
2913
|
+
btRigidBody* tmpRigid = btRigidBody::upcast(cti.m_colObj);
|
2914
|
+
|
2915
|
+
const btVector3 va = tmpRigid ? tmpRigid->getVelocityInLocalPoint(c.m_c1)*dt : btVector3(0,0,0);
|
2916
|
+
const btVector3 vb = c.m_node->m_x-c.m_node->m_q;
|
2917
|
+
const btVector3 vr = vb-va;
|
2918
|
+
const btScalar dn = btDot(vr, cti.m_normal);
|
2919
|
+
if(dn<=SIMD_EPSILON)
|
2920
|
+
{
|
2921
|
+
const btScalar dp = btMin( (btDot(c.m_node->m_x, cti.m_normal) + cti.m_offset), mrg );
|
2922
|
+
const btVector3 fv = vr - (cti.m_normal * dn);
|
2923
|
+
// c0 is the impulse matrix, c3 is 1 - the friction coefficient or 0, c4 is the contact hardness coefficient
|
2924
|
+
const btVector3 impulse = c.m_c0 * ( (vr - (fv * c.m_c3) + (cti.m_normal * (dp * c.m_c4))) * kst );
|
2925
|
+
c.m_node->m_x -= impulse * c.m_c2;
|
2926
|
+
if (tmpRigid)
|
2927
|
+
tmpRigid->applyImpulse(impulse,c.m_c1);
|
2928
|
+
}
|
2929
|
+
}
|
2930
|
+
}
|
2931
|
+
|
2932
|
+
//
|
2933
|
+
void btSoftBody::PSolve_SContacts(btSoftBody* psb,btScalar,btScalar ti)
|
2934
|
+
{
|
2935
|
+
for(int i=0,ni=psb->m_scontacts.size();i<ni;++i)
|
2936
|
+
{
|
2937
|
+
const SContact& c=psb->m_scontacts[i];
|
2938
|
+
const btVector3& nr=c.m_normal;
|
2939
|
+
Node& n=*c.m_node;
|
2940
|
+
Face& f=*c.m_face;
|
2941
|
+
const btVector3 p=BaryEval( f.m_n[0]->m_x,
|
2942
|
+
f.m_n[1]->m_x,
|
2943
|
+
f.m_n[2]->m_x,
|
2944
|
+
c.m_weights);
|
2945
|
+
const btVector3 q=BaryEval( f.m_n[0]->m_q,
|
2946
|
+
f.m_n[1]->m_q,
|
2947
|
+
f.m_n[2]->m_q,
|
2948
|
+
c.m_weights);
|
2949
|
+
const btVector3 vr=(n.m_x-n.m_q)-(p-q);
|
2950
|
+
btVector3 corr(0,0,0);
|
2951
|
+
btScalar dot = btDot(vr,nr);
|
2952
|
+
if(dot<0)
|
2953
|
+
{
|
2954
|
+
const btScalar j=c.m_margin-(btDot(nr,n.m_x)-btDot(nr,p));
|
2955
|
+
corr+=c.m_normal*j;
|
2956
|
+
}
|
2957
|
+
corr -= ProjectOnPlane(vr,nr)*c.m_friction;
|
2958
|
+
n.m_x += corr*c.m_cfm[0];
|
2959
|
+
f.m_n[0]->m_x -= corr*(c.m_cfm[1]*c.m_weights.x());
|
2960
|
+
f.m_n[1]->m_x -= corr*(c.m_cfm[1]*c.m_weights.y());
|
2961
|
+
f.m_n[2]->m_x -= corr*(c.m_cfm[1]*c.m_weights.z());
|
2962
|
+
}
|
2963
|
+
}
|
2964
|
+
|
2965
|
+
//
|
2966
|
+
void btSoftBody::PSolve_Links(btSoftBody* psb,btScalar kst,btScalar ti)
|
2967
|
+
{
|
2968
|
+
for(int i=0,ni=psb->m_links.size();i<ni;++i)
|
2969
|
+
{
|
2970
|
+
Link& l=psb->m_links[i];
|
2971
|
+
if(l.m_c0>0)
|
2972
|
+
{
|
2973
|
+
Node& a=*l.m_n[0];
|
2974
|
+
Node& b=*l.m_n[1];
|
2975
|
+
const btVector3 del=b.m_x-a.m_x;
|
2976
|
+
const btScalar len=del.length2();
|
2977
|
+
if (l.m_c1+len > SIMD_EPSILON)
|
2978
|
+
{
|
2979
|
+
const btScalar k=((l.m_c1-len)/(l.m_c0*(l.m_c1+len)))*kst;
|
2980
|
+
a.m_x-=del*(k*a.m_im);
|
2981
|
+
b.m_x+=del*(k*b.m_im);
|
2982
|
+
}
|
2983
|
+
}
|
2984
|
+
}
|
2985
|
+
}
|
2986
|
+
|
2987
|
+
//
|
2988
|
+
void btSoftBody::VSolve_Links(btSoftBody* psb,btScalar kst)
|
2989
|
+
{
|
2990
|
+
for(int i=0,ni=psb->m_links.size();i<ni;++i)
|
2991
|
+
{
|
2992
|
+
Link& l=psb->m_links[i];
|
2993
|
+
Node** n=l.m_n;
|
2994
|
+
const btScalar j=-btDot(l.m_c3,n[0]->m_v-n[1]->m_v)*l.m_c2*kst;
|
2995
|
+
n[0]->m_v+= l.m_c3*(j*n[0]->m_im);
|
2996
|
+
n[1]->m_v-= l.m_c3*(j*n[1]->m_im);
|
2997
|
+
}
|
2998
|
+
}
|
2999
|
+
|
3000
|
+
//
|
3001
|
+
btSoftBody::psolver_t btSoftBody::getSolver(ePSolver::_ solver)
|
3002
|
+
{
|
3003
|
+
switch(solver)
|
3004
|
+
{
|
3005
|
+
case ePSolver::Anchors:
|
3006
|
+
return(&btSoftBody::PSolve_Anchors);
|
3007
|
+
case ePSolver::Linear:
|
3008
|
+
return(&btSoftBody::PSolve_Links);
|
3009
|
+
case ePSolver::RContacts:
|
3010
|
+
return(&btSoftBody::PSolve_RContacts);
|
3011
|
+
case ePSolver::SContacts:
|
3012
|
+
return(&btSoftBody::PSolve_SContacts);
|
3013
|
+
default:
|
3014
|
+
{
|
3015
|
+
}
|
3016
|
+
}
|
3017
|
+
return(0);
|
3018
|
+
}
|
3019
|
+
|
3020
|
+
//
|
3021
|
+
btSoftBody::vsolver_t btSoftBody::getSolver(eVSolver::_ solver)
|
3022
|
+
{
|
3023
|
+
switch(solver)
|
3024
|
+
{
|
3025
|
+
case eVSolver::Linear: return(&btSoftBody::VSolve_Links);
|
3026
|
+
default:
|
3027
|
+
{
|
3028
|
+
}
|
3029
|
+
}
|
3030
|
+
return(0);
|
3031
|
+
}
|
3032
|
+
|
3033
|
+
//
|
3034
|
+
void btSoftBody::defaultCollisionHandler(btCollisionObject* pco)
|
3035
|
+
{
|
3036
|
+
|
3037
|
+
switch(m_cfg.collisions&fCollision::RVSmask)
|
3038
|
+
{
|
3039
|
+
case fCollision::SDF_RS:
|
3040
|
+
{
|
3041
|
+
btSoftColliders::CollideSDF_RS docollide;
|
3042
|
+
btRigidBody* prb1=btRigidBody::upcast(pco);
|
3043
|
+
btTransform wtr=pco->getWorldTransform();
|
3044
|
+
|
3045
|
+
const btTransform ctr=pco->getWorldTransform();
|
3046
|
+
const btScalar timemargin=(wtr.getOrigin()-ctr.getOrigin()).length();
|
3047
|
+
const btScalar basemargin=getCollisionShape()->getMargin();
|
3048
|
+
btVector3 mins;
|
3049
|
+
btVector3 maxs;
|
3050
|
+
ATTRIBUTE_ALIGNED16(btDbvtVolume) volume;
|
3051
|
+
pco->getCollisionShape()->getAabb( pco->getWorldTransform(),
|
3052
|
+
mins,
|
3053
|
+
maxs);
|
3054
|
+
volume=btDbvtVolume::FromMM(mins,maxs);
|
3055
|
+
volume.Expand(btVector3(basemargin,basemargin,basemargin));
|
3056
|
+
docollide.psb = this;
|
3057
|
+
docollide.m_colObj1 = pco;
|
3058
|
+
docollide.m_rigidBody = prb1;
|
3059
|
+
|
3060
|
+
docollide.dynmargin = basemargin+timemargin;
|
3061
|
+
docollide.stamargin = basemargin;
|
3062
|
+
m_ndbvt.collideTV(m_ndbvt.m_root,volume,docollide);
|
3063
|
+
}
|
3064
|
+
break;
|
3065
|
+
case fCollision::CL_RS:
|
3066
|
+
{
|
3067
|
+
btSoftColliders::CollideCL_RS collider;
|
3068
|
+
collider.Process(this,pco);
|
3069
|
+
}
|
3070
|
+
break;
|
3071
|
+
}
|
3072
|
+
}
|
3073
|
+
|
3074
|
+
//
|
3075
|
+
void btSoftBody::defaultCollisionHandler(btSoftBody* psb)
|
3076
|
+
{
|
3077
|
+
const int cf=m_cfg.collisions&psb->m_cfg.collisions;
|
3078
|
+
switch(cf&fCollision::SVSmask)
|
3079
|
+
{
|
3080
|
+
case fCollision::CL_SS:
|
3081
|
+
{
|
3082
|
+
|
3083
|
+
//support self-collision if CL_SELF flag set
|
3084
|
+
if (this!=psb || psb->m_cfg.collisions&fCollision::CL_SELF)
|
3085
|
+
{
|
3086
|
+
btSoftColliders::CollideCL_SS docollide;
|
3087
|
+
docollide.Process(this,psb);
|
3088
|
+
}
|
3089
|
+
|
3090
|
+
}
|
3091
|
+
break;
|
3092
|
+
case fCollision::VF_SS:
|
3093
|
+
{
|
3094
|
+
//only self-collision for Cluster, not Vertex-Face yet
|
3095
|
+
if (this!=psb)
|
3096
|
+
{
|
3097
|
+
btSoftColliders::CollideVF_SS docollide;
|
3098
|
+
/* common */
|
3099
|
+
docollide.mrg= getCollisionShape()->getMargin()+
|
3100
|
+
psb->getCollisionShape()->getMargin();
|
3101
|
+
/* psb0 nodes vs psb1 faces */
|
3102
|
+
docollide.psb[0]=this;
|
3103
|
+
docollide.psb[1]=psb;
|
3104
|
+
docollide.psb[0]->m_ndbvt.collideTT( docollide.psb[0]->m_ndbvt.m_root,
|
3105
|
+
docollide.psb[1]->m_fdbvt.m_root,
|
3106
|
+
docollide);
|
3107
|
+
/* psb1 nodes vs psb0 faces */
|
3108
|
+
docollide.psb[0]=psb;
|
3109
|
+
docollide.psb[1]=this;
|
3110
|
+
docollide.psb[0]->m_ndbvt.collideTT( docollide.psb[0]->m_ndbvt.m_root,
|
3111
|
+
docollide.psb[1]->m_fdbvt.m_root,
|
3112
|
+
docollide);
|
3113
|
+
}
|
3114
|
+
}
|
3115
|
+
break;
|
3116
|
+
default:
|
3117
|
+
{
|
3118
|
+
|
3119
|
+
}
|
3120
|
+
}
|
3121
|
+
}
|
3122
|
+
|
3123
|
+
|
3124
|
+
|
3125
|
+
void btSoftBody::setWindVelocity( const btVector3 &velocity )
|
3126
|
+
{
|
3127
|
+
m_windVelocity = velocity;
|
3128
|
+
}
|
3129
|
+
|
3130
|
+
|
3131
|
+
const btVector3& btSoftBody::getWindVelocity()
|
3132
|
+
{
|
3133
|
+
return m_windVelocity;
|
3134
|
+
}
|
3135
|
+
|
3136
|
+
|
3137
|
+
|
3138
|
+
int btSoftBody::calculateSerializeBufferSize() const
|
3139
|
+
{
|
3140
|
+
int sz = sizeof(btSoftBodyData);
|
3141
|
+
return sz;
|
3142
|
+
}
|
3143
|
+
|
3144
|
+
///fills the dataBuffer and returns the struct name (and 0 on failure)
|
3145
|
+
const char* btSoftBody::serialize(void* dataBuffer, class btSerializer* serializer) const
|
3146
|
+
{
|
3147
|
+
btSoftBodyData* sbd = (btSoftBodyData*) dataBuffer;
|
3148
|
+
|
3149
|
+
btCollisionObject::serialize(&sbd->m_collisionObjectData, serializer);
|
3150
|
+
|
3151
|
+
btHashMap<btHashPtr,int> m_nodeIndexMap;
|
3152
|
+
|
3153
|
+
sbd->m_numMaterials = m_materials.size();
|
3154
|
+
sbd->m_materials = sbd->m_numMaterials? (SoftBodyMaterialData**) serializer->getUniquePointer((void*)&m_materials): 0;
|
3155
|
+
|
3156
|
+
if (sbd->m_materials)
|
3157
|
+
{
|
3158
|
+
int sz = sizeof(SoftBodyMaterialData*);
|
3159
|
+
int numElem = sbd->m_numMaterials;
|
3160
|
+
btChunk* chunk = serializer->allocate(sz,numElem);
|
3161
|
+
//SoftBodyMaterialData** memPtr = chunk->m_oldPtr;
|
3162
|
+
SoftBodyMaterialData** memPtr = (SoftBodyMaterialData**)chunk->m_oldPtr;
|
3163
|
+
for (int i=0;i<numElem;i++,memPtr++)
|
3164
|
+
{
|
3165
|
+
btSoftBody::Material* mat = m_materials[i];
|
3166
|
+
*memPtr = mat ? (SoftBodyMaterialData*)serializer->getUniquePointer((void*)mat) : 0;
|
3167
|
+
if (!serializer->findPointer(mat))
|
3168
|
+
{
|
3169
|
+
//serialize it here
|
3170
|
+
btChunk* chunk = serializer->allocate(sizeof(SoftBodyMaterialData),1);
|
3171
|
+
SoftBodyMaterialData* memPtr = (SoftBodyMaterialData*)chunk->m_oldPtr;
|
3172
|
+
memPtr->m_flags = mat->m_flags;
|
3173
|
+
memPtr->m_angularStiffness = mat->m_kAST;
|
3174
|
+
memPtr->m_linearStiffness = mat->m_kLST;
|
3175
|
+
memPtr->m_volumeStiffness = mat->m_kVST;
|
3176
|
+
serializer->finalizeChunk(chunk,"SoftBodyMaterialData",BT_SBMATERIAL_CODE,mat);
|
3177
|
+
}
|
3178
|
+
}
|
3179
|
+
serializer->finalizeChunk(chunk,"SoftBodyMaterialData",BT_ARRAY_CODE,(void*) &m_materials);
|
3180
|
+
}
|
3181
|
+
|
3182
|
+
|
3183
|
+
|
3184
|
+
|
3185
|
+
sbd->m_numNodes = m_nodes.size();
|
3186
|
+
sbd->m_nodes = sbd->m_numNodes ? (SoftBodyNodeData*)serializer->getUniquePointer((void*)&m_nodes): 0;
|
3187
|
+
if (sbd->m_nodes)
|
3188
|
+
{
|
3189
|
+
int sz = sizeof(SoftBodyNodeData);
|
3190
|
+
int numElem = sbd->m_numNodes;
|
3191
|
+
btChunk* chunk = serializer->allocate(sz,numElem);
|
3192
|
+
SoftBodyNodeData* memPtr = (SoftBodyNodeData*)chunk->m_oldPtr;
|
3193
|
+
for (int i=0;i<numElem;i++,memPtr++)
|
3194
|
+
{
|
3195
|
+
m_nodes[i].m_f.serializeFloat( memPtr->m_accumulatedForce);
|
3196
|
+
memPtr->m_area = m_nodes[i].m_area;
|
3197
|
+
memPtr->m_attach = m_nodes[i].m_battach;
|
3198
|
+
memPtr->m_inverseMass = m_nodes[i].m_im;
|
3199
|
+
memPtr->m_material = m_nodes[i].m_material? (SoftBodyMaterialData*)serializer->getUniquePointer((void*) m_nodes[i].m_material):0;
|
3200
|
+
m_nodes[i].m_n.serializeFloat(memPtr->m_normal);
|
3201
|
+
m_nodes[i].m_x.serializeFloat(memPtr->m_position);
|
3202
|
+
m_nodes[i].m_q.serializeFloat(memPtr->m_previousPosition);
|
3203
|
+
m_nodes[i].m_v.serializeFloat(memPtr->m_velocity);
|
3204
|
+
m_nodeIndexMap.insert(&m_nodes[i],i);
|
3205
|
+
}
|
3206
|
+
serializer->finalizeChunk(chunk,"SoftBodyNodeData",BT_SBNODE_CODE,(void*) &m_nodes);
|
3207
|
+
}
|
3208
|
+
|
3209
|
+
sbd->m_numLinks = m_links.size();
|
3210
|
+
sbd->m_links = sbd->m_numLinks? (SoftBodyLinkData*) serializer->getUniquePointer((void*)&m_links[0]):0;
|
3211
|
+
if (sbd->m_links)
|
3212
|
+
{
|
3213
|
+
int sz = sizeof(SoftBodyLinkData);
|
3214
|
+
int numElem = sbd->m_numLinks;
|
3215
|
+
btChunk* chunk = serializer->allocate(sz,numElem);
|
3216
|
+
SoftBodyLinkData* memPtr = (SoftBodyLinkData*)chunk->m_oldPtr;
|
3217
|
+
for (int i=0;i<numElem;i++,memPtr++)
|
3218
|
+
{
|
3219
|
+
memPtr->m_bbending = m_links[i].m_bbending;
|
3220
|
+
memPtr->m_material = m_links[i].m_material? (SoftBodyMaterialData*)serializer->getUniquePointer((void*) m_links[i].m_material):0;
|
3221
|
+
memPtr->m_nodeIndices[0] = m_links[i].m_n[0] ? m_links[i].m_n[0] - &m_nodes[0]: -1;
|
3222
|
+
memPtr->m_nodeIndices[1] = m_links[i].m_n[1] ? m_links[i].m_n[1] - &m_nodes[0]: -1;
|
3223
|
+
btAssert(memPtr->m_nodeIndices[0]<m_nodes.size());
|
3224
|
+
btAssert(memPtr->m_nodeIndices[1]<m_nodes.size());
|
3225
|
+
memPtr->m_restLength = m_links[i].m_rl;
|
3226
|
+
}
|
3227
|
+
serializer->finalizeChunk(chunk,"SoftBodyLinkData",BT_ARRAY_CODE,(void*) &m_links[0]);
|
3228
|
+
|
3229
|
+
}
|
3230
|
+
|
3231
|
+
|
3232
|
+
sbd->m_numFaces = m_faces.size();
|
3233
|
+
sbd->m_faces = sbd->m_numFaces? (SoftBodyFaceData*) serializer->getUniquePointer((void*)&m_faces[0]):0;
|
3234
|
+
if (sbd->m_faces)
|
3235
|
+
{
|
3236
|
+
int sz = sizeof(SoftBodyFaceData);
|
3237
|
+
int numElem = sbd->m_numFaces;
|
3238
|
+
btChunk* chunk = serializer->allocate(sz,numElem);
|
3239
|
+
SoftBodyFaceData* memPtr = (SoftBodyFaceData*)chunk->m_oldPtr;
|
3240
|
+
for (int i=0;i<numElem;i++,memPtr++)
|
3241
|
+
{
|
3242
|
+
memPtr->m_material = m_faces[i].m_material ? (SoftBodyMaterialData*) serializer->getUniquePointer((void*)m_faces[i].m_material): 0;
|
3243
|
+
m_faces[i].m_normal.serializeFloat( memPtr->m_normal);
|
3244
|
+
for (int j=0;j<3;j++)
|
3245
|
+
{
|
3246
|
+
memPtr->m_nodeIndices[j] = m_faces[i].m_n[j]? m_faces[i].m_n[j] - &m_nodes[0]: -1;
|
3247
|
+
}
|
3248
|
+
memPtr->m_restArea = m_faces[i].m_ra;
|
3249
|
+
}
|
3250
|
+
serializer->finalizeChunk(chunk,"SoftBodyFaceData",BT_ARRAY_CODE,(void*) &m_faces[0]);
|
3251
|
+
}
|
3252
|
+
|
3253
|
+
|
3254
|
+
sbd->m_numTetrahedra = m_tetras.size();
|
3255
|
+
sbd->m_tetrahedra = sbd->m_numTetrahedra ? (SoftBodyTetraData*) serializer->getUniquePointer((void*)&m_tetras[0]):0;
|
3256
|
+
if (sbd->m_tetrahedra)
|
3257
|
+
{
|
3258
|
+
int sz = sizeof(SoftBodyTetraData);
|
3259
|
+
int numElem = sbd->m_numTetrahedra;
|
3260
|
+
btChunk* chunk = serializer->allocate(sz,numElem);
|
3261
|
+
SoftBodyTetraData* memPtr = (SoftBodyTetraData*)chunk->m_oldPtr;
|
3262
|
+
for (int i=0;i<numElem;i++,memPtr++)
|
3263
|
+
{
|
3264
|
+
for (int j=0;j<4;j++)
|
3265
|
+
{
|
3266
|
+
m_tetras[i].m_c0[j].serializeFloat( memPtr->m_c0[j] );
|
3267
|
+
memPtr->m_nodeIndices[j] = m_tetras[j].m_n[j]? m_tetras[j].m_n[j]-&m_nodes[0] : -1;
|
3268
|
+
}
|
3269
|
+
memPtr->m_c1 = m_tetras[i].m_c1;
|
3270
|
+
memPtr->m_c2 = m_tetras[i].m_c2;
|
3271
|
+
memPtr->m_material = m_tetras[i].m_material ? (SoftBodyMaterialData*)serializer->getUniquePointer((void*) m_tetras[i].m_material): 0;
|
3272
|
+
memPtr->m_restVolume = m_tetras[i].m_rv;
|
3273
|
+
}
|
3274
|
+
serializer->finalizeChunk(chunk,"SoftBodyTetraData",BT_ARRAY_CODE,(void*) &m_tetras[0]);
|
3275
|
+
}
|
3276
|
+
|
3277
|
+
sbd->m_numAnchors = m_anchors.size();
|
3278
|
+
sbd->m_anchors = sbd->m_numAnchors ? (SoftRigidAnchorData*) serializer->getUniquePointer((void*)&m_anchors[0]):0;
|
3279
|
+
if (sbd->m_anchors)
|
3280
|
+
{
|
3281
|
+
int sz = sizeof(SoftRigidAnchorData);
|
3282
|
+
int numElem = sbd->m_numAnchors;
|
3283
|
+
btChunk* chunk = serializer->allocate(sz,numElem);
|
3284
|
+
SoftRigidAnchorData* memPtr = (SoftRigidAnchorData*)chunk->m_oldPtr;
|
3285
|
+
for (int i=0;i<numElem;i++,memPtr++)
|
3286
|
+
{
|
3287
|
+
m_anchors[i].m_c0.serializeFloat(memPtr->m_c0);
|
3288
|
+
m_anchors[i].m_c1.serializeFloat(memPtr->m_c1);
|
3289
|
+
memPtr->m_c2 = m_anchors[i].m_c2;
|
3290
|
+
m_anchors[i].m_local.serializeFloat(memPtr->m_localFrame);
|
3291
|
+
memPtr->m_nodeIndex = m_anchors[i].m_node? m_anchors[i].m_node-&m_nodes[0]: -1;
|
3292
|
+
|
3293
|
+
memPtr->m_rigidBody = m_anchors[i].m_body? (btRigidBodyData*) serializer->getUniquePointer((void*)m_anchors[i].m_body): 0;
|
3294
|
+
btAssert(memPtr->m_nodeIndex < m_nodes.size());
|
3295
|
+
}
|
3296
|
+
serializer->finalizeChunk(chunk,"SoftRigidAnchorData",BT_ARRAY_CODE,(void*) &m_anchors[0]);
|
3297
|
+
}
|
3298
|
+
|
3299
|
+
|
3300
|
+
sbd->m_config.m_dynamicFriction = m_cfg.kDF;
|
3301
|
+
sbd->m_config.m_baumgarte = m_cfg.kVCF;
|
3302
|
+
sbd->m_config.m_pressure = m_cfg.kPR;
|
3303
|
+
sbd->m_config.m_aeroModel = this->m_cfg.aeromodel;
|
3304
|
+
sbd->m_config.m_lift = m_cfg.kLF;
|
3305
|
+
sbd->m_config.m_drag = m_cfg.kDG;
|
3306
|
+
sbd->m_config.m_positionIterations = m_cfg.piterations;
|
3307
|
+
sbd->m_config.m_driftIterations = m_cfg.diterations;
|
3308
|
+
sbd->m_config.m_clusterIterations = m_cfg.citerations;
|
3309
|
+
sbd->m_config.m_velocityIterations = m_cfg.viterations;
|
3310
|
+
sbd->m_config.m_maxVolume = m_cfg.maxvolume;
|
3311
|
+
sbd->m_config.m_damping = m_cfg.kDP;
|
3312
|
+
sbd->m_config.m_poseMatch = m_cfg.kMT;
|
3313
|
+
sbd->m_config.m_collisionFlags = m_cfg.collisions;
|
3314
|
+
sbd->m_config.m_volume = m_cfg.kVC;
|
3315
|
+
sbd->m_config.m_rigidContactHardness = m_cfg.kCHR;
|
3316
|
+
sbd->m_config.m_kineticContactHardness = m_cfg.kKHR;
|
3317
|
+
sbd->m_config.m_softContactHardness = m_cfg.kSHR;
|
3318
|
+
sbd->m_config.m_anchorHardness = m_cfg.kAHR;
|
3319
|
+
sbd->m_config.m_timeScale = m_cfg.timescale;
|
3320
|
+
sbd->m_config.m_maxVolume = m_cfg.maxvolume;
|
3321
|
+
sbd->m_config.m_softRigidClusterHardness = m_cfg.kSRHR_CL;
|
3322
|
+
sbd->m_config.m_softKineticClusterHardness = m_cfg.kSKHR_CL;
|
3323
|
+
sbd->m_config.m_softSoftClusterHardness = m_cfg.kSSHR_CL;
|
3324
|
+
sbd->m_config.m_softRigidClusterImpulseSplit = m_cfg.kSR_SPLT_CL;
|
3325
|
+
sbd->m_config.m_softKineticClusterImpulseSplit = m_cfg.kSK_SPLT_CL;
|
3326
|
+
sbd->m_config.m_softSoftClusterImpulseSplit = m_cfg.kSS_SPLT_CL;
|
3327
|
+
|
3328
|
+
//pose for shape matching
|
3329
|
+
{
|
3330
|
+
sbd->m_pose = (SoftBodyPoseData*)serializer->getUniquePointer((void*)&m_pose);
|
3331
|
+
|
3332
|
+
int sz = sizeof(SoftBodyPoseData);
|
3333
|
+
btChunk* chunk = serializer->allocate(sz,1);
|
3334
|
+
SoftBodyPoseData* memPtr = (SoftBodyPoseData*)chunk->m_oldPtr;
|
3335
|
+
|
3336
|
+
m_pose.m_aqq.serializeFloat(memPtr->m_aqq);
|
3337
|
+
memPtr->m_bframe = m_pose.m_bframe;
|
3338
|
+
memPtr->m_bvolume = m_pose.m_bvolume;
|
3339
|
+
m_pose.m_com.serializeFloat(memPtr->m_com);
|
3340
|
+
|
3341
|
+
memPtr->m_numPositions = m_pose.m_pos.size();
|
3342
|
+
memPtr->m_positions = memPtr->m_numPositions ? (btVector3FloatData*)serializer->getUniquePointer((void*)&m_pose.m_pos[0]): 0;
|
3343
|
+
if (memPtr->m_numPositions)
|
3344
|
+
{
|
3345
|
+
int numElem = memPtr->m_numPositions;
|
3346
|
+
int sz = sizeof(btVector3Data);
|
3347
|
+
btChunk* chunk = serializer->allocate(sz,numElem);
|
3348
|
+
btVector3FloatData* memPtr = (btVector3FloatData*)chunk->m_oldPtr;
|
3349
|
+
for (int i=0;i<numElem;i++,memPtr++)
|
3350
|
+
{
|
3351
|
+
m_pose.m_pos[i].serializeFloat(*memPtr);
|
3352
|
+
}
|
3353
|
+
serializer->finalizeChunk(chunk,"btVector3FloatData",BT_ARRAY_CODE,(void*)&m_pose.m_pos[0]);
|
3354
|
+
}
|
3355
|
+
memPtr->m_restVolume = m_pose.m_volume;
|
3356
|
+
m_pose.m_rot.serializeFloat(memPtr->m_rot);
|
3357
|
+
m_pose.m_scl.serializeFloat(memPtr->m_scale);
|
3358
|
+
|
3359
|
+
memPtr->m_numWeigts = m_pose.m_wgh.size();
|
3360
|
+
memPtr->m_weights = memPtr->m_numWeigts? (float*) serializer->getUniquePointer((void*) &m_pose.m_wgh[0]) : 0;
|
3361
|
+
if (memPtr->m_numWeigts)
|
3362
|
+
{
|
3363
|
+
|
3364
|
+
int numElem = memPtr->m_numWeigts;
|
3365
|
+
int sz = sizeof(float);
|
3366
|
+
btChunk* chunk = serializer->allocate(sz,numElem);
|
3367
|
+
float* memPtr = (float*) chunk->m_oldPtr;
|
3368
|
+
for (int i=0;i<numElem;i++,memPtr++)
|
3369
|
+
{
|
3370
|
+
*memPtr = m_pose.m_wgh[i];
|
3371
|
+
}
|
3372
|
+
serializer->finalizeChunk(chunk,"float",BT_ARRAY_CODE,(void*)&m_pose.m_wgh[0]);
|
3373
|
+
}
|
3374
|
+
|
3375
|
+
serializer->finalizeChunk(chunk,"SoftBodyPoseData",BT_ARRAY_CODE,(void*)&m_pose);
|
3376
|
+
}
|
3377
|
+
|
3378
|
+
//clusters for convex-cluster collision detection
|
3379
|
+
|
3380
|
+
sbd->m_numClusters = m_clusters.size();
|
3381
|
+
sbd->m_clusters = sbd->m_numClusters? (SoftBodyClusterData*) serializer->getUniquePointer((void*)m_clusters[0]) : 0;
|
3382
|
+
if (sbd->m_numClusters)
|
3383
|
+
{
|
3384
|
+
int numElem = sbd->m_numClusters;
|
3385
|
+
int sz = sizeof(SoftBodyClusterData);
|
3386
|
+
btChunk* chunk = serializer->allocate(sz,numElem);
|
3387
|
+
SoftBodyClusterData* memPtr = (SoftBodyClusterData*) chunk->m_oldPtr;
|
3388
|
+
for (int i=0;i<numElem;i++,memPtr++)
|
3389
|
+
{
|
3390
|
+
memPtr->m_adamping= m_clusters[i]->m_adamping;
|
3391
|
+
m_clusters[i]->m_av.serializeFloat(memPtr->m_av);
|
3392
|
+
memPtr->m_clusterIndex = m_clusters[i]->m_clusterIndex;
|
3393
|
+
memPtr->m_collide = m_clusters[i]->m_collide;
|
3394
|
+
m_clusters[i]->m_com.serializeFloat(memPtr->m_com);
|
3395
|
+
memPtr->m_containsAnchor = m_clusters[i]->m_containsAnchor;
|
3396
|
+
m_clusters[i]->m_dimpulses[0].serializeFloat(memPtr->m_dimpulses[0]);
|
3397
|
+
m_clusters[i]->m_dimpulses[1].serializeFloat(memPtr->m_dimpulses[1]);
|
3398
|
+
m_clusters[i]->m_framexform.serializeFloat(memPtr->m_framexform);
|
3399
|
+
memPtr->m_idmass = m_clusters[i]->m_idmass;
|
3400
|
+
memPtr->m_imass = m_clusters[i]->m_imass;
|
3401
|
+
m_clusters[i]->m_invwi.serializeFloat(memPtr->m_invwi);
|
3402
|
+
memPtr->m_ldamping = m_clusters[i]->m_ldamping;
|
3403
|
+
m_clusters[i]->m_locii.serializeFloat(memPtr->m_locii);
|
3404
|
+
m_clusters[i]->m_lv.serializeFloat(memPtr->m_lv);
|
3405
|
+
memPtr->m_matching = m_clusters[i]->m_matching;
|
3406
|
+
memPtr->m_maxSelfCollisionImpulse = m_clusters[i]->m_maxSelfCollisionImpulse;
|
3407
|
+
memPtr->m_ndamping = m_clusters[i]->m_ndamping;
|
3408
|
+
memPtr->m_ldamping = m_clusters[i]->m_ldamping;
|
3409
|
+
memPtr->m_adamping = m_clusters[i]->m_adamping;
|
3410
|
+
memPtr->m_selfCollisionImpulseFactor = m_clusters[i]->m_selfCollisionImpulseFactor;
|
3411
|
+
|
3412
|
+
memPtr->m_numFrameRefs = m_clusters[i]->m_framerefs.size();
|
3413
|
+
memPtr->m_numMasses = m_clusters[i]->m_masses.size();
|
3414
|
+
memPtr->m_numNodes = m_clusters[i]->m_nodes.size();
|
3415
|
+
|
3416
|
+
memPtr->m_nvimpulses = m_clusters[i]->m_nvimpulses;
|
3417
|
+
m_clusters[i]->m_vimpulses[0].serializeFloat(memPtr->m_vimpulses[0]);
|
3418
|
+
m_clusters[i]->m_vimpulses[1].serializeFloat(memPtr->m_vimpulses[1]);
|
3419
|
+
memPtr->m_ndimpulses = m_clusters[i]->m_ndimpulses;
|
3420
|
+
|
3421
|
+
|
3422
|
+
|
3423
|
+
memPtr->m_framerefs = memPtr->m_numFrameRefs? (btVector3FloatData*)serializer->getUniquePointer((void*)&m_clusters[i]->m_framerefs[0]) : 0;
|
3424
|
+
if (memPtr->m_framerefs)
|
3425
|
+
{
|
3426
|
+
int numElem = memPtr->m_numFrameRefs;
|
3427
|
+
int sz = sizeof(btVector3FloatData);
|
3428
|
+
btChunk* chunk = serializer->allocate(sz,numElem);
|
3429
|
+
btVector3FloatData* memPtr = (btVector3FloatData*) chunk->m_oldPtr;
|
3430
|
+
for (int j=0;j<numElem;j++,memPtr++)
|
3431
|
+
{
|
3432
|
+
m_clusters[i]->m_framerefs[j].serializeFloat(*memPtr);
|
3433
|
+
}
|
3434
|
+
serializer->finalizeChunk(chunk,"btVector3FloatData",BT_ARRAY_CODE,(void*)&m_clusters[i]->m_framerefs[0]);
|
3435
|
+
}
|
3436
|
+
|
3437
|
+
memPtr->m_masses = memPtr->m_numMasses ? (float*) serializer->getUniquePointer((void*)&m_clusters[i]->m_masses[0]): 0;
|
3438
|
+
if (memPtr->m_masses)
|
3439
|
+
{
|
3440
|
+
int numElem = memPtr->m_numMasses;
|
3441
|
+
int sz = sizeof(float);
|
3442
|
+
btChunk* chunk = serializer->allocate(sz,numElem);
|
3443
|
+
float* memPtr = (float*) chunk->m_oldPtr;
|
3444
|
+
for (int j=0;j<numElem;j++,memPtr++)
|
3445
|
+
{
|
3446
|
+
*memPtr = m_clusters[i]->m_masses[j];
|
3447
|
+
}
|
3448
|
+
serializer->finalizeChunk(chunk,"float",BT_ARRAY_CODE,(void*)&m_clusters[i]->m_masses[0]);
|
3449
|
+
}
|
3450
|
+
|
3451
|
+
memPtr->m_nodeIndices = memPtr->m_numNodes ? (int*) serializer->getUniquePointer((void*) &m_clusters[i]->m_nodes) : 0;
|
3452
|
+
if (memPtr->m_nodeIndices )
|
3453
|
+
{
|
3454
|
+
int numElem = memPtr->m_numMasses;
|
3455
|
+
int sz = sizeof(int);
|
3456
|
+
btChunk* chunk = serializer->allocate(sz,numElem);
|
3457
|
+
int* memPtr = (int*) chunk->m_oldPtr;
|
3458
|
+
for (int j=0;j<numElem;j++,memPtr++)
|
3459
|
+
{
|
3460
|
+
int* indexPtr = m_nodeIndexMap.find(m_clusters[i]->m_nodes[j]);
|
3461
|
+
btAssert(indexPtr);
|
3462
|
+
*memPtr = *indexPtr;
|
3463
|
+
}
|
3464
|
+
serializer->finalizeChunk(chunk,"int",BT_ARRAY_CODE,(void*)&m_clusters[i]->m_nodes);
|
3465
|
+
}
|
3466
|
+
}
|
3467
|
+
serializer->finalizeChunk(chunk,"SoftBodyClusterData",BT_ARRAY_CODE,(void*)m_clusters[0]);
|
3468
|
+
|
3469
|
+
}
|
3470
|
+
|
3471
|
+
|
3472
|
+
|
3473
|
+
sbd->m_numJoints = m_joints.size();
|
3474
|
+
sbd->m_joints = m_joints.size()? (btSoftBodyJointData*) serializer->getUniquePointer((void*)&m_joints[0]) : 0;
|
3475
|
+
|
3476
|
+
if (sbd->m_joints)
|
3477
|
+
{
|
3478
|
+
int sz = sizeof(btSoftBodyJointData);
|
3479
|
+
int numElem = m_joints.size();
|
3480
|
+
btChunk* chunk = serializer->allocate(sz,numElem);
|
3481
|
+
btSoftBodyJointData* memPtr = (btSoftBodyJointData*)chunk->m_oldPtr;
|
3482
|
+
|
3483
|
+
for (int i=0;i<numElem;i++,memPtr++)
|
3484
|
+
{
|
3485
|
+
memPtr->m_jointType = (int)m_joints[i]->Type();
|
3486
|
+
m_joints[i]->m_refs[0].serializeFloat(memPtr->m_refs[0]);
|
3487
|
+
m_joints[i]->m_refs[1].serializeFloat(memPtr->m_refs[1]);
|
3488
|
+
memPtr->m_cfm = m_joints[i]->m_cfm;
|
3489
|
+
memPtr->m_erp = m_joints[i]->m_erp;
|
3490
|
+
memPtr->m_split = m_joints[i]->m_split;
|
3491
|
+
memPtr->m_delete = m_joints[i]->m_delete;
|
3492
|
+
|
3493
|
+
for (int j=0;j<4;j++)
|
3494
|
+
{
|
3495
|
+
memPtr->m_relPosition[0].m_floats[j] = 0.f;
|
3496
|
+
memPtr->m_relPosition[1].m_floats[j] = 0.f;
|
3497
|
+
}
|
3498
|
+
memPtr->m_bodyA = 0;
|
3499
|
+
memPtr->m_bodyB = 0;
|
3500
|
+
if (m_joints[i]->m_bodies[0].m_soft)
|
3501
|
+
{
|
3502
|
+
memPtr->m_bodyAtype = BT_JOINT_SOFT_BODY_CLUSTER;
|
3503
|
+
memPtr->m_bodyA = serializer->getUniquePointer((void*)m_joints[i]->m_bodies[0].m_soft);
|
3504
|
+
}
|
3505
|
+
if (m_joints[i]->m_bodies[0].m_collisionObject)
|
3506
|
+
{
|
3507
|
+
memPtr->m_bodyAtype = BT_JOINT_COLLISION_OBJECT;
|
3508
|
+
memPtr->m_bodyA = serializer->getUniquePointer((void*)m_joints[i]->m_bodies[0].m_collisionObject);
|
3509
|
+
}
|
3510
|
+
if (m_joints[i]->m_bodies[0].m_rigid)
|
3511
|
+
{
|
3512
|
+
memPtr->m_bodyAtype = BT_JOINT_RIGID_BODY;
|
3513
|
+
memPtr->m_bodyA = serializer->getUniquePointer((void*)m_joints[i]->m_bodies[0].m_rigid);
|
3514
|
+
}
|
3515
|
+
|
3516
|
+
if (m_joints[i]->m_bodies[1].m_soft)
|
3517
|
+
{
|
3518
|
+
memPtr->m_bodyBtype = BT_JOINT_SOFT_BODY_CLUSTER;
|
3519
|
+
memPtr->m_bodyB = serializer->getUniquePointer((void*)m_joints[i]->m_bodies[1].m_soft);
|
3520
|
+
}
|
3521
|
+
if (m_joints[i]->m_bodies[1].m_collisionObject)
|
3522
|
+
{
|
3523
|
+
memPtr->m_bodyBtype = BT_JOINT_COLLISION_OBJECT;
|
3524
|
+
memPtr->m_bodyB = serializer->getUniquePointer((void*)m_joints[i]->m_bodies[1].m_collisionObject);
|
3525
|
+
}
|
3526
|
+
if (m_joints[i]->m_bodies[1].m_rigid)
|
3527
|
+
{
|
3528
|
+
memPtr->m_bodyBtype = BT_JOINT_RIGID_BODY;
|
3529
|
+
memPtr->m_bodyB = serializer->getUniquePointer((void*)m_joints[i]->m_bodies[1].m_rigid);
|
3530
|
+
}
|
3531
|
+
}
|
3532
|
+
serializer->finalizeChunk(chunk,"btSoftBodyJointData",BT_ARRAY_CODE,(void*) &m_joints[0]);
|
3533
|
+
}
|
3534
|
+
|
3535
|
+
|
3536
|
+
return btSoftBodyDataName;
|
3537
|
+
}
|
3538
|
+
|