Home | History | Annotate | Download | only in Vehicle
      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 
     82 	btWheelInfo() {}
     83 
     84 	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