1 /* 2 * Copyright (c) 2005 Erwin Coumans http://continuousphysics.com/Bullet/ 3 * 4 * Permission to use, copy, modify, distribute and sell this software 5 * and its documentation for any purpose is hereby granted without fee, 6 * provided that the above copyright notice appear in all copies. 7 * Erwin Coumans makes no representations about the suitability 8 * of this software for any purpose. 9 * It is provided "as is" without express or implied warranty. 10 */ 11 #ifndef BT_WHEEL_INFO_H 12 #define BT_WHEEL_INFO_H 13 14 #include "LinearMath/btVector3.h" 15 #include "LinearMath/btTransform.h" 16 17 class btRigidBody; 18 19 struct btWheelInfoConstructionInfo 20 { 21 btVector3 m_chassisConnectionCS; 22 btVector3 m_wheelDirectionCS; 23 btVector3 m_wheelAxleCS; 24 btScalar m_suspensionRestLength; 25 btScalar m_maxSuspensionTravelCm; 26 btScalar m_wheelRadius; 27 28 btScalar m_suspensionStiffness; 29 btScalar m_wheelsDampingCompression; 30 btScalar m_wheelsDampingRelaxation; 31 btScalar m_frictionSlip; 32 btScalar m_maxSuspensionForce; 33 bool m_bIsFrontWheel; 34 35 }; 36 37 /// btWheelInfo contains information per wheel about friction and suspension. 38 struct btWheelInfo 39 { 40 struct RaycastInfo 41 { 42 //set by raycaster 43 btVector3 m_contactNormalWS;//contactnormal 44 btVector3 m_contactPointWS;//raycast hitpoint 45 btScalar m_suspensionLength; 46 btVector3 m_hardPointWS;//raycast starting point 47 btVector3 m_wheelDirectionWS; //direction in worldspace 48 btVector3 m_wheelAxleWS; // axle in worldspace 49 bool m_isInContact; 50 void* m_groundObject; //could be general void* ptr 51 }; 52 53 RaycastInfo m_raycastInfo; 54 55 btTransform m_worldTransform; 56 57 btVector3 m_chassisConnectionPointCS; //const 58 btVector3 m_wheelDirectionCS;//const 59 btVector3 m_wheelAxleCS; // const or modified by steering 60 btScalar m_suspensionRestLength1;//const 61 btScalar m_maxSuspensionTravelCm; 62 btScalar getSuspensionRestLength() const; 63 btScalar m_wheelsRadius;//const 64 btScalar m_suspensionStiffness;//const 65 btScalar m_wheelsDampingCompression;//const 66 btScalar m_wheelsDampingRelaxation;//const 67 btScalar m_frictionSlip; 68 btScalar m_steering; 69 btScalar m_rotation; 70 btScalar m_deltaRotation; 71 btScalar m_rollInfluence; 72 btScalar m_maxSuspensionForce; 73 74 btScalar m_engineForce; 75 76 btScalar m_brake; 77 78 bool m_bIsFrontWheel; 79 80 void* m_clientInfo;//can be used to store pointer to sync transforms... 81 btWheelInfobtWheelInfo82 btWheelInfo() {} 83 btWheelInfobtWheelInfo84 btWheelInfo(btWheelInfoConstructionInfo& ci) 85 86 { 87 88 m_suspensionRestLength1 = ci.m_suspensionRestLength; 89 m_maxSuspensionTravelCm = ci.m_maxSuspensionTravelCm; 90 91 m_wheelsRadius = ci.m_wheelRadius; 92 m_suspensionStiffness = ci.m_suspensionStiffness; 93 m_wheelsDampingCompression = ci.m_wheelsDampingCompression; 94 m_wheelsDampingRelaxation = ci.m_wheelsDampingRelaxation; 95 m_chassisConnectionPointCS = ci.m_chassisConnectionCS; 96 m_wheelDirectionCS = ci.m_wheelDirectionCS; 97 m_wheelAxleCS = ci.m_wheelAxleCS; 98 m_frictionSlip = ci.m_frictionSlip; 99 m_steering = btScalar(0.); 100 m_engineForce = btScalar(0.); 101 m_rotation = btScalar(0.); 102 m_deltaRotation = btScalar(0.); 103 m_brake = btScalar(0.); 104 m_rollInfluence = btScalar(0.1); 105 m_bIsFrontWheel = ci.m_bIsFrontWheel; 106 m_maxSuspensionForce = ci.m_maxSuspensionForce; 107 108 } 109 110 void updateWheel(const btRigidBody& chassis,RaycastInfo& raycastInfo); 111 112 btScalar m_clippedInvContactDotSuspension; 113 btScalar m_suspensionRelativeVelocity; 114 //calculated by suspension 115 btScalar m_wheelsSuspensionForce; 116 btScalar m_skidInfo; 117 118 }; 119 120 #endif //BT_WHEEL_INFO_H 121 122