ruby-bullet 0.0.2-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (943) hide show
  1. data/INSTALL.md +22 -0
  2. data/LICENSE +23 -0
  3. data/README.md +41 -0
  4. data/Rakefile +131 -0
  5. data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/btAxisSweep3.i +30 -0
  6. data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/btBroadphaseInterface.i +8 -0
  7. data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/btBroadphaseProxy.i +8 -0
  8. data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/btCollisionAlgorithm.i +8 -0
  9. data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/btDbvt.i +10 -0
  10. data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/btDbvtBroadphase.i +8 -0
  11. data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/btDispatcher.i +8 -0
  12. data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.i +10 -0
  13. data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/btOverlappingPairCache.i +8 -0
  14. data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/btOverlappingPairCallback.i +8 -0
  15. data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/btQuantizedBvh.i +8 -0
  16. data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/btSimpleBroadphase.i +8 -0
  17. data/bindings/bullet/interface/BulletCollision/BroadphaseCollision/local_btAxisSweep3Internal.h +191 -0
  18. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/SphereTriangleDetector.i +8 -0
  19. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.i +8 -0
  20. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.i +8 -0
  21. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btBoxBoxCollisionAlgorithm.i +8 -0
  22. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btBoxBoxDetector.i +8 -0
  23. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btCollisionConfiguration.i +21 -0
  24. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btCollisionCreateFunc.i +8 -0
  25. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btCollisionDispatcher.i +24 -0
  26. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btCollisionObject.i +8 -0
  27. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btCollisionWorld.i +82 -0
  28. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.i +8 -0
  29. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.i +8 -0
  30. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.i +8 -0
  31. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.i +8 -0
  32. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btConvexPlaneCollisionAlgorithm.i +8 -0
  33. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.i +8 -0
  34. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.i +8 -0
  35. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btGhostObject.i +8 -0
  36. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btInternalEdgeUtility.i +8 -0
  37. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btManifoldResult.i +8 -0
  38. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btSimulationIslandManager.i +8 -0
  39. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.i +8 -0
  40. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.i +8 -0
  41. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.i +8 -0
  42. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btUnionFind.i +10 -0
  43. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btBox2dShape.i +8 -0
  44. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btBoxShape.i +22 -0
  45. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.i +8 -0
  46. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btCapsuleShape.i +8 -0
  47. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btCollisionMargin.i +8 -0
  48. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btCollisionShape.i +8 -0
  49. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btCompoundShape.i +8 -0
  50. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btConcaveShape.i +8 -0
  51. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btConeShape.i +8 -0
  52. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btConvex2dShape.i +8 -0
  53. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btConvexHullShape.i +8 -0
  54. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btConvexInternalShape.i +8 -0
  55. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btConvexPointCloudShape.i +8 -0
  56. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btConvexPolyhedron.i +8 -0
  57. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btConvexShape.i +8 -0
  58. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btConvexTriangleMeshShape.i +8 -0
  59. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btCylinderShape.i +8 -0
  60. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btEmptyShape.i +8 -0
  61. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.i +8 -0
  62. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btMaterial.i +8 -0
  63. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btMinkowskiSumShape.i +8 -0
  64. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btMultiSphereShape.i +8 -0
  65. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.i +8 -0
  66. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btOptimizedBvh.i +8 -0
  67. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btPolyhedralConvexShape.i +8 -0
  68. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.i +8 -0
  69. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btShapeHull.i +8 -0
  70. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btSphereShape.i +8 -0
  71. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btStaticPlaneShape.i +8 -0
  72. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btStridingMeshInterface.i +8 -0
  73. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btTetrahedronShape.i +8 -0
  74. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btTriangleBuffer.i +8 -0
  75. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btTriangleCallback.i +8 -0
  76. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btTriangleIndexVertexArray.i +8 -0
  77. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.i +8 -0
  78. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btTriangleInfoMap.i +8 -0
  79. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btTriangleMeshShape.i +8 -0
  80. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btTriangleShape.i +8 -0
  81. data/bindings/bullet/interface/BulletCollision/CollisionShapes/btUniformScalingShape.i +8 -0
  82. data/bindings/bullet/interface/BulletCollision/Gimpact/btBoxCollision.i +8 -0
  83. data/bindings/bullet/interface/BulletCollision/Gimpact/btClipPolygon.i +8 -0
  84. data/bindings/bullet/interface/BulletCollision/Gimpact/btContactProcessing.i +8 -0
  85. data/bindings/bullet/interface/BulletCollision/Gimpact/btGImpactBvh.i +8 -0
  86. data/bindings/bullet/interface/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.i +8 -0
  87. data/bindings/bullet/interface/BulletCollision/Gimpact/btGImpactMassUtil.i +8 -0
  88. data/bindings/bullet/interface/BulletCollision/Gimpact/btGImpactQuantizedBvh.i +8 -0
  89. data/bindings/bullet/interface/BulletCollision/Gimpact/btGImpactShape.i +8 -0
  90. data/bindings/bullet/interface/BulletCollision/Gimpact/btGenericPoolAllocator.i +11 -0
  91. data/bindings/bullet/interface/BulletCollision/Gimpact/btGeometryOperations.i +8 -0
  92. data/bindings/bullet/interface/BulletCollision/Gimpact/btQuantization.i +8 -0
  93. data/bindings/bullet/interface/BulletCollision/Gimpact/btTriangleShapeEx.i +8 -0
  94. data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.i +8 -0
  95. data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btConvexCast.i +8 -0
  96. data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btConvexPenetrationDepthSolver.i +8 -0
  97. data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btDiscreteCollisionDetectorInterface.i +11 -0
  98. data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btGjkConvexCast.i +8 -0
  99. data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btGjkEpa2.i +8 -0
  100. data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.i +8 -0
  101. data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.i +8 -0
  102. data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btManifoldPoint.i +8 -0
  103. data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.i +8 -0
  104. data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btPersistentManifold.i +8 -0
  105. data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btPointCollector.i +8 -0
  106. data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.i +8 -0
  107. data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btRaycastCallback.i +8 -0
  108. data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btSimplexSolverInterface.i +8 -0
  109. data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.i +8 -0
  110. data/bindings/bullet/interface/BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.i +8 -0
  111. data/bindings/bullet/interface/BulletDynamics/Character/btCharacterControllerInterface.i +8 -0
  112. data/bindings/bullet/interface/BulletDynamics/Character/btKinematicCharacterController.i +8 -0
  113. data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btConeTwistConstraint.i +8 -0
  114. data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btConstraintSolver.i +8 -0
  115. data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btContactConstraint.i +8 -0
  116. data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btContactSolverInfo.i +8 -0
  117. data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.i +8 -0
  118. data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.i +8 -0
  119. data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btHinge2Constraint.i +8 -0
  120. data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btHingeConstraint.i +8 -0
  121. data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btJacobianEntry.i +8 -0
  122. data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btPoint2PointConstraint.i +8 -0
  123. data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.i +21 -0
  124. data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btSliderConstraint.i +8 -0
  125. data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.i +8 -0
  126. data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btSolverBody.i +8 -0
  127. data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btSolverConstraint.i +8 -0
  128. data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btTypedConstraint.i +8 -0
  129. data/bindings/bullet/interface/BulletDynamics/ConstraintSolver/btUniversalConstraint.i +8 -0
  130. data/bindings/bullet/interface/BulletDynamics/Dynamics/btActionInterface.i +8 -0
  131. data/bindings/bullet/interface/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.i +23 -0
  132. data/bindings/bullet/interface/BulletDynamics/Dynamics/btDynamicsWorld.i +37 -0
  133. data/bindings/bullet/interface/BulletDynamics/Dynamics/btRigidBody.i +20 -0
  134. data/bindings/bullet/interface/BulletDynamics/Dynamics/btSimpleDynamicsWorld.i +8 -0
  135. data/bindings/bullet/interface/BulletDynamics/Vehicle/btRaycastVehicle.i +12 -0
  136. data/bindings/bullet/interface/BulletDynamics/Vehicle/btVehicleRaycaster.i +8 -0
  137. data/bindings/bullet/interface/BulletDynamics/Vehicle/btWheelInfo.i +8 -0
  138. data/bindings/bullet/interface/BulletSoftBody/btDefaultSoftBodySolver.i +8 -0
  139. data/bindings/bullet/interface/BulletSoftBody/btSoftBody.i +8 -0
  140. data/bindings/bullet/interface/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.i +8 -0
  141. data/bindings/bullet/interface/BulletSoftBody/btSoftBodyData.i +8 -0
  142. data/bindings/bullet/interface/BulletSoftBody/btSoftBodyHelpers.i +8 -0
  143. data/bindings/bullet/interface/BulletSoftBody/btSoftBodyInternals.i +8 -0
  144. data/bindings/bullet/interface/BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.i +8 -0
  145. data/bindings/bullet/interface/BulletSoftBody/btSoftBodySolverVertexBuffer.i +8 -0
  146. data/bindings/bullet/interface/BulletSoftBody/btSoftBodySolvers.i +8 -0
  147. data/bindings/bullet/interface/BulletSoftBody/btSoftRigidCollisionAlgorithm.i +8 -0
  148. data/bindings/bullet/interface/BulletSoftBody/btSoftRigidDynamicsWorld.i +8 -0
  149. data/bindings/bullet/interface/BulletSoftBody/btSoftSoftCollisionAlgorithm.i +8 -0
  150. data/bindings/bullet/interface/BulletSoftBody/btSparseSDF.i +8 -0
  151. data/bindings/bullet/interface/LinearMath/btAabbUtil2.i +8 -0
  152. data/bindings/bullet/interface/LinearMath/btAlignedAllocator.i +8 -0
  153. data/bindings/bullet/interface/LinearMath/btAlignedObjectArray.i +8 -0
  154. data/bindings/bullet/interface/LinearMath/btConvexHull.i +8 -0
  155. data/bindings/bullet/interface/LinearMath/btConvexHullComputer.i +8 -0
  156. data/bindings/bullet/interface/LinearMath/btDefaultMotionState.i +10 -0
  157. data/bindings/bullet/interface/LinearMath/btGeometryUtil.i +10 -0
  158. data/bindings/bullet/interface/LinearMath/btGrahamScan2dConvexHull.i +8 -0
  159. data/bindings/bullet/interface/LinearMath/btHashMap.i +8 -0
  160. data/bindings/bullet/interface/LinearMath/btIDebugDraw.i +10 -0
  161. data/bindings/bullet/interface/LinearMath/btList.i +8 -0
  162. data/bindings/bullet/interface/LinearMath/btMatrix3x3.i +8 -0
  163. data/bindings/bullet/interface/LinearMath/btMinMax.i +8 -0
  164. data/bindings/bullet/interface/LinearMath/btMotionState.i +10 -0
  165. data/bindings/bullet/interface/LinearMath/btPoolAllocator.i +10 -0
  166. data/bindings/bullet/interface/LinearMath/btQuadWord.i +8 -0
  167. data/bindings/bullet/interface/LinearMath/btQuaternion.i +60 -0
  168. data/bindings/bullet/interface/LinearMath/btQuickprof.i +10 -0
  169. data/bindings/bullet/interface/LinearMath/btRandom.i +8 -0
  170. data/bindings/bullet/interface/LinearMath/btScalar.i +8 -0
  171. data/bindings/bullet/interface/LinearMath/btSerializer.i +10 -0
  172. data/bindings/bullet/interface/LinearMath/btStackAlloc.i +10 -0
  173. data/bindings/bullet/interface/LinearMath/btTransform.i +8 -0
  174. data/bindings/bullet/interface/LinearMath/btTransformUtil.i +8 -0
  175. data/bindings/bullet/interface/LinearMath/btVector3.i +42 -0
  176. data/bindings/bullet/interface/Makefile +19 -0
  177. data/bindings/bullet/interface/bullet.i +9 -0
  178. data/bindings/bullet/interface/bullet_all.i +186 -0
  179. data/bindings/bullet/interface/bullet_wrap.cpp +194161 -0
  180. data/bindings/bullet/interface/bullet_wrap.h +106 -0
  181. data/bindings/bullet/interface/bullet_wrap.o +0 -0
  182. data/bindings/bullet/src/TickListener.h +22 -0
  183. data/deps/include/bullet/Bullet-C-Api.h +176 -0
  184. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btAxisSweep3.cpp +37 -0
  185. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btAxisSweep3.h +1051 -0
  186. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btBroadphaseInterface.h +82 -0
  187. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btBroadphaseProxy.cpp +17 -0
  188. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h +270 -0
  189. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btCollisionAlgorithm.cpp +23 -0
  190. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h +80 -0
  191. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btDbvt.cpp +1295 -0
  192. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btDbvt.h +1257 -0
  193. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btDbvtBroadphase.cpp +796 -0
  194. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btDbvtBroadphase.h +146 -0
  195. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btDispatcher.cpp +22 -0
  196. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btDispatcher.h +110 -0
  197. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.cpp +489 -0
  198. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.h +151 -0
  199. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btOverlappingPairCache.cpp +633 -0
  200. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btOverlappingPairCache.h +469 -0
  201. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btOverlappingPairCallback.h +40 -0
  202. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btQuantizedBvh.cpp +1375 -0
  203. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btQuantizedBvh.h +579 -0
  204. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btSimpleBroadphase.cpp +349 -0
  205. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btSimpleBroadphase.h +171 -0
  206. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/BroadphaseCollision/btAxisSweep3.obj +0 -0
  207. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/BroadphaseCollision/btBroadphaseProxy.obj +0 -0
  208. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/BroadphaseCollision/btCollisionAlgorithm.obj +0 -0
  209. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/BroadphaseCollision/btDbvt.obj +0 -0
  210. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/BroadphaseCollision/btDbvtBroadphase.obj +0 -0
  211. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/BroadphaseCollision/btDispatcher.obj +0 -0
  212. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/BroadphaseCollision/btMultiSapBroadphase.obj +0 -0
  213. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/BroadphaseCollision/btOverlappingPairCache.obj +0 -0
  214. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/BroadphaseCollision/btQuantizedBvh.obj +0 -0
  215. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/BroadphaseCollision/btSimpleBroadphase.obj +0 -0
  216. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CXX.includecache +2574 -0
  217. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/SphereTriangleDetector.obj +0 -0
  218. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btActivatingCollisionAlgorithm.obj +0 -0
  219. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.obj +0 -0
  220. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btBoxBoxCollisionAlgorithm.obj +0 -0
  221. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btBoxBoxDetector.obj +0 -0
  222. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btCollisionDispatcher.obj +0 -0
  223. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btCollisionObject.obj +0 -0
  224. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btCollisionWorld.obj +0 -0
  225. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btCompoundCollisionAlgorithm.obj +0 -0
  226. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btConvex2dConvex2dAlgorithm.obj +0 -0
  227. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btConvexConcaveCollisionAlgorithm.obj +0 -0
  228. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btConvexConvexAlgorithm.obj +0 -0
  229. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btConvexPlaneCollisionAlgorithm.obj +0 -0
  230. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btDefaultCollisionConfiguration.obj +0 -0
  231. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btEmptyCollisionAlgorithm.obj +0 -0
  232. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btGhostObject.obj +0 -0
  233. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btInternalEdgeUtility.obj +0 -0
  234. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btManifoldResult.obj +0 -0
  235. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btSimulationIslandManager.obj +0 -0
  236. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btSphereBoxCollisionAlgorithm.obj +0 -0
  237. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btSphereSphereCollisionAlgorithm.obj +0 -0
  238. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btSphereTriangleCollisionAlgorithm.obj +0 -0
  239. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionDispatch/btUnionFind.obj +0 -0
  240. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btBox2dShape.obj +0 -0
  241. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btBoxShape.obj +0 -0
  242. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btBvhTriangleMeshShape.obj +0 -0
  243. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btCapsuleShape.obj +0 -0
  244. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btCollisionShape.obj +0 -0
  245. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btCompoundShape.obj +0 -0
  246. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btConcaveShape.obj +0 -0
  247. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btConeShape.obj +0 -0
  248. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btConvex2dShape.obj +0 -0
  249. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btConvexHullShape.obj +0 -0
  250. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btConvexInternalShape.obj +0 -0
  251. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btConvexPointCloudShape.obj +0 -0
  252. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btConvexPolyhedron.obj +0 -0
  253. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btConvexShape.obj +0 -0
  254. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btConvexTriangleMeshShape.obj +0 -0
  255. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btCylinderShape.obj +0 -0
  256. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btEmptyShape.obj +0 -0
  257. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btHeightfieldTerrainShape.obj +0 -0
  258. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btMinkowskiSumShape.obj +0 -0
  259. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btMultiSphereShape.obj +0 -0
  260. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btMultimaterialTriangleMeshShape.obj +0 -0
  261. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btOptimizedBvh.obj +0 -0
  262. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btPolyhedralConvexShape.obj +0 -0
  263. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btScaledBvhTriangleMeshShape.obj +0 -0
  264. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btShapeHull.obj +0 -0
  265. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btSphereShape.obj +0 -0
  266. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btStaticPlaneShape.obj +0 -0
  267. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btStridingMeshInterface.obj +0 -0
  268. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btTetrahedronShape.obj +0 -0
  269. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btTriangleBuffer.obj +0 -0
  270. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btTriangleCallback.obj +0 -0
  271. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btTriangleIndexVertexArray.obj +0 -0
  272. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btTriangleIndexVertexMaterialArray.obj +0 -0
  273. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btTriangleMesh.obj +0 -0
  274. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btTriangleMeshShape.obj +0 -0
  275. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/CollisionShapes/btUniformScalingShape.obj +0 -0
  276. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/DependInfo.cmake +121 -0
  277. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/Gimpact/btContactProcessing.obj +0 -0
  278. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/Gimpact/btGImpactBvh.obj +0 -0
  279. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/Gimpact/btGImpactCollisionAlgorithm.obj +0 -0
  280. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/Gimpact/btGImpactQuantizedBvh.obj +0 -0
  281. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/Gimpact/btGImpactShape.obj +0 -0
  282. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/Gimpact/btGenericPoolAllocator.obj +0 -0
  283. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/Gimpact/btTriangleShapeEx.obj +0 -0
  284. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/Gimpact/gim_box_set.obj +0 -0
  285. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/Gimpact/gim_contact.obj +0 -0
  286. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/Gimpact/gim_memory.obj +0 -0
  287. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/Gimpact/gim_tri_collision.obj +0 -0
  288. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/NarrowPhaseCollision/btContinuousConvexCollision.obj +0 -0
  289. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/NarrowPhaseCollision/btConvexCast.obj +0 -0
  290. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/NarrowPhaseCollision/btGjkConvexCast.obj +0 -0
  291. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/NarrowPhaseCollision/btGjkEpa2.obj +0 -0
  292. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.obj +0 -0
  293. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/NarrowPhaseCollision/btGjkPairDetector.obj +0 -0
  294. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.obj +0 -0
  295. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/NarrowPhaseCollision/btPersistentManifold.obj +0 -0
  296. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/NarrowPhaseCollision/btPolyhedralContactClipping.obj +0 -0
  297. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/NarrowPhaseCollision/btRaycastCallback.obj +0 -0
  298. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/NarrowPhaseCollision/btSubSimplexConvexCast.obj +0 -0
  299. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/NarrowPhaseCollision/btVoronoiSimplexSolver.obj +0 -0
  300. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/build.make +2561 -0
  301. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/cmake_clean.cmake +101 -0
  302. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/cmake_clean_target.cmake +3 -0
  303. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/depend.internal +2058 -0
  304. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/depend.make +2058 -0
  305. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/flags.make +8 -0
  306. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/includes_CXX.rsp +1 -0
  307. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/link.txt +2 -0
  308. data/deps/include/bullet/BulletCollision/CMakeFiles/BulletCollision.dir/progress.make +93 -0
  309. data/deps/include/bullet/BulletCollision/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
  310. data/deps/include/bullet/BulletCollision/CMakeFiles/progress.marks +1 -0
  311. data/deps/include/bullet/BulletCollision/CMakeLists.txt +279 -0
  312. data/deps/include/bullet/BulletCollision/CollisionDispatch/SphereTriangleDetector.cpp +201 -0
  313. data/deps/include/bullet/BulletCollision/CollisionDispatch/SphereTriangleDetector.h +51 -0
  314. data/deps/include/bullet/BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.cpp +47 -0
  315. data/deps/include/bullet/BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.h +36 -0
  316. data/deps/include/bullet/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.cpp +435 -0
  317. data/deps/include/bullet/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.h +66 -0
  318. data/deps/include/bullet/BulletCollision/CollisionDispatch/btBoxBoxCollisionAlgorithm.cpp +85 -0
  319. data/deps/include/bullet/BulletCollision/CollisionDispatch/btBoxBoxCollisionAlgorithm.h +66 -0
  320. data/deps/include/bullet/BulletCollision/CollisionDispatch/btBoxBoxDetector.cpp +718 -0
  321. data/deps/include/bullet/BulletCollision/CollisionDispatch/btBoxBoxDetector.h +44 -0
  322. data/deps/include/bullet/BulletCollision/CollisionDispatch/btCollisionConfiguration.h +48 -0
  323. data/deps/include/bullet/BulletCollision/CollisionDispatch/btCollisionCreateFunc.h +45 -0
  324. data/deps/include/bullet/BulletCollision/CollisionDispatch/btCollisionDispatcher.cpp +310 -0
  325. data/deps/include/bullet/BulletCollision/CollisionDispatch/btCollisionDispatcher.h +172 -0
  326. data/deps/include/bullet/BulletCollision/CollisionDispatch/btCollisionObject.cpp +116 -0
  327. data/deps/include/bullet/BulletCollision/CollisionDispatch/btCollisionObject.h +524 -0
  328. data/deps/include/bullet/BulletCollision/CollisionDispatch/btCollisionWorld.cpp +1518 -0
  329. data/deps/include/bullet/BulletCollision/CollisionDispatch/btCollisionWorld.h +509 -0
  330. data/deps/include/bullet/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.cpp +353 -0
  331. data/deps/include/bullet/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.h +86 -0
  332. data/deps/include/bullet/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.cpp +247 -0
  333. data/deps/include/bullet/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.h +95 -0
  334. data/deps/include/bullet/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.cpp +312 -0
  335. data/deps/include/bullet/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.h +116 -0
  336. data/deps/include/bullet/BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.cpp +739 -0
  337. data/deps/include/bullet/BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.h +109 -0
  338. data/deps/include/bullet/BulletCollision/CollisionDispatch/btConvexPlaneCollisionAlgorithm.cpp +173 -0
  339. data/deps/include/bullet/BulletCollision/CollisionDispatch/btConvexPlaneCollisionAlgorithm.h +84 -0
  340. data/deps/include/bullet/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.cpp +309 -0
  341. data/deps/include/bullet/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.h +137 -0
  342. data/deps/include/bullet/BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.cpp +34 -0
  343. data/deps/include/bullet/BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.h +54 -0
  344. data/deps/include/bullet/BulletCollision/CollisionDispatch/btGhostObject.cpp +171 -0
  345. data/deps/include/bullet/BulletCollision/CollisionDispatch/btGhostObject.h +175 -0
  346. data/deps/include/bullet/BulletCollision/CollisionDispatch/btInternalEdgeUtility.cpp +842 -0
  347. data/deps/include/bullet/BulletCollision/CollisionDispatch/btInternalEdgeUtility.h +46 -0
  348. data/deps/include/bullet/BulletCollision/CollisionDispatch/btManifoldResult.cpp +135 -0
  349. data/deps/include/bullet/BulletCollision/CollisionDispatch/btManifoldResult.h +128 -0
  350. data/deps/include/bullet/BulletCollision/CollisionDispatch/btSimulationIslandManager.cpp +450 -0
  351. data/deps/include/bullet/BulletCollision/CollisionDispatch/btSimulationIslandManager.h +81 -0
  352. data/deps/include/bullet/BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.cpp +260 -0
  353. data/deps/include/bullet/BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.h +75 -0
  354. data/deps/include/bullet/BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.cpp +105 -0
  355. data/deps/include/bullet/BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.h +66 -0
  356. data/deps/include/bullet/BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.cpp +84 -0
  357. data/deps/include/bullet/BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.h +69 -0
  358. data/deps/include/bullet/BulletCollision/CollisionDispatch/btUnionFind.cpp +82 -0
  359. data/deps/include/bullet/BulletCollision/CollisionDispatch/btUnionFind.h +129 -0
  360. data/deps/include/bullet/BulletCollision/CollisionShapes/btBox2dShape.cpp +42 -0
  361. data/deps/include/bullet/BulletCollision/CollisionShapes/btBox2dShape.h +369 -0
  362. data/deps/include/bullet/BulletCollision/CollisionShapes/btBoxShape.cpp +51 -0
  363. data/deps/include/bullet/BulletCollision/CollisionShapes/btBoxShape.h +312 -0
  364. data/deps/include/bullet/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.cpp +466 -0
  365. data/deps/include/bullet/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h +139 -0
  366. data/deps/include/bullet/BulletCollision/CollisionShapes/btCapsuleShape.cpp +171 -0
  367. data/deps/include/bullet/BulletCollision/CollisionShapes/btCapsuleShape.h +173 -0
  368. data/deps/include/bullet/BulletCollision/CollisionShapes/btCollisionMargin.h +27 -0
  369. data/deps/include/bullet/BulletCollision/CollisionShapes/btCollisionShape.cpp +119 -0
  370. data/deps/include/bullet/BulletCollision/CollisionShapes/btCollisionShape.h +150 -0
  371. data/deps/include/bullet/BulletCollision/CollisionShapes/btCompoundShape.cpp +356 -0
  372. data/deps/include/bullet/BulletCollision/CollisionShapes/btCompoundShape.h +212 -0
  373. data/deps/include/bullet/BulletCollision/CollisionShapes/btConcaveShape.cpp +27 -0
  374. data/deps/include/bullet/BulletCollision/CollisionShapes/btConcaveShape.h +60 -0
  375. data/deps/include/bullet/BulletCollision/CollisionShapes/btConeShape.cpp +143 -0
  376. data/deps/include/bullet/BulletCollision/CollisionShapes/btConeShape.h +103 -0
  377. data/deps/include/bullet/BulletCollision/CollisionShapes/btConvex2dShape.cpp +92 -0
  378. data/deps/include/bullet/BulletCollision/CollisionShapes/btConvex2dShape.h +80 -0
  379. data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexHullShape.cpp +255 -0
  380. data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexHullShape.h +122 -0
  381. data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexInternalShape.cpp +151 -0
  382. data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexInternalShape.h +224 -0
  383. data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexPointCloudShape.cpp +157 -0
  384. data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexPointCloudShape.h +105 -0
  385. data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexPolyhedron.cpp +296 -0
  386. data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexPolyhedron.h +62 -0
  387. data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexShape.cpp +446 -0
  388. data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexShape.h +84 -0
  389. data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexTriangleMeshShape.cpp +315 -0
  390. data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexTriangleMeshShape.h +75 -0
  391. data/deps/include/bullet/BulletCollision/CollisionShapes/btCylinderShape.cpp +281 -0
  392. data/deps/include/bullet/BulletCollision/CollisionShapes/btCylinderShape.h +200 -0
  393. data/deps/include/bullet/BulletCollision/CollisionShapes/btEmptyShape.cpp +50 -0
  394. data/deps/include/bullet/BulletCollision/CollisionShapes/btEmptyShape.h +70 -0
  395. data/deps/include/bullet/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp +411 -0
  396. data/deps/include/bullet/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h +161 -0
  397. data/deps/include/bullet/BulletCollision/CollisionShapes/btMaterial.h +35 -0
  398. data/deps/include/bullet/BulletCollision/CollisionShapes/btMinkowskiSumShape.cpp +60 -0
  399. data/deps/include/bullet/BulletCollision/CollisionShapes/btMinkowskiSumShape.h +60 -0
  400. data/deps/include/bullet/BulletCollision/CollisionShapes/btMultiSphereShape.cpp +167 -0
  401. data/deps/include/bullet/BulletCollision/CollisionShapes/btMultiSphereShape.h +99 -0
  402. data/deps/include/bullet/BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.cpp +45 -0
  403. data/deps/include/bullet/BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.h +120 -0
  404. data/deps/include/bullet/BulletCollision/CollisionShapes/btOptimizedBvh.cpp +391 -0
  405. data/deps/include/bullet/BulletCollision/CollisionShapes/btOptimizedBvh.h +65 -0
  406. data/deps/include/bullet/BulletCollision/CollisionShapes/btPolyhedralConvexShape.cpp +475 -0
  407. data/deps/include/bullet/BulletCollision/CollisionShapes/btPolyhedralConvexShape.h +112 -0
  408. data/deps/include/bullet/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.cpp +123 -0
  409. data/deps/include/bullet/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h +93 -0
  410. data/deps/include/bullet/BulletCollision/CollisionShapes/btShapeHull.cpp +170 -0
  411. data/deps/include/bullet/BulletCollision/CollisionShapes/btShapeHull.h +59 -0
  412. data/deps/include/bullet/BulletCollision/CollisionShapes/btSphereShape.cpp +71 -0
  413. data/deps/include/bullet/BulletCollision/CollisionShapes/btSphereShape.h +73 -0
  414. data/deps/include/bullet/BulletCollision/CollisionShapes/btStaticPlaneShape.cpp +107 -0
  415. data/deps/include/bullet/BulletCollision/CollisionShapes/btStaticPlaneShape.h +103 -0
  416. data/deps/include/bullet/BulletCollision/CollisionShapes/btStridingMeshInterface.cpp +381 -0
  417. data/deps/include/bullet/BulletCollision/CollisionShapes/btStridingMeshInterface.h +162 -0
  418. data/deps/include/bullet/BulletCollision/CollisionShapes/btTetrahedronShape.cpp +218 -0
  419. data/deps/include/bullet/BulletCollision/CollisionShapes/btTetrahedronShape.h +74 -0
  420. data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleBuffer.cpp +35 -0
  421. data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleBuffer.h +69 -0
  422. data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleCallback.cpp +28 -0
  423. data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleCallback.h +42 -0
  424. data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexArray.cpp +95 -0
  425. data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexArray.h +133 -0
  426. data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.cpp +86 -0
  427. data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.h +84 -0
  428. data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleInfoMap.h +241 -0
  429. data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleMesh.cpp +140 -0
  430. data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleMesh.h +69 -0
  431. data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleMeshShape.cpp +211 -0
  432. data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleMeshShape.h +89 -0
  433. data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleShape.h +182 -0
  434. data/deps/include/bullet/BulletCollision/CollisionShapes/btUniformScalingShape.cpp +160 -0
  435. data/deps/include/bullet/BulletCollision/CollisionShapes/btUniformScalingShape.h +87 -0
  436. data/deps/include/bullet/BulletCollision/Doxyfile +746 -0
  437. data/deps/include/bullet/BulletCollision/Gimpact/btBoxCollision.h +647 -0
  438. data/deps/include/bullet/BulletCollision/Gimpact/btClipPolygon.h +182 -0
  439. data/deps/include/bullet/BulletCollision/Gimpact/btContactProcessing.cpp +181 -0
  440. data/deps/include/bullet/BulletCollision/Gimpact/btContactProcessing.h +145 -0
  441. data/deps/include/bullet/BulletCollision/Gimpact/btGImpactBvh.cpp +498 -0
  442. data/deps/include/bullet/BulletCollision/Gimpact/btGImpactBvh.h +396 -0
  443. data/deps/include/bullet/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.cpp +904 -0
  444. data/deps/include/bullet/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.h +306 -0
  445. data/deps/include/bullet/BulletCollision/Gimpact/btGImpactMassUtil.h +60 -0
  446. data/deps/include/bullet/BulletCollision/Gimpact/btGImpactQuantizedBvh.cpp +528 -0
  447. data/deps/include/bullet/BulletCollision/Gimpact/btGImpactQuantizedBvh.h +372 -0
  448. data/deps/include/bullet/BulletCollision/Gimpact/btGImpactShape.cpp +203 -0
  449. data/deps/include/bullet/BulletCollision/Gimpact/btGImpactShape.h +1171 -0
  450. data/deps/include/bullet/BulletCollision/Gimpact/btGenericPoolAllocator.cpp +283 -0
  451. data/deps/include/bullet/BulletCollision/Gimpact/btGenericPoolAllocator.h +163 -0
  452. data/deps/include/bullet/BulletCollision/Gimpact/btGeometryOperations.h +212 -0
  453. data/deps/include/bullet/BulletCollision/Gimpact/btQuantization.h +88 -0
  454. data/deps/include/bullet/BulletCollision/Gimpact/btTriangleShapeEx.cpp +218 -0
  455. data/deps/include/bullet/BulletCollision/Gimpact/btTriangleShapeEx.h +180 -0
  456. data/deps/include/bullet/BulletCollision/Gimpact/gim_array.h +326 -0
  457. data/deps/include/bullet/BulletCollision/Gimpact/gim_basic_geometry_operations.h +543 -0
  458. data/deps/include/bullet/BulletCollision/Gimpact/gim_bitset.h +123 -0
  459. data/deps/include/bullet/BulletCollision/Gimpact/gim_box_collision.h +590 -0
  460. data/deps/include/bullet/BulletCollision/Gimpact/gim_box_set.cpp +182 -0
  461. data/deps/include/bullet/BulletCollision/Gimpact/gim_box_set.h +674 -0
  462. data/deps/include/bullet/BulletCollision/Gimpact/gim_clip_polygon.h +210 -0
  463. data/deps/include/bullet/BulletCollision/Gimpact/gim_contact.cpp +146 -0
  464. data/deps/include/bullet/BulletCollision/Gimpact/gim_contact.h +164 -0
  465. data/deps/include/bullet/BulletCollision/Gimpact/gim_geom_types.h +97 -0
  466. data/deps/include/bullet/BulletCollision/Gimpact/gim_geometry.h +42 -0
  467. data/deps/include/bullet/BulletCollision/Gimpact/gim_hash_table.h +902 -0
  468. data/deps/include/bullet/BulletCollision/Gimpact/gim_linear_math.h +1573 -0
  469. data/deps/include/bullet/BulletCollision/Gimpact/gim_math.h +157 -0
  470. data/deps/include/bullet/BulletCollision/Gimpact/gim_memory.cpp +135 -0
  471. data/deps/include/bullet/BulletCollision/Gimpact/gim_memory.h +190 -0
  472. data/deps/include/bullet/BulletCollision/Gimpact/gim_radixsort.h +406 -0
  473. data/deps/include/bullet/BulletCollision/Gimpact/gim_tri_collision.cpp +640 -0
  474. data/deps/include/bullet/BulletCollision/Gimpact/gim_tri_collision.h +379 -0
  475. data/deps/include/bullet/BulletCollision/Makefile +1793 -0
  476. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.cpp +243 -0
  477. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.h +59 -0
  478. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btConvexCast.cpp +20 -0
  479. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btConvexCast.h +73 -0
  480. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btConvexPenetrationDepthSolver.h +42 -0
  481. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btDiscreteCollisionDetectorInterface.h +91 -0
  482. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btGjkConvexCast.cpp +176 -0
  483. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btGjkConvexCast.h +50 -0
  484. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpa2.cpp +989 -0
  485. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpa2.h +75 -0
  486. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.cpp +66 -0
  487. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.h +43 -0
  488. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.cpp +457 -0
  489. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.h +103 -0
  490. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btManifoldPoint.h +158 -0
  491. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.cpp +362 -0
  492. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.h +40 -0
  493. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btPersistentManifold.cpp +302 -0
  494. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btPersistentManifold.h +228 -0
  495. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btPointCollector.h +64 -0
  496. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.cpp +440 -0
  497. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.h +46 -0
  498. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btRaycastCallback.cpp +177 -0
  499. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btRaycastCallback.h +72 -0
  500. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btSimplexSolverInterface.h +63 -0
  501. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.cpp +160 -0
  502. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.h +50 -0
  503. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.cpp +609 -0
  504. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h +179 -0
  505. data/deps/include/bullet/BulletCollision/cmake_install.cmake +29 -0
  506. data/deps/include/bullet/BulletCollision/ibmsdk/Makefile +112 -0
  507. data/deps/include/bullet/BulletCollision/premake4.lua +11 -0
  508. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/CXX.includecache +1466 -0
  509. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/Character/btKinematicCharacterController.obj +0 -0
  510. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/ConstraintSolver/btConeTwistConstraint.obj +0 -0
  511. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/ConstraintSolver/btContactConstraint.obj +0 -0
  512. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/ConstraintSolver/btGeneric6DofConstraint.obj +0 -0
  513. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/ConstraintSolver/btGeneric6DofSpringConstraint.obj +0 -0
  514. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/ConstraintSolver/btHinge2Constraint.obj +0 -0
  515. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/ConstraintSolver/btHingeConstraint.obj +0 -0
  516. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/ConstraintSolver/btPoint2PointConstraint.obj +0 -0
  517. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/ConstraintSolver/btSequentialImpulseConstraintSolver.obj +0 -0
  518. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/ConstraintSolver/btSliderConstraint.obj +0 -0
  519. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/ConstraintSolver/btSolve2LinearConstraint.obj +0 -0
  520. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/ConstraintSolver/btTypedConstraint.obj +0 -0
  521. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/ConstraintSolver/btUniversalConstraint.obj +0 -0
  522. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/DependInfo.cmake +48 -0
  523. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/Dynamics/Bullet-C-API.obj +0 -0
  524. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/Dynamics/btDiscreteDynamicsWorld.obj +0 -0
  525. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/Dynamics/btRigidBody.obj +0 -0
  526. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/Dynamics/btSimpleDynamicsWorld.obj +0 -0
  527. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/Vehicle/btRaycastVehicle.obj +0 -0
  528. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/Vehicle/btWheelInfo.obj +0 -0
  529. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/build.make +590 -0
  530. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/cmake_clean.cmake +28 -0
  531. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/cmake_clean_target.cmake +3 -0
  532. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/depend.internal +601 -0
  533. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/depend.make +601 -0
  534. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/flags.make +8 -0
  535. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/includes_CXX.rsp +1 -0
  536. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/link.txt +2 -0
  537. data/deps/include/bullet/BulletDynamics/CMakeFiles/BulletDynamics.dir/progress.make +20 -0
  538. data/deps/include/bullet/BulletDynamics/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
  539. data/deps/include/bullet/BulletDynamics/CMakeFiles/progress.marks +1 -0
  540. data/deps/include/bullet/BulletDynamics/CMakeLists.txt +112 -0
  541. data/deps/include/bullet/BulletDynamics/Character/btCharacterControllerInterface.h +46 -0
  542. data/deps/include/bullet/BulletDynamics/Character/btKinematicCharacterController.cpp +641 -0
  543. data/deps/include/bullet/BulletDynamics/Character/btKinematicCharacterController.h +163 -0
  544. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btConeTwistConstraint.cpp +1132 -0
  545. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btConeTwistConstraint.h +346 -0
  546. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btConstraintSolver.h +52 -0
  547. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btContactConstraint.cpp +178 -0
  548. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btContactConstraint.h +71 -0
  549. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btContactSolverInfo.h +87 -0
  550. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.cpp +1078 -0
  551. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h +614 -0
  552. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.cpp +185 -0
  553. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.h +99 -0
  554. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btHinge2Constraint.cpp +66 -0
  555. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btHinge2Constraint.h +58 -0
  556. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btHingeConstraint.cpp +1034 -0
  557. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btHingeConstraint.h +381 -0
  558. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btJacobianEntry.h +156 -0
  559. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btPoint2PointConstraint.cpp +230 -0
  560. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btPoint2PointConstraint.h +161 -0
  561. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp +1269 -0
  562. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h +130 -0
  563. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btSliderConstraint.cpp +857 -0
  564. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btSliderConstraint.h +333 -0
  565. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.cpp +255 -0
  566. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.h +107 -0
  567. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btSolverBody.h +191 -0
  568. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btSolverConstraint.h +98 -0
  569. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btTypedConstraint.cpp +220 -0
  570. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btTypedConstraint.h +452 -0
  571. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btUniversalConstraint.cpp +87 -0
  572. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btUniversalConstraint.h +62 -0
  573. data/deps/include/bullet/BulletDynamics/Dynamics/Bullet-C-API.cpp +405 -0
  574. data/deps/include/bullet/BulletDynamics/Dynamics/btActionInterface.h +46 -0
  575. data/deps/include/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp +1257 -0
  576. data/deps/include/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h +203 -0
  577. data/deps/include/bullet/BulletDynamics/Dynamics/btDynamicsWorld.h +151 -0
  578. data/deps/include/bullet/BulletDynamics/Dynamics/btRigidBody.cpp +403 -0
  579. data/deps/include/bullet/BulletDynamics/Dynamics/btRigidBody.h +691 -0
  580. data/deps/include/bullet/BulletDynamics/Dynamics/btSimpleDynamicsWorld.cpp +280 -0
  581. data/deps/include/bullet/BulletDynamics/Dynamics/btSimpleDynamicsWorld.h +89 -0
  582. data/deps/include/bullet/BulletDynamics/Makefile +479 -0
  583. data/deps/include/bullet/BulletDynamics/Vehicle/btRaycastVehicle.cpp +771 -0
  584. data/deps/include/bullet/BulletDynamics/Vehicle/btRaycastVehicle.h +236 -0
  585. data/deps/include/bullet/BulletDynamics/Vehicle/btVehicleRaycaster.h +35 -0
  586. data/deps/include/bullet/BulletDynamics/Vehicle/btWheelInfo.cpp +56 -0
  587. data/deps/include/bullet/BulletDynamics/Vehicle/btWheelInfo.h +119 -0
  588. data/deps/include/bullet/BulletDynamics/cmake_install.cmake +29 -0
  589. data/deps/include/bullet/BulletDynamics/ibmsdk/Makefile +53 -0
  590. data/deps/include/bullet/BulletDynamics/premake4.lua +11 -0
  591. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/CXX.includecache +1480 -0
  592. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/DependInfo.cmake +47 -0
  593. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/PosixThreadSupport.obj +0 -0
  594. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SequentialThreadSupport.obj +0 -0
  595. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SpuCollisionObjectWrapper.obj +0 -0
  596. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SpuCollisionTaskProcess.obj +0 -0
  597. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SpuContactManifoldCollisionAlgorithm.obj +0 -0
  598. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SpuFakeDma.obj +0 -0
  599. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SpuGatheringCollisionDispatcher.obj +0 -0
  600. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SpuLibspe2Support.obj +0 -0
  601. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SpuNarrowPhaseCollisionTask/SpuCollisionShapes.obj +0 -0
  602. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SpuNarrowPhaseCollisionTask/SpuContactResult.obj +0 -0
  603. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SpuNarrowPhaseCollisionTask/SpuGatheringCollisionTask.obj +0 -0
  604. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SpuNarrowPhaseCollisionTask/SpuMinkowskiPenetrationDepthSolver.obj +0 -0
  605. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SpuNarrowPhaseCollisionTask/boxBoxDistance.obj +0 -0
  606. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/SpuSampleTaskProcess.obj +0 -0
  607. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/Win32ThreadSupport.obj +0 -0
  608. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/btGpu3DGridBroadphase.obj +0 -0
  609. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/btParallelConstraintSolver.obj +0 -0
  610. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/btThreadSupportInterface.obj +0 -0
  611. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/build.make +563 -0
  612. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/cmake_clean.cmake +27 -0
  613. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/cmake_clean_target.cmake +3 -0
  614. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/depend.internal +690 -0
  615. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/depend.make +690 -0
  616. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/flags.make +8 -0
  617. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/includes_CXX.rsp +1 -0
  618. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/link.txt +2 -0
  619. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/BulletMultiThreaded.dir/progress.make +19 -0
  620. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
  621. data/deps/include/bullet/BulletMultiThreaded/CMakeFiles/progress.marks +1 -0
  622. data/deps/include/bullet/BulletMultiThreaded/CMakeLists.txt +123 -0
  623. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
  624. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/CMakeFiles/progress.marks +1 -0
  625. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/CMakeLists.txt +13 -0
  626. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/CMakeLists.txt +83 -0
  627. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/ApplyForces.hlsl +95 -0
  628. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/ComputeBounds.hlsl +83 -0
  629. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/Integrate.hlsl +41 -0
  630. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/OutputToVertexArray.hlsl +63 -0
  631. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/PrepareLinks.hlsl +44 -0
  632. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/SolvePositions.hlsl +55 -0
  633. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/SolvePositionsSIMDBatched.hlsl +147 -0
  634. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/UpdateConstants.hlsl +48 -0
  635. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/UpdateNodes.hlsl +49 -0
  636. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/UpdateNormals.hlsl +98 -0
  637. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/UpdatePositions.hlsl +44 -0
  638. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/UpdatePositionsFromVelocities.hlsl +35 -0
  639. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/VSolveLinks.hlsl +55 -0
  640. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/solveCollisionsAndUpdateVelocities.hlsl +170 -0
  641. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/HLSL/solveCollisionsAndUpdateVelocitiesSIMDBatched.hlsl +191 -0
  642. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolverBuffer_DX11.h +323 -0
  643. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolverLinkData_DX11.h +103 -0
  644. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolverLinkData_DX11SIMDAware.h +173 -0
  645. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolverTriangleData_DX11.h +96 -0
  646. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolverVertexBuffer_DX11.h +107 -0
  647. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolverVertexData_DX11.h +63 -0
  648. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolver_DX11.cpp +2236 -0
  649. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolver_DX11.h +691 -0
  650. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolver_DX11SIMDAware.cpp +1051 -0
  651. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolver_DX11SIMDAware.h +81 -0
  652. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/premake4.lua +23 -0
  653. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/Makefile +122 -0
  654. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/AMD/CMakeLists.txt +62 -0
  655. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/AMD/premake4.lua +27 -0
  656. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/Apple/CMakeLists.txt +77 -0
  657. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
  658. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/CMakeFiles/progress.marks +1 -0
  659. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/CMakeLists.txt +17 -0
  660. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/Intel/CMakeLists.txt +82 -0
  661. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/Intel/premake4.lua +27 -0
  662. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/Makefile +122 -0
  663. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/BulletSoftBodySolvers_OpenCL_Mini.dir/CXX.includecache +556 -0
  664. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/BulletSoftBodySolvers_OpenCL_Mini.dir/DependInfo.cmake +31 -0
  665. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/BulletSoftBodySolvers_OpenCL_Mini.dir/__/btSoftBodySolver_OpenCL.obj +0 -0
  666. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/BulletSoftBodySolvers_OpenCL_Mini.dir/build.make +104 -0
  667. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/BulletSoftBodySolvers_OpenCL_Mini.dir/cmake_clean.cmake +10 -0
  668. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/BulletSoftBodySolvers_OpenCL_Mini.dir/cmake_clean_target.cmake +3 -0
  669. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/BulletSoftBodySolvers_OpenCL_Mini.dir/depend.internal +76 -0
  670. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/BulletSoftBodySolvers_OpenCL_Mini.dir/depend.make +76 -0
  671. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/BulletSoftBodySolvers_OpenCL_Mini.dir/flags.make +8 -0
  672. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/BulletSoftBodySolvers_OpenCL_Mini.dir/includes_CXX.rsp +1 -0
  673. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/BulletSoftBodySolvers_OpenCL_Mini.dir/link.txt +2 -0
  674. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/BulletSoftBodySolvers_OpenCL_Mini.dir/progress.make +2 -0
  675. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
  676. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeFiles/progress.marks +1 -0
  677. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/CMakeLists.txt +75 -0
  678. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/Makefile +155 -0
  679. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/MiniCLTaskWrap.cpp +249 -0
  680. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/cmake_install.cmake +29 -0
  681. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/NVidia/CMakeLists.txt +81 -0
  682. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/NVidia/premake4.lua +27 -0
  683. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/ApplyForces.cl +102 -0
  684. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/ComputeBounds.cl +82 -0
  685. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/Integrate.cl +35 -0
  686. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/OutputToVertexArray.cl +46 -0
  687. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/PrepareLinks.cl +38 -0
  688. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/SolveCollisionsAndUpdateVelocities.cl +204 -0
  689. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/SolveCollisionsAndUpdateVelocitiesSIMDBatched.cl +242 -0
  690. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/SolvePositions.cl +57 -0
  691. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/SolvePositionsSIMDBatched.cl +130 -0
  692. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/UpdateConstants.cl +44 -0
  693. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/UpdateFixedVertexPositions.cl +25 -0
  694. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/UpdateNodes.cl +39 -0
  695. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/UpdateNormals.cl +102 -0
  696. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/UpdatePositions.cl +34 -0
  697. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/UpdatePositionsFromVelocities.cl +28 -0
  698. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/VSolveLinks.cl +45 -0
  699. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverBuffer_OpenCL.h +209 -0
  700. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverLinkData_OpenCL.h +99 -0
  701. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverLinkData_OpenCLSIMDAware.h +169 -0
  702. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverOutputCLtoGL.cpp +126 -0
  703. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverOutputCLtoGL.h +62 -0
  704. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverTriangleData_OpenCL.h +84 -0
  705. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverVertexBuffer_OpenGL.h +166 -0
  706. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverVertexData_OpenCL.h +52 -0
  707. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolver_OpenCL.cpp +1820 -0
  708. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolver_OpenCL.h +527 -0
  709. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolver_OpenCLSIMDAware.cpp +1101 -0
  710. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolver_OpenCLSIMDAware.h +81 -0
  711. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/cmake_install.cmake +35 -0
  712. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/Shared/btSoftBodySolverData.h +748 -0
  713. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/cmake_install.cmake +35 -0
  714. data/deps/include/bullet/BulletMultiThreaded/HeapManager.h +117 -0
  715. data/deps/include/bullet/BulletMultiThreaded/Makefile +461 -0
  716. data/deps/include/bullet/BulletMultiThreaded/Makefile.original +187 -0
  717. data/deps/include/bullet/BulletMultiThreaded/PlatformDefinitions.h +99 -0
  718. data/deps/include/bullet/BulletMultiThreaded/PosixThreadSupport.cpp +399 -0
  719. data/deps/include/bullet/BulletMultiThreaded/PosixThreadSupport.h +142 -0
  720. data/deps/include/bullet/BulletMultiThreaded/PpuAddressSpace.h +37 -0
  721. data/deps/include/bullet/BulletMultiThreaded/SequentialThreadSupport.cpp +169 -0
  722. data/deps/include/bullet/BulletMultiThreaded/SequentialThreadSupport.h +96 -0
  723. data/deps/include/bullet/BulletMultiThreaded/SpuCollisionObjectWrapper.cpp +48 -0
  724. data/deps/include/bullet/BulletMultiThreaded/SpuCollisionObjectWrapper.h +40 -0
  725. data/deps/include/bullet/BulletMultiThreaded/SpuCollisionTaskProcess.cpp +317 -0
  726. data/deps/include/bullet/BulletMultiThreaded/SpuCollisionTaskProcess.h +163 -0
  727. data/deps/include/bullet/BulletMultiThreaded/SpuContactManifoldCollisionAlgorithm.cpp +69 -0
  728. data/deps/include/bullet/BulletMultiThreaded/SpuContactManifoldCollisionAlgorithm.h +120 -0
  729. data/deps/include/bullet/BulletMultiThreaded/SpuDoubleBuffer.h +126 -0
  730. data/deps/include/bullet/BulletMultiThreaded/SpuFakeDma.cpp +215 -0
  731. data/deps/include/bullet/BulletMultiThreaded/SpuFakeDma.h +135 -0
  732. data/deps/include/bullet/BulletMultiThreaded/SpuGatheringCollisionDispatcher.cpp +276 -0
  733. data/deps/include/bullet/BulletMultiThreaded/SpuGatheringCollisionDispatcher.h +72 -0
  734. data/deps/include/bullet/BulletMultiThreaded/SpuLibspe2Support.cpp +257 -0
  735. data/deps/include/bullet/BulletMultiThreaded/SpuLibspe2Support.h +180 -0
  736. data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/Box.h +167 -0
  737. data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuCollisionShapes.cpp +302 -0
  738. data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuCollisionShapes.h +128 -0
  739. data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuContactResult.cpp +248 -0
  740. data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuContactResult.h +106 -0
  741. data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuConvexPenetrationDepthSolver.h +51 -0
  742. data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuGatheringCollisionTask.cpp +1415 -0
  743. data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuGatheringCollisionTask.h +140 -0
  744. data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuLocalSupport.h +19 -0
  745. data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuMinkowskiPenetrationDepthSolver.cpp +348 -0
  746. data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuMinkowskiPenetrationDepthSolver.h +48 -0
  747. data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuPreferredPenetrationDirections.h +70 -0
  748. data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/boxBoxDistance.cpp +1160 -0
  749. data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/boxBoxDistance.h +65 -0
  750. data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/readme.txt +1 -0
  751. data/deps/include/bullet/BulletMultiThreaded/SpuSampleTask/SpuSampleTask.cpp +214 -0
  752. data/deps/include/bullet/BulletMultiThreaded/SpuSampleTask/SpuSampleTask.h +54 -0
  753. data/deps/include/bullet/BulletMultiThreaded/SpuSampleTask/readme.txt +1 -0
  754. data/deps/include/bullet/BulletMultiThreaded/SpuSampleTaskProcess.cpp +222 -0
  755. data/deps/include/bullet/BulletMultiThreaded/SpuSampleTaskProcess.h +153 -0
  756. data/deps/include/bullet/BulletMultiThreaded/SpuSync.h +149 -0
  757. data/deps/include/bullet/BulletMultiThreaded/TrbDynBody.h +79 -0
  758. data/deps/include/bullet/BulletMultiThreaded/TrbStateVec.h +339 -0
  759. data/deps/include/bullet/BulletMultiThreaded/Win32ThreadSupport.cpp +446 -0
  760. data/deps/include/bullet/BulletMultiThreaded/Win32ThreadSupport.h +138 -0
  761. data/deps/include/bullet/BulletMultiThreaded/btGpu3DGridBroadphase.cpp +590 -0
  762. data/deps/include/bullet/BulletMultiThreaded/btGpu3DGridBroadphase.h +138 -0
  763. data/deps/include/bullet/BulletMultiThreaded/btGpu3DGridBroadphaseSharedCode.h +430 -0
  764. data/deps/include/bullet/BulletMultiThreaded/btGpu3DGridBroadphaseSharedDefs.h +61 -0
  765. data/deps/include/bullet/BulletMultiThreaded/btGpu3DGridBroadphaseSharedTypes.h +67 -0
  766. data/deps/include/bullet/BulletMultiThreaded/btGpuDefines.h +211 -0
  767. data/deps/include/bullet/BulletMultiThreaded/btGpuUtilsSharedCode.h +55 -0
  768. data/deps/include/bullet/BulletMultiThreaded/btGpuUtilsSharedDefs.h +52 -0
  769. data/deps/include/bullet/BulletMultiThreaded/btParallelConstraintSolver.cpp +1391 -0
  770. data/deps/include/bullet/BulletMultiThreaded/btParallelConstraintSolver.h +285 -0
  771. data/deps/include/bullet/BulletMultiThreaded/btThreadSupportInterface.cpp +22 -0
  772. data/deps/include/bullet/BulletMultiThreaded/btThreadSupportInterface.h +85 -0
  773. data/deps/include/bullet/BulletMultiThreaded/cmake_install.cmake +35 -0
  774. data/deps/include/bullet/BulletMultiThreaded/vectormath2bullet.h +73 -0
  775. data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/CXX.includecache +750 -0
  776. data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/DependInfo.cmake +37 -0
  777. data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/btDefaultSoftBodySolver.obj +0 -0
  778. data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/btSoftBody.obj +0 -0
  779. data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/btSoftBodyConcaveCollisionAlgorithm.obj +0 -0
  780. data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/btSoftBodyHelpers.obj +0 -0
  781. data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/btSoftBodyRigidBodyCollisionConfiguration.obj +0 -0
  782. data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/btSoftRigidCollisionAlgorithm.obj +0 -0
  783. data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/btSoftRigidDynamicsWorld.obj +0 -0
  784. data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/btSoftSoftCollisionAlgorithm.obj +0 -0
  785. data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/build.make +293 -0
  786. data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/cmake_clean.cmake +17 -0
  787. data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/cmake_clean_target.cmake +3 -0
  788. data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/depend.internal +344 -0
  789. data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/depend.make +344 -0
  790. data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/flags.make +8 -0
  791. data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/includes_CXX.rsp +1 -0
  792. data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/link.txt +2 -0
  793. data/deps/include/bullet/BulletSoftBody/CMakeFiles/BulletSoftBody.dir/progress.make +9 -0
  794. data/deps/include/bullet/BulletSoftBody/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
  795. data/deps/include/bullet/BulletSoftBody/CMakeFiles/progress.marks +1 -0
  796. data/deps/include/bullet/BulletSoftBody/CMakeLists.txt +65 -0
  797. data/deps/include/bullet/BulletSoftBody/Makefile +281 -0
  798. data/deps/include/bullet/BulletSoftBody/btDefaultSoftBodySolver.cpp +151 -0
  799. data/deps/include/bullet/BulletSoftBody/btDefaultSoftBodySolver.h +63 -0
  800. data/deps/include/bullet/BulletSoftBody/btSoftBody.cpp +3538 -0
  801. data/deps/include/bullet/BulletSoftBody/btSoftBody.h +987 -0
  802. data/deps/include/bullet/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.cpp +368 -0
  803. data/deps/include/bullet/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.h +153 -0
  804. data/deps/include/bullet/BulletSoftBody/btSoftBodyData.h +217 -0
  805. data/deps/include/bullet/BulletSoftBody/btSoftBodyHelpers.cpp +1055 -0
  806. data/deps/include/bullet/BulletSoftBody/btSoftBodyHelpers.h +143 -0
  807. data/deps/include/bullet/BulletSoftBody/btSoftBodyInternals.h +930 -0
  808. data/deps/include/bullet/BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.cpp +134 -0
  809. data/deps/include/bullet/BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.h +48 -0
  810. data/deps/include/bullet/BulletSoftBody/btSoftBodySolverVertexBuffer.h +165 -0
  811. data/deps/include/bullet/BulletSoftBody/btSoftBodySolvers.h +154 -0
  812. data/deps/include/bullet/BulletSoftBody/btSoftRigidCollisionAlgorithm.cpp +84 -0
  813. data/deps/include/bullet/BulletSoftBody/btSoftRigidCollisionAlgorithm.h +75 -0
  814. data/deps/include/bullet/BulletSoftBody/btSoftRigidDynamicsWorld.cpp +365 -0
  815. data/deps/include/bullet/BulletSoftBody/btSoftRigidDynamicsWorld.h +107 -0
  816. data/deps/include/bullet/BulletSoftBody/btSoftSoftCollisionAlgorithm.cpp +47 -0
  817. data/deps/include/bullet/BulletSoftBody/btSoftSoftCollisionAlgorithm.h +69 -0
  818. data/deps/include/bullet/BulletSoftBody/btSparseSDF.h +306 -0
  819. data/deps/include/bullet/BulletSoftBody/cmake_install.cmake +29 -0
  820. data/deps/include/bullet/BulletSoftBody/premake4.lua +11 -0
  821. data/deps/include/bullet/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
  822. data/deps/include/bullet/CMakeFiles/progress.marks +1 -0
  823. data/deps/include/bullet/CMakeLists.txt +28 -0
  824. data/deps/include/bullet/LinearMath/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
  825. data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/CXX.includecache +154 -0
  826. data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/DependInfo.cmake +35 -0
  827. data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/btAlignedAllocator.obj +0 -0
  828. data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/btConvexHull.obj +0 -0
  829. data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/btConvexHullComputer.obj +0 -0
  830. data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/btGeometryUtil.obj +0 -0
  831. data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/btQuickprof.obj +0 -0
  832. data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/btSerializer.obj +0 -0
  833. data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/build.make +239 -0
  834. data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/cmake_clean.cmake +15 -0
  835. data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/cmake_clean_target.cmake +3 -0
  836. data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/depend.internal +38 -0
  837. data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/depend.make +38 -0
  838. data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/flags.make +8 -0
  839. data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/includes_CXX.rsp +1 -0
  840. data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/link.txt +2 -0
  841. data/deps/include/bullet/LinearMath/CMakeFiles/LinearMath.dir/progress.make +7 -0
  842. data/deps/include/bullet/LinearMath/CMakeFiles/progress.marks +1 -0
  843. data/deps/include/bullet/LinearMath/CMakeLists.txt +66 -0
  844. data/deps/include/bullet/LinearMath/Makefile +245 -0
  845. data/deps/include/bullet/LinearMath/btAabbUtil2.h +236 -0
  846. data/deps/include/bullet/LinearMath/btAlignedAllocator.cpp +181 -0
  847. data/deps/include/bullet/LinearMath/btAlignedAllocator.h +107 -0
  848. data/deps/include/bullet/LinearMath/btAlignedObjectArray.h +494 -0
  849. data/deps/include/bullet/LinearMath/btConvexHull.cpp +1174 -0
  850. data/deps/include/bullet/LinearMath/btConvexHull.h +241 -0
  851. data/deps/include/bullet/LinearMath/btConvexHullComputer.cpp +2751 -0
  852. data/deps/include/bullet/LinearMath/btConvexHullComputer.h +103 -0
  853. data/deps/include/bullet/LinearMath/btDefaultMotionState.h +40 -0
  854. data/deps/include/bullet/LinearMath/btGeometryUtil.cpp +185 -0
  855. data/deps/include/bullet/LinearMath/btGeometryUtil.h +42 -0
  856. data/deps/include/bullet/LinearMath/btGrahamScan2dConvexHull.h +110 -0
  857. data/deps/include/bullet/LinearMath/btHashMap.h +450 -0
  858. data/deps/include/bullet/LinearMath/btIDebugDraw.h +418 -0
  859. data/deps/include/bullet/LinearMath/btList.h +73 -0
  860. data/deps/include/bullet/LinearMath/btMatrix3x3.h +771 -0
  861. data/deps/include/bullet/LinearMath/btMinMax.h +71 -0
  862. data/deps/include/bullet/LinearMath/btMotionState.h +40 -0
  863. data/deps/include/bullet/LinearMath/btPoolAllocator.h +121 -0
  864. data/deps/include/bullet/LinearMath/btQuadWord.h +180 -0
  865. data/deps/include/bullet/LinearMath/btQuaternion.h +430 -0
  866. data/deps/include/bullet/LinearMath/btQuickprof.cpp +566 -0
  867. data/deps/include/bullet/LinearMath/btQuickprof.h +203 -0
  868. data/deps/include/bullet/LinearMath/btRandom.h +42 -0
  869. data/deps/include/bullet/LinearMath/btScalar.h +539 -0
  870. data/deps/include/bullet/LinearMath/btSerializer.cpp +841 -0
  871. data/deps/include/bullet/LinearMath/btSerializer.h +639 -0
  872. data/deps/include/bullet/LinearMath/btStackAlloc.h +116 -0
  873. data/deps/include/bullet/LinearMath/btTransform.h +307 -0
  874. data/deps/include/bullet/LinearMath/btTransformUtil.h +228 -0
  875. data/deps/include/bullet/LinearMath/btVector3.h +766 -0
  876. data/deps/include/bullet/LinearMath/cmake_install.cmake +29 -0
  877. data/deps/include/bullet/LinearMath/ibmsdk/Makefile +39 -0
  878. data/deps/include/bullet/LinearMath/premake4.lua +11 -0
  879. data/deps/include/bullet/Makefile +122 -0
  880. data/deps/include/bullet/Makefile.am +554 -0
  881. data/deps/include/bullet/MiniCL/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
  882. data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/CXX.includecache +332 -0
  883. data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/DependInfo.cmake +32 -0
  884. data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/MiniCL.obj +0 -0
  885. data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/MiniCLTask/MiniCLTask.obj +0 -0
  886. data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/MiniCLTaskScheduler.obj +0 -0
  887. data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/build.make +158 -0
  888. data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/cmake_clean.cmake +12 -0
  889. data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/cmake_clean_target.cmake +3 -0
  890. data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/depend.internal +70 -0
  891. data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/depend.make +70 -0
  892. data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/flags.make +8 -0
  893. data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/includes_CXX.rsp +1 -0
  894. data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/link.txt +2 -0
  895. data/deps/include/bullet/MiniCL/CMakeFiles/MiniCL.dir/progress.make +4 -0
  896. data/deps/include/bullet/MiniCL/CMakeFiles/progress.marks +1 -0
  897. data/deps/include/bullet/MiniCL/CMakeLists.txt +66 -0
  898. data/deps/include/bullet/MiniCL/Makefile +191 -0
  899. data/deps/include/bullet/MiniCL/MiniCL.cpp +784 -0
  900. data/deps/include/bullet/MiniCL/MiniCLTask/MiniCLTask.cpp +74 -0
  901. data/deps/include/bullet/MiniCL/MiniCLTask/MiniCLTask.h +62 -0
  902. data/deps/include/bullet/MiniCL/MiniCLTaskScheduler.cpp +519 -0
  903. data/deps/include/bullet/MiniCL/MiniCLTaskScheduler.h +194 -0
  904. data/deps/include/bullet/MiniCL/cl.h +867 -0
  905. data/deps/include/bullet/MiniCL/cl_MiniCL_Defs.h +439 -0
  906. data/deps/include/bullet/MiniCL/cl_gl.h +113 -0
  907. data/deps/include/bullet/MiniCL/cl_platform.h +254 -0
  908. data/deps/include/bullet/MiniCL/cmake_install.cmake +29 -0
  909. data/deps/include/bullet/btBulletCollisionCommon.h +69 -0
  910. data/deps/include/bullet/btBulletDynamicsCommon.h +48 -0
  911. data/deps/include/bullet/cmake_install.cmake +40 -0
  912. data/deps/include/bullet/ibmsdk/Makefile +16 -0
  913. data/deps/include/bullet/vectormath/scalar/boolInVec.h +225 -0
  914. data/deps/include/bullet/vectormath/scalar/floatInVec.h +343 -0
  915. data/deps/include/bullet/vectormath/scalar/mat_aos.h +1630 -0
  916. data/deps/include/bullet/vectormath/scalar/quat_aos.h +433 -0
  917. data/deps/include/bullet/vectormath/scalar/vec_aos.h +1426 -0
  918. data/deps/include/bullet/vectormath/scalar/vectormath_aos.h +1872 -0
  919. data/deps/include/bullet/vectormath/sse/boolInVec.h +247 -0
  920. data/deps/include/bullet/vectormath/sse/floatInVec.h +340 -0
  921. data/deps/include/bullet/vectormath/sse/mat_aos.h +2190 -0
  922. data/deps/include/bullet/vectormath/sse/quat_aos.h +579 -0
  923. data/deps/include/bullet/vectormath/sse/vec_aos.h +1455 -0
  924. data/deps/include/bullet/vectormath/sse/vecidx_aos.h +80 -0
  925. data/deps/include/bullet/vectormath/sse/vectormath_aos.h +2547 -0
  926. data/deps/include/bullet/vectormath/vmInclude.h +27 -0
  927. data/deps/lib/libBulletCollision.a +0 -0
  928. data/deps/lib/libBulletDynamics.a +0 -0
  929. data/deps/lib/libBulletFileLoader.a +0 -0
  930. data/deps/lib/libBulletMultiThreaded.a +0 -0
  931. data/deps/lib/libBulletSoftBody.a +0 -0
  932. data/deps/lib/libBulletSoftBodySolvers_OpenCL_Mini.a +0 -0
  933. data/deps/lib/libBulletWorldImporter.a +0 -0
  934. data/deps/lib/libConvexDecomposition.a +0 -0
  935. data/deps/lib/libGIMPACTUtils.a +0 -0
  936. data/deps/lib/libHACD.a +0 -0
  937. data/deps/lib/libLinearMath.a +0 -0
  938. data/deps/lib/libMiniCL.a +0 -0
  939. data/lib/Bullet.so +0 -0
  940. data/lib/BulletConfig.rb +28 -0
  941. data/lib/Version.rb +5 -0
  942. data/sample/hello_bullet/HelloBullet.rb +170 -0
  943. 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
+