33 #define BT_SOFTBODY_TRIANGLE_EXTRUSION btScalar(0.06)
38 m_btSoftBodyTriangleCallback(ci.m_dispatcher1, body0Wrap, body1Wrap, isSwapped)
68 for (
int i = 0; i < m_shapeCache.
size(); i++)
91 const btTransform& tr = m_triBody->getWorldTransform();
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);
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);
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 Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input 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 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)
const btDispatcherInfo * m_dispatchInfoPtr
btDispatcher * m_dispatcher
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)
SIMD_FORCE_INLINE btScalar length2() const
Return the length of the vector squared.
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
void insert(const Key &key, const Value &value)
const Value * getAtIndex(int index) const
virtual void drawLine(const btVector3 &from, const btVector3 &to, const btVector3 &color)=0
virtual int getDebugMode() const =0
btManifoldResult is a helper class to manage contact results.
btScalar m_closestPointDistanceThreshold
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)
SIMD_FORCE_INLINE const btVector3 & getAabbMin() const
SIMD_FORCE_INLINE const btVector3 & getAabbMax() const
virtual ~btSoftBodyTriangleCallback()
void setTimeStepAndCounters(btScalar collisionMarginTriangle, const btCollisionObjectWrapper *triObjWrap, const btDispatcherInfo &dispatchInfo, btManifoldResult *resultOut)
btSoftBodyWorldInfo * getWorldInfo()
virtual void getAabb(btVector3 &aabbMin, btVector3 &aabbMax) const
virtual bool calcTimeOfImpact(const btTransform &fromA, const btTransform &toA, const btTransform &fromB, const btTransform &toB, CastResult &result)
SyclQueue void void size_t num_bytes void
IconTextureDrawCall normal
vec_base< T, 3 > cross(const vec_base< T, 3 > &a, const vec_base< T, 3 > &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 btIDebugDraw * m_debugDraw
btSparseSdf< 3 > m_sparsesdf
int RemoveReferences(btCollisionShape *pcs)
class btCollisionShape * m_childShape