58 return ClosestRayResultCallback::addSingleResult(rayResult, normalInWorldSpace);
82 if (normalInWorldSpace)
98 return ClosestConvexResultCallback::addSingleResult(convexResult, normalInWorldSpace);
114 return direction - (
btScalar(2.0) * direction.dot(normal)) * normal;
122 btScalar magnitude = direction.dot(normal);
123 return normal * magnitude;
137 m_up.setValue(0.0f, 0.0f, 1.0f);
168btKinematicCharacterController::~btKinematicCharacterController()
177bool btKinematicCharacterController::recoverFromPenetration(
btCollisionWorld* collisionWorld)
194 bool penetration =
false;
210 if ((obj0 && !obj0->hasContactResponse()) || (obj1 && !obj1->hasContactResponse()))
216 if (collisionPair->m_algorithm)
223 for (
int p = 0; p < manifold->getNumContacts(); p++)
311 int numPenetrationLoops = 0;
315 numPenetrationLoops++;
317 if (numPenetrationLoops > 4)
342 bool collides = (body0->getBroadphaseHandle()->
m_collisionFilterGroup & body1->getBroadphaseHandle()->m_collisionFilterMask) != 0;
343 collides = collides && (body1->getBroadphaseHandle()->
m_collisionFilterGroup & body0->getBroadphaseHandle()->m_collisionFilterMask);
347void btKinematicCharacterController::updateTargetPositionBasedOnCollision(
const btVector3& hitNormal,
btScalar tangentMag,
btScalar normalMag)
350 btScalar movementLength = movementDirection.length();
353 movementDirection.normalize();
356 reflectDir.normalize();
371 if (normalMag != 0.0)
373 btVector3 perpComponent = perpindicularDir *
btScalar(normalMag * movementLength);
402 while (fraction >
btScalar(0.01) && maxIter-- > 0)
446 currentDir.normalize();
469 bool runonce =
false;
504 end_double.setIdentity();
547 if (downVelocity2 > 0.0 && downVelocity2 < stepHeight && has_hit ==
true && runonce ==
false && (
m_wasOnGround || !
m_wasJumping))
553 downVelocity = stepHeight;
610void btKinematicCharacterController::setWalkDirection(
618void btKinematicCharacterController::setVelocityForTimeInterval(
633void btKinematicCharacterController::setAngularVelocity(
const btVector3& velocity)
638const btVector3& btKinematicCharacterController::getAngularVelocity()
const
643void btKinematicCharacterController::setLinearVelocity(
const btVector3& velocity)
670btVector3 btKinematicCharacterController::getLinearVelocity()
const
686 while (cache->getOverlappingPairArray().size() > 0)
688 cache->removeOverlappingPair(cache->getOverlappingPairArray()[0].m_pProxy0, cache->getOverlappingPairArray()[0].m_pProxy1, collisionWorld->
getDispatcher());
692void btKinematicCharacterController::warp(
const btVector3& origin)
696 xform.setOrigin(origin);
700void btKinematicCharacterController::preStep(
btCollisionWorld* collisionWorld)
730 xform.setRotation(orn);
838 int numPenetrationLoops = 0;
842 numPenetrationLoops++;
844 if (numPenetrationLoops > 4)
852void btKinematicCharacterController::setFallSpeed(
btScalar fallSpeed)
857void btKinematicCharacterController::setJumpSpeed(
btScalar jumpSpeed)
863void btKinematicCharacterController::setMaxJumpHeight(
btScalar maxJumpHeight)
868bool btKinematicCharacterController::canJump()
const
873void btKinematicCharacterController::jump(
const btVector3&
v)
884 currently no jumping.
886 m_rigidBody->getMotionState()->getWorldTransform (xform);
890 m_rigidBody->applyCentralImpulse (up * magnitude);
894void btKinematicCharacterController::setGravity(
const btVector3& gravity)
901btVector3 btKinematicCharacterController::getGravity()
const
906void btKinematicCharacterController::setMaxSlope(
btScalar slopeRadians)
912btScalar btKinematicCharacterController::getMaxSlope()
const
917void btKinematicCharacterController::setMaxPenetrationDepth(
btScalar d)
922btScalar btKinematicCharacterController::getMaxPenetrationDepth()
const
927bool btKinematicCharacterController::onGround()
const
932void btKinematicCharacterController::setStepHeight(
btScalar h)
937btVector3* btKinematicCharacterController::getUpAxisDirections()
941 return sUpAxisDirection;
944void btKinematicCharacterController::debugDraw(
btIDebugDraw* debugDrawer)
948void btKinematicCharacterController::setUpInterpolate(
bool value)
953void btKinematicCharacterController::setUp(
const btVector3& up)
955 if (up.length2() > 0 &&
m_gravity > 0.0f)
964void btKinematicCharacterController::setUpVector(
const btVector3& up)
971 if (up.length2() > 0)
972 m_up = up.normalized();
983 xform.setRotation(orn);
989 if (v0.length2() == 0.0f || v1.length2() == 0.0f)
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Gabor Generate Gabor noise Gradient Generate interpolated color and intensity values based on the input vector Magic Generate a psychedelic color texture Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a or normal between world
ATTR_WARN_UNUSED_RESULT const BMVert * v
int m_collisionFilterGroup
btConvexShape()
not supported on IBM SDK, until we fix the alignment of btVector3
static btVector3 getNormalizedVector(const btVector3 &v)
btScalar m_maxSlopeRadians
btConvexShape * m_convexShape
void setUp(const btVector3 &up)
void setUpVector(const btVector3 &up)
btVector3 perpindicularComponent(const btVector3 &direction, const btVector3 &normal)
btVector3 m_targetPosition
btScalar m_angularDamping
btVector3 computeReflectionDirection(const btVector3 &direction, const btVector3 &normal)
btScalar m_velocityTimeInterval
btScalar m_maxPenetrationDepth
void stepDown(btCollisionWorld *collisionWorld, btScalar dt)
btQuaternion m_targetOrientation
btManifoldArray m_manifoldArray
keep track of the contact manifolds
btVector3 m_walkDirection
this is the desired walk direction, set by the user
void stepForwardAndStrafe(btCollisionWorld *collisionWorld, const btVector3 &walkMove)
btScalar m_maxSlopeCosine
void setMaxSlope(btScalar slopeRadians)
void setStepHeight(btScalar h)
void setGravity(const btVector3 &gravity)
btScalar m_currentStepOffset
void updateTargetPositionBasedOnCollision(const btVector3 &hit_normal, btScalar tangentMag=btScalar(0.0), btScalar normalMag=btScalar(1.0))
void stepUp(btCollisionWorld *collisionWorld)
btPairCachingGhostObject * getGhostObject()
virtual bool needsCollision(const btCollisionObject *body0, const btCollisionObject *body1)
bool m_useGhostObjectSweepTest
btQuaternion m_currentOrientation
btScalar m_verticalVelocity
btVector3 m_normalizedDirection
btVector3 m_currentPosition
btVector3 parallelComponent(const btVector3 &direction, const btVector3 &normal)
bool recoverFromPenetration(btCollisionWorld *collisionWorld)
btScalar m_verticalOffset
btPairCachingGhostObject * m_ghostObject
btHashedOverlappingPairCache()
int getNumOverlappingPairs() const
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
SIMD_FORCE_INLINE btQuaternion shortestArcQuatNormalize2(btVector3 &v0, btVector3 &v1)
SIMD_FORCE_INLINE btScalar btAcos(btScalar x)
SIMD_FORCE_INLINE btScalar btCos(btScalar x)
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
SIMD_FORCE_INLINE btScalar btSin(btScalar x)
SIMD_FORCE_INLINE btScalar btFabs(btScalar x)
SIMD_FORCE_INLINE btScalar btRadians(btScalar x)
SIMD_FORCE_INLINE btScalar btPow(btScalar x, btScalar y)
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...
SIMD_FORCE_INLINE btScalar distance2(const btVector3 &v) const
Return the distance squared between the ends of this and another vector This is symantically treating...
virtual void setAabb(btBroadphaseProxy *proxy, const btVector3 &aabbMin, const btVector3 &aabbMax, btDispatcher *dispatcher)=0
CollisionWorld is interface and container for the collision detection.
btDispatcher * getDispatcher()
btDispatcherInfo & getDispatchInfo()
void convexSweepTest(const btConvexShape *castShape, const btTransform &from, const btTransform &to, ConvexResultCallback &resultCallback, btScalar allowedCcdPenetration=btScalar(0.)) const
const btBroadphaseInterface * getBroadphase() const
virtual void dispatchAllCollisionPairs(btOverlappingPairCache *pairCache, const btDispatcherInfo &dispatchInfo, btDispatcher *dispatcher)=0
virtual btScalar addSingleResult(btCollisionWorld::LocalConvexResult &convexResult, bool normalInWorldSpace)
btKinematicClosestNotMeConvexResultCallback(btCollisionObject *me, const btVector3 &up, btScalar minSlopeDot)
virtual btScalar addSingleResult(btCollisionWorld::LocalRayResult &rayResult, bool normalInWorldSpace)
btKinematicClosestNotMeRayResultCallback(btCollisionObject *me)
btScalar getDistance() const
btVector3 m_normalWorldOnB
The btQuaternion implements quaternion to perform linear algebra rotations in combination with btMatr...
ccl_device_inline float2 fabs(const float2 a)
btVector3 m_hitNormalWorld
const btCollisionObject * m_hitCollisionObject
ClosestConvexResultCallback(const btVector3 &convexFromWorld, const btVector3 &convexToWorld)
btVector3 m_hitPointWorld
ClosestRayResultCallback(const btVector3 &rayFromWorld, const btVector3 &rayToWorld)
int m_collisionFilterMask
int m_collisionFilterGroup
btScalar m_closestHitFraction
btVector3 m_hitNormalLocal
const btCollisionObject * m_hitCollisionObject
const btCollisionObject * m_collisionObject
btScalar m_allowedCcdPenetration