• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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