Bullet Collision Detection & Physics Library
Main Page
Namespaces
Classes
Files
File List
File Members
src
BulletDynamics
Vehicle
btRaycastVehicle.h
Go to the documentation of this file.
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_RAYCASTVEHICLE_H
12
#define BT_RAYCASTVEHICLE_H
13
14
#include "
BulletDynamics/Dynamics/btRigidBody.h
"
15
#include "
BulletDynamics/ConstraintSolver/btTypedConstraint.h
"
16
#include "
btVehicleRaycaster.h
"
17
class
btDynamicsWorld
;
18
#include "
LinearMath/btAlignedObjectArray.h
"
19
#include "
btWheelInfo.h
"
20
#include "
BulletDynamics/Dynamics/btActionInterface.h
"
21
22
class
btVehicleTuning;
23
25
class
btRaycastVehicle
:
public
btActionInterface
26
{
27
28
btAlignedObjectArray<btVector3>
m_forwardWS
;
29
btAlignedObjectArray<btVector3>
m_axle
;
30
btAlignedObjectArray<btScalar>
m_forwardImpulse
;
31
btAlignedObjectArray<btScalar>
m_sideImpulse
;
32
34
int
m_userConstraintType
;
35
int
m_userConstraintId
;
36
37
public
:
38
class
btVehicleTuning
39
{
40
public
:
41
42
btVehicleTuning
()
43
:
m_suspensionStiffness
(
btScalar
(5.88)),
44
m_suspensionCompression
(
btScalar
(0.83)),
45
m_suspensionDamping
(
btScalar
(0.88)),
46
m_maxSuspensionTravelCm
(
btScalar
(500.)),
47
m_frictionSlip
(
btScalar
(10.5)),
48
m_maxSuspensionForce
(
btScalar
(6000.))
49
{
50
}
51
btScalar
m_suspensionStiffness
;
52
btScalar
m_suspensionCompression
;
53
btScalar
m_suspensionDamping
;
54
btScalar
m_maxSuspensionTravelCm
;
55
btScalar
m_frictionSlip
;
56
btScalar
m_maxSuspensionForce
;
57
58
};
59
private
:
60
61
btScalar
m_tau
;
62
btScalar
m_damping
;
63
btVehicleRaycaster
*
m_vehicleRaycaster
;
64
btScalar
m_pitchControl
;
65
btScalar
m_steeringValue
;
66
btScalar
m_currentVehicleSpeedKmHour
;
67
68
btRigidBody
*
m_chassisBody
;
69
70
int
m_indexRightAxis
;
71
int
m_indexUpAxis
;
72
int
m_indexForwardAxis
;
73
74
void
defaultInit
(
const
btVehicleTuning
& tuning);
75
76
public
:
77
78
//constructor to create a car from an existing rigidbody
79
btRaycastVehicle
(
const
btVehicleTuning
& tuning,
btRigidBody
* chassis,
btVehicleRaycaster
* raycaster );
80
81
virtual
~btRaycastVehicle
() ;
82
83
85
virtual
void
updateAction
(
btCollisionWorld
* collisionWorld,
btScalar
step)
86
{
87
(void) collisionWorld;
88
updateVehicle
(step);
89
}
90
91
93
void
debugDraw
(
btIDebugDraw
* debugDrawer);
94
95
const
btTransform
&
getChassisWorldTransform
()
const
;
96
97
btScalar
rayCast
(
btWheelInfo
& wheel);
98
99
virtual
void
updateVehicle
(
btScalar
step);
100
101
102
void
resetSuspension
();
103
104
btScalar
getSteeringValue
(
int
wheel)
const
;
105
106
void
setSteeringValue
(
btScalar
steering,
int
wheel);
107
108
109
void
applyEngineForce
(
btScalar
force,
int
wheel);
110
111
const
btTransform
&
getWheelTransformWS
(
int
wheelIndex )
const
;
112
113
void
updateWheelTransform
(
int
wheelIndex,
bool
interpolatedTransform =
true
);
114
115
// void setRaycastWheelInfo( int wheelIndex , bool isInContact, const btVector3& hitPoint, const btVector3& hitNormal,btScalar depth);
116
117
btWheelInfo
&
addWheel
(
const
btVector3
& connectionPointCS0,
const
btVector3
& wheelDirectionCS0,
const
btVector3
& wheelAxleCS,
btScalar
suspensionRestLength,
btScalar
wheelRadius,
const
btVehicleTuning& tuning,
bool
isFrontWheel);
118
119
inline
int
getNumWheels
()
const
{
120
return
int (
m_wheelInfo
.
size
());
121
}
122
123
btAlignedObjectArray<btWheelInfo>
m_wheelInfo
;
124
125
126
const
btWheelInfo
&
getWheelInfo
(
int
index)
const
;
127
128
btWheelInfo
&
getWheelInfo
(
int
index);
129
130
void
updateWheelTransformsWS
(
btWheelInfo
& wheel ,
bool
interpolatedTransform =
true
);
131
132
133
void
setBrake
(
btScalar
brake,
int
wheelIndex);
134
135
void
setPitchControl
(
btScalar
pitch)
136
{
137
m_pitchControl
= pitch;
138
}
139
140
void
updateSuspension
(
btScalar
deltaTime);
141
142
virtual
void
updateFriction
(
btScalar
timeStep);
143
144
145
146
inline
btRigidBody
*
getRigidBody
()
147
{
148
return
m_chassisBody
;
149
}
150
151
const
btRigidBody
*
getRigidBody
()
const
152
{
153
return
m_chassisBody
;
154
}
155
156
inline
int
getRightAxis
()
const
157
{
158
return
m_indexRightAxis
;
159
}
160
inline
int
getUpAxis
()
const
161
{
162
return
m_indexUpAxis
;
163
}
164
165
inline
int
getForwardAxis
()
const
166
{
167
return
m_indexForwardAxis
;
168
}
169
170
172
btVector3
getForwardVector
()
const
173
{
174
const
btTransform
& chassisTrans =
getChassisWorldTransform
();
175
176
btVector3
forwardW (
177
chassisTrans.
getBasis
()[0][
m_indexForwardAxis
],
178
chassisTrans.
getBasis
()[1][
m_indexForwardAxis
],
179
chassisTrans.
getBasis
()[2][
m_indexForwardAxis
]);
180
181
return
forwardW;
182
}
183
185
btScalar
getCurrentSpeedKmHour
()
const
186
{
187
return
m_currentVehicleSpeedKmHour
;
188
}
189
190
virtual
void
setCoordinateSystem
(
int
rightIndex,
int
upIndex,
int
forwardIndex)
191
{
192
m_indexRightAxis
= rightIndex;
193
m_indexUpAxis
= upIndex;
194
m_indexForwardAxis
= forwardIndex;
195
}
196
197
199
int
getUserConstraintType
()
const
200
{
201
return
m_userConstraintType
;
202
}
203
204
void
setUserConstraintType
(
int
userConstraintType)
205
{
206
m_userConstraintType
= userConstraintType;
207
};
208
209
void
setUserConstraintId
(
int
uid)
210
{
211
m_userConstraintId
= uid;
212
}
213
214
int
getUserConstraintId
()
const
215
{
216
return
m_userConstraintId
;
217
}
218
219
};
220
221
class
btDefaultVehicleRaycaster
:
public
btVehicleRaycaster
222
{
223
btDynamicsWorld
*
m_dynamicsWorld
;
224
public
:
225
btDefaultVehicleRaycaster
(
btDynamicsWorld
* world)
226
:
m_dynamicsWorld
(world)
227
{
228
}
229
230
virtual
void
*
castRay
(
const
btVector3
& from,
const
btVector3
& to, btVehicleRaycasterResult& result);
231
232
};
233
234
235
#endif //BT_RAYCASTVEHICLE_H
236
Generated on Thu Oct 3 2013 18:25:06 for Bullet Collision Detection & Physics Library by
1.8.4