Changeset View
Changeset View
Standalone View
Standalone View
extern/bullet2/src/BulletDynamics/Vehicle/btWheelInfo.cpp
| /* | /* | ||||
| * Copyright (c) 2005 Erwin Coumans http://continuousphysics.com/Bullet/ | * Copyright (c) 2005 Erwin Coumans http://continuousphysics.com/Bullet/ | ||||
| * | * | ||||
| * Permission to use, copy, modify, distribute and sell this software | * Permission to use, copy, modify, distribute and sell this software | ||||
| * and its documentation for any purpose is hereby granted without fee, | * and its documentation for any purpose is hereby granted without fee, | ||||
| * provided that the above copyright notice appear in all copies. | * provided that the above copyright notice appear in all copies. | ||||
| * Erwin Coumans makes no representations about the suitability | * Erwin Coumans makes no representations about the suitability | ||||
| * of this software for any purpose. | * of this software for any purpose. | ||||
| * It is provided "as is" without express or implied warranty. | * It is provided "as is" without express or implied warranty. | ||||
| */ | */ | ||||
| #include "btWheelInfo.h" | #include "btWheelInfo.h" | ||||
| #include "BulletDynamics/Dynamics/btRigidBody.h" // for pointvelocity | #include "BulletDynamics/Dynamics/btRigidBody.h" // for pointvelocity | ||||
| btScalar btWheelInfo::getSuspensionRestLength() const | btScalar btWheelInfo::getSuspensionRestLength() const | ||||
| { | { | ||||
| return m_suspensionRestLength1; | return m_suspensionRestLength1; | ||||
| } | } | ||||
| void btWheelInfo::updateWheel(const btRigidBody& chassis,RaycastInfo& raycastInfo) | void btWheelInfo::updateWheel(const btRigidBody& chassis, RaycastInfo& raycastInfo) | ||||
| { | { | ||||
| (void)raycastInfo; | (void)raycastInfo; | ||||
| if (m_raycastInfo.m_isInContact) | if (m_raycastInfo.m_isInContact) | ||||
| { | { | ||||
| btScalar project= m_raycastInfo.m_contactNormalWS.dot( m_raycastInfo.m_wheelDirectionWS ); | btScalar project = m_raycastInfo.m_contactNormalWS.dot(m_raycastInfo.m_wheelDirectionWS); | ||||
| btVector3 chassis_velocity_at_contactPoint; | btVector3 chassis_velocity_at_contactPoint; | ||||
| btVector3 relpos = m_raycastInfo.m_contactPointWS - chassis.getCenterOfMassPosition(); | btVector3 relpos = m_raycastInfo.m_contactPointWS - chassis.getCenterOfMassPosition(); | ||||
| chassis_velocity_at_contactPoint = chassis.getVelocityInLocalPoint( relpos ); | chassis_velocity_at_contactPoint = chassis.getVelocityInLocalPoint(relpos); | ||||
| btScalar projVel = m_raycastInfo.m_contactNormalWS.dot( chassis_velocity_at_contactPoint ); | btScalar projVel = m_raycastInfo.m_contactNormalWS.dot(chassis_velocity_at_contactPoint); | ||||
| if ( project >= btScalar(-0.1)) | if (project >= btScalar(-0.1)) | ||||
| { | { | ||||
| m_suspensionRelativeVelocity = btScalar(0.0); | m_suspensionRelativeVelocity = btScalar(0.0); | ||||
| m_clippedInvContactDotSuspension = btScalar(1.0) / btScalar(0.1); | m_clippedInvContactDotSuspension = btScalar(1.0) / btScalar(0.1); | ||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| btScalar inv = btScalar(-1.) / project; | btScalar inv = btScalar(-1.) / project; | ||||
| m_suspensionRelativeVelocity = projVel * inv; | m_suspensionRelativeVelocity = projVel * inv; | ||||
| m_clippedInvContactDotSuspension = inv; | m_clippedInvContactDotSuspension = inv; | ||||
| } | } | ||||
| } | } | ||||
| else // Not in contact : position wheel in a nice (rest length) position | else // Not in contact : position wheel in a nice (rest length) position | ||||
| { | { | ||||
| m_raycastInfo.m_suspensionLength = this->getSuspensionRestLength(); | m_raycastInfo.m_suspensionLength = this->getSuspensionRestLength(); | ||||
| m_suspensionRelativeVelocity = btScalar(0.0); | m_suspensionRelativeVelocity = btScalar(0.0); | ||||
| m_raycastInfo.m_contactNormalWS = -m_raycastInfo.m_wheelDirectionWS; | m_raycastInfo.m_contactNormalWS = -m_raycastInfo.m_wheelDirectionWS; | ||||
| m_clippedInvContactDotSuspension = btScalar(1.0); | m_clippedInvContactDotSuspension = btScalar(1.0); | ||||
| } | } | ||||
| } | } | ||||