33#define BT_SOFTBODY_TRIANGLE_EXTRUSION btScalar(0.06)
37 m_isSwapped(isSwapped),
38 m_btSoftBodyTriangleCallback(ci.m_dispatcher1, body0Wrap, body1Wrap, isSwapped)
68 for (
int i = 0; i < m_shapeCache.size(); i++)
73 m_softBody->getWorldInfo()->m_sparsesdf.RemoveReferences(tmp->
m_childShape);
91 const btTransform& tr = m_triBody->getWorldTransform();
92 m_dispatchInfoPtr->m_debugDraw->drawLine(tr(triangle[0]), tr(triangle[1]),
color);
93 m_dispatchInfoPtr->m_debugDraw->drawLine(tr(triangle[1]), tr(triangle[2]),
color);
94 m_dispatchInfoPtr->m_debugDraw->drawLine(tr(triangle[2]), tr(triangle[0]),
color);
100 btTriIndex* shapeIndex = m_shapeCache[triKey];
107 tm->setUserPointer(m_triBody->getCollisionShape()->getUserPointer());
109 btCollisionObjectWrapper softBody(0, m_softBody->getCollisionShape(), m_softBody, m_softBody->getWorldTransform(), -1, -1);
115 colAlgo->
processCollision(&softBody, &triBody, *m_dispatchInfoPtr, m_resultOut);
129 btVector3 normal = (triangle[1] - triangle[0]).
cross(triangle[2] - triangle[0]);
134 btVector3 pts[6] = {triangle[0] + normal,
135 triangle[1] + normal,
136 triangle[2] + normal,
137 triangle[0] - normal,
138 triangle[1] - normal,
139 triangle[2] - normal};
149 tm->setUserPointer(m_triBody->getCollisionShape()->getUserPointer());
151 btCollisionObjectWrapper softBody(0, m_softBody->getCollisionShape(), m_softBody, m_softBody->getWorldTransform(), -1, -1);
157 colAlgo->
processCollision(&softBody, &triBody, *m_dispatchInfoPtr, m_resultOut);
162 m_shapeCache.insert(triKey, triIndex);
168 m_dispatchInfoPtr = &dispatchInfo;
170 m_resultOut = resultOut;
172 btVector3 aabbWorldSpaceMin, aabbWorldSpaceMax;
173 m_softBody->getAabb(aabbWorldSpaceMin, aabbWorldSpaceMax);
175 btVector3 softBodyCenter = (aabbWorldSpaceMax + aabbWorldSpaceMin) *
btScalar(0.5);
178 softTransform.setIdentity();
179 softTransform.setOrigin(softBodyCenter);
182 convexInTriangleSpace = triBodyWrap->
getWorldTransform().inverse() * softTransform;
183 btTransformAabb(halfExtents, m_collisionMarginTriangle, convexInTriangleSpace, m_aabbMin, m_aabbMax);
188 m_btSoftBodyTriangleCallback.clearCache();
203 btScalar collisionMarginTriangle = concaveShape->getMargin();
206 m_btSoftBodyTriangleCallback.setTimeStepAndCounters(collisionMarginTriangle, triBody, dispatchInfo, resultOut);
208 concaveShape->processAllTriangles(&m_btSoftBodyTriangleCallback, m_btSoftBodyTriangleCallback.getAabbMin(), m_btSoftBodyTriangleCallback.getAabbMax());
226 btScalar squareMot0 = (convexbody->getInterpolationWorldTransform().
getOrigin() - convexbody->getWorldTransform().getOrigin()).length2();
236 btTransform triInv = triBody->getWorldTransform().inverse();
237 btTransform convexFromLocal = triInv * convexbody->getWorldTransform();
238 btTransform convexToLocal = triInv * convexbody->getInterpolationWorldTransform();
250 : m_ccdSphereFromTrans(from),
251 m_ccdSphereToTrans(to),
252 m_ccdSphereRadius(ccdSphereRadius),
275 ident, ident, castResult))
283 if (triBody->getCollisionShape()->isConcave())
285 btVector3 rayAabbMin = convexFromLocal.getOrigin();
286 rayAabbMin.setMin(convexToLocal.getOrigin());
287 btVector3 rayAabbMax = convexFromLocal.getOrigin();
288 rayAabbMax.setMax(convexToLocal.getOrigin());
289 btScalar ccdRadius0 = convexbody->getCcdSweptSphereRadius();
290 rayAabbMin -=
btVector3(ccdRadius0, ccdRadius0, ccdRadius0);
291 rayAabbMax +=
btVector3(ccdRadius0, ccdRadius0, ccdRadius0);
294 LocalTriangleSphereCastCallback raycastCallback(convexFromLocal, convexToLocal,
295 convexbody->getCcdSweptSphereRadius(), curHitFraction);
297 raycastCallback.m_hitFraction = convexbody->getHitFraction();
305 triangleMesh->processAllTriangles(&raycastCallback, rayAabbMin, rayAabbMax);
308 if (raycastCallback.m_hitFraction < convexbody->getHitFraction())
310 convexbody->setHitFraction(raycastCallback.m_hitFraction);
311 return raycastCallback.m_hitFraction;
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Brightness Control the brightness and contrast of the input color Vector Map input vector components with curves Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert Invert a color
SIMD_FORCE_INLINE void btTransformAabb(const btVector3 &halfExtents, btScalar margin, const btTransform &t, btVector3 &aabbMinOut, btVector3 &aabbMaxOut)
btScalar m_hitFraction
time of impact calculation
btScalar getCcdSquareMotionThreshold() const
btCollisionShape
The btCollisionShape class provides an interface for collision shapes that can be shared among btColl...
virtual void processTriangle(btVector3 *triangle, int partId, int triangleIndex)
btConvexHullShape(const btScalar *points=0, int numPoints=0, int stride=sizeof(btVector3))
@ BT_CLOSEST_POINT_ALGORITHMS
@ BT_CONTACT_POINT_ALGORITHMS
SIMD_FORCE_INLINE const btScalar & getX() const
Return the x value.
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
#define BT_SOFTBODY_TRIANGLE_EXTRUSION
btSphereShape(btScalar radius)
btVector3
btVector3 can be used to represent 3D points and vectors. It has an un-used w component to suit 16-by...
virtual void processCollision(const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, const btDispatcherInfo &dispatchInfo, btManifoldResult *resultOut)=0
virtual ~btCollisionAlgorithm()
virtual void freeCollisionAlgorithm(void *ptr)=0
virtual btCollisionAlgorithm * findAlgorithm(const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, btPersistentManifold *sharedManifold, ebtDispatcherQueryType queryType)=0
btManifoldResult is a helper class to manage contact results.
virtual void processCollision(const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, const btDispatcherInfo &dispatchInfo, btManifoldResult *resultOut)
btSoftBodyConcaveCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo &ci, const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, bool isSwapped)
btScalar calculateTimeOfImpact(btCollisionObject *body0, btCollisionObject *body1, const btDispatcherInfo &dispatchInfo, btManifoldResult *resultOut)
virtual ~btSoftBodyConcaveCollisionAlgorithm()
virtual void processTriangle(btVector3 *triangle, int partId, int triangleIndex)
btSoftBodyTriangleCallback(btDispatcher *dispatcher, const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, bool isSwapped)
virtual ~btSoftBodyTriangleCallback()
void setTimeStepAndCounters(btScalar collisionMarginTriangle, const btCollisionObjectWrapper *triObjWrap, const btDispatcherInfo &dispatchInfo, btManifoldResult *resultOut)
virtual bool calcTimeOfImpact(const btTransform &fromA, const btTransform &toA, const btTransform &fromB, const btTransform &toB, CastResult &result)
ccl_device_inline float cross(const float2 a, const float2 b)
btDispatcher * m_dispatcher1
SIMD_FORCE_INLINE const btCollisionShape * getCollisionShape() const
SIMD_FORCE_INLINE const btTransform & getWorldTransform() const
SIMD_FORCE_INLINE const btCollisionObject * getCollisionObject() const
class btCollisionShape * m_childShape