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 WHEEL_INFO_H |
---|
12 | #define 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(btWheelInfoConstructionInfo& ci) |
---|
83 | |
---|
84 | { |
---|
85 | |
---|
86 | m_suspensionRestLength1 = ci.m_suspensionRestLength; |
---|
87 | m_maxSuspensionTravelCm = ci.m_maxSuspensionTravelCm; |
---|
88 | |
---|
89 | m_wheelsRadius = ci.m_wheelRadius; |
---|
90 | m_suspensionStiffness = ci.m_suspensionStiffness; |
---|
91 | m_wheelsDampingCompression = ci.m_wheelsDampingCompression; |
---|
92 | m_wheelsDampingRelaxation = ci.m_wheelsDampingRelaxation; |
---|
93 | m_chassisConnectionPointCS = ci.m_chassisConnectionCS; |
---|
94 | m_wheelDirectionCS = ci.m_wheelDirectionCS; |
---|
95 | m_wheelAxleCS = ci.m_wheelAxleCS; |
---|
96 | m_frictionSlip = ci.m_frictionSlip; |
---|
97 | m_steering = btScalar(0.); |
---|
98 | m_engineForce = btScalar(0.); |
---|
99 | m_rotation = btScalar(0.); |
---|
100 | m_deltaRotation = btScalar(0.); |
---|
101 | m_brake = btScalar(0.); |
---|
102 | m_rollInfluence = btScalar(0.1); |
---|
103 | m_bIsFrontWheel = ci.m_bIsFrontWheel; |
---|
104 | m_maxSuspensionForce = ci.m_maxSuspensionForce; |
---|
105 | |
---|
106 | } |
---|
107 | |
---|
108 | void updateWheel(const btRigidBody& chassis,RaycastInfo& raycastInfo); |
---|
109 | |
---|
110 | btScalar m_clippedInvContactDotSuspension; |
---|
111 | btScalar m_suspensionRelativeVelocity; |
---|
112 | //calculated by suspension |
---|
113 | btScalar m_wheelsSuspensionForce; |
---|
114 | btScalar m_skidInfo; |
---|
115 | |
---|
116 | }; |
---|
117 | |
---|
118 | #endif //WHEEL_INFO_H |
---|
119 | |
---|