Bullet Collision Detection & Physics Library
|
Go to the documentation of this file.
25 #define ROLLING_INFLUENCE_FIX
35 : m_vehicleRaycaster(raycaster),
150 if (interpolatedTransform && (
getRigidBody()->getMotionState()))
193 btScalar hitDistance = param * raylen;
212 btVector3 chassis_velocity_at_contactPoint;
402 btScalar length_diff = (susp_length - current_length);
412 if (projected_rel_vel <
btScalar(0.0))
420 force -= susp_damping * projected_rel_vel;
500 int numWheelsOnGround = 0;
532 m_axle[i] -= surfNormalWS * proj;
550 bool sliding =
false;
567 btScalar defaultRollingFrictionImpulse = 0.f;
587 btScalar maximpSquared = maximp * maximpSide;
594 btScalar impulseSquared = (x * x + y * y);
596 if (impulseSquared > maximpSquared)
645 #if defined ROLLING_INFLUENCE_FIX // fix. It only worked if car's up was along Y - VT.
647 rel_pos -= vChassisWorldUp * (vChassisWorldUp.
dot(rel_pos) * (1.f - wheelInfo.
m_rollInfluence));
682 debugDrawer->
drawLine(wheelPosWS, wheelPosWS + axle, wheelColor);
btScalar m_suspensionLength
virtual void * castRay(const btVector3 &from, const btVector3 &to, btVehicleRaycasterResult &result)
void btSetMax(T &a, const T &b)
btAlignedObjectArray< btWheelInfo > m_wheelInfo
The btRigidBody is the main class for rigid body objects.
btTransform m_worldTransform
btScalar sideFrictionStiffness2
btScalar m_suspensionRelativeVelocity
The btQuaternion implements quaternion to perform linear algebra rotations in combination with btMatr...
btScalar length() const
Return the length of the vector.
btScalar m_maxSuspensionTravelCm
btDynamicsWorld * m_dynamicsWorld
void setValue(const btScalar &_x, const btScalar &_y, const btScalar &_z)
btVehicleRaycaster is provides interface for between vehicle simulation and raycasting
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
btAlignedObjectArray< btScalar > m_forwardImpulse
btVector3 m_chassisConnectionCS
btVector3 m_hitNormalInWorld
btVector3 cross(const btVector3 &v) const
Return the cross product between this and another vector.
btScalar rayCast(btWheelInfo &wheel)
virtual void getWorldTransform(btTransform &worldTrans) const =0
const btTransform & getChassisWorldTransform() const
btScalar dot(const btVector3 &v) const
Return the dot product.
btScalar m_suspensionStiffness
btAlignedObjectArray< btVector3 > m_forwardWS
btTransform m_worldTransform
void updateSuspension(btScalar deltaTime)
btRigidBody * getRigidBody()
static btRigidBody & getFixedBody()
btScalar calcRollingFriction(btWheelContactPoint &contactPoint, int numWheelsOnGround)
const btTransform & getCenterOfMassTransform() const
btVector3 m_contactNormalWS
btScalar getSuspensionRestLength() const
btScalar m_suspensionDamping
btScalar m_maxSuspensionForce
btScalar m_suspensionStiffness
btScalar m_suspensionRestLength
btScalar m_closestHitFraction
The btIDebugDraw interface class allows hooking up a debug renderer to visually debug simulations.
void debugDraw(btIDebugDraw *debugDrawer)
btActionInterface interface
btScalar m_wheelsSuspensionForce
btScalar m_maxSuspensionTravelCm
btScalar m_suspensionStiffness
btScalar m_wheelsDampingCompression
void updateWheelTransform(int wheelIndex, bool interpolatedTransform=true)
void resize(int newsize, const T &fillData=T())
btRaycastVehicle(const btVehicleTuning &tuning, btRigidBody *chassis, btVehicleRaycaster *raycaster)
The btMatrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with...
btVector3 m_wheelDirectionWS
btScalar getInvMass() const
void btSetMin(T &a, const T &b)
btScalar m_suspensionCompression
btVector3 getColumn(int i) const
Get a column of the matrix as a vector.
const btCollisionObject * m_collisionObject
btVector3 can be used to represent 3D points and vectors.
btScalar m_wheelsDampingRelaxation
const btVector3 & getLinearVelocity() const
bool hasContactResponse() const
btVector3 getVelocityInLocalPoint(const btVector3 &rel_pos) const
virtual void * castRay(const btVector3 &from, const btVector3 &to, btVehicleRaycasterResult &result)=0
btWheelInfo & addWheel(const btVector3 &connectionPointCS0, const btVector3 &wheelDirectionCS0, const btVector3 &wheelAxleCS, btScalar suspensionRestLength, btScalar wheelRadius, const btVehicleTuning &tuning, bool isFrontWheel)
btAlignedObjectArray< btVector3 > m_axle
btScalar m_maxSuspensionForce
btVector3 m_chassisConnectionPointCS
btScalar m_currentVehicleSpeedKmHour
virtual void drawLine(const btVector3 &from, const btVector3 &to, const btVector3 &color)=0
void setBrake(btScalar brake, int wheelIndex)
virtual ~btRaycastVehicle()
virtual void updateFriction(btScalar timeStep)
btVector3 m_hitPointWorld
void setSteeringValue(btScalar steering, int wheel)
btScalar m_maxSuspensionTravelCm
btVector3 m_hitPointInWorld
virtual void updateVehicle(btScalar step)
void setMassProps(btScalar mass, const btVector3 &inertia)
btAlignedObjectArray< btScalar > m_sideImpulse
btScalar m_wheelsDampingCompression
btVector3 m_wheelDirectionCS
btScalar m_maxSuspensionForce
btVector3 m_wheelDirectionCS
btScalar m_wheelsDampingRelaxation
btVector3 m_contactPointWS
const btVector3 & getCenterOfMassPosition() const
void defaultInit(const btVehicleTuning &tuning)
btVector3 m_hitNormalWorld
btScalar m_clippedInvContactDotSuspension
const btWheelInfo & getWheelInfo(int index) const
void applyImpulse(const btVector3 &impulse, const btVector3 &rel_pos)
void push_back(const T &_Val)
btVehicleRaycaster * m_vehicleRaycaster
btWheelInfo contains information per wheel about friction and suspension.
btScalar computeImpulseDenominator(const btVector3 &pos, const btVector3 &normal) const
btScalar btSqrt(btScalar y)
RaycastInfo m_raycastInfo
btVector3 & normalize()
Normalize this vector x^2 + y^2 + z^2 = 1.
static const btRigidBody * upcast(const btCollisionObject *colObj)
to keep collision detection and dynamics separate we don't store a rigidbody pointer but a rigidbody ...
virtual void rayTest(const btVector3 &rayFromWorld, const btVector3 &rayToWorld, RayResultCallback &resultCallback) const
rayTest performs a raycast on all objects in the btCollisionWorld, and calls the resultCallback This ...
void updateWheelTransformsWS(btWheelInfo &wheel, bool interpolatedTransform=true)
btMotionState * getMotionState()
btRigidBody * m_chassisBody
btScalar getSteeringValue(int wheel) const
const btTransform & getWheelTransformWS(int wheelIndex) const
int size() const
return the number of elements in the array
void applyEngineForce(btScalar force, int wheel)