RavEngine
Loading...
Searching...
No Matches
PxVehicleSuspensionHelpers.h
1// Redistribution and use in source and binary forms, with or without
2// modification, are permitted provided that the following conditions
3// are met:
4// * Redistributions of source code must retain the above copyright
5// notice, this list of conditions and the following disclaimer.
6// * Redistributions in binary form must reproduce the above copyright
7// notice, this list of conditions and the following disclaimer in the
8// documentation and/or other materials provided with the distribution.
9// * Neither the name of NVIDIA CORPORATION nor the names of its
10// contributors may be used to endorse or promote products derived
11// from this software without specific prior written permission.
12//
13// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
14// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
17// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24//
25// Copyright (c) 2008-2022 NVIDIA Corporation. All rights reserved.
26// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
27// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
28
29#pragma once
30
35#include "foundation/PxTransform.h"
36
37#include "vehicle2/wheel/PxVehicleWheelParams.h"
38#include "vehicle2/wheel/PxVehicleWheelHelpers.h"
39
40#include "PxVehicleSuspensionParams.h"
41
42#if !PX_DOXYGEN
43namespace physx
44{
45namespace vehicle2
46{
47#endif
48
56PX_FORCE_INLINE PxVec3 PxVehicleComputeSuspensionDirection(const PxVehicleSuspensionParams& suspensionParams, const PxTransform& rigidBodyPose)
57{
58 const PxVec3 suspDir = rigidBodyPose.rotate(suspensionParams.suspensionTravelDir);
59 return suspDir;
60}
61
69PX_FORCE_INLINE PxTransform PxVehicleComputeWheelPoseForSuspensionQuery(const PxVehicleFrame& frame, const PxVehicleSuspensionParams& suspensionParams,
70 const PxReal steerAngle, const PxTransform& rigidBodyPose)
71{
72 //Compute the wheel pose with zero travel from attachment point, zero compliance,
73 //zero wheel pitch (ignore due to radial symmetry).
74 //Zero travel from attachment point (we want the wheel pose at the top of the suspension, i.e., at max compression)
75 PxVehicleSuspensionState suspState;
76 suspState.setToDefault();
77 //Compute the wheel pose.
78 const PxTransform wheelPose = PxVehicleComputeWheelPose(frame, suspensionParams, suspState, 0.0f, 0.0f, steerAngle, rigidBodyPose,
79 0.0f);
80
81 return wheelPose;
82}
83
97PX_FORCE_INLINE void PxVehicleComputeSuspensionRaycast
98(const PxVehicleFrame& frame, const PxVehicleWheelParams& wheelParams, const PxVehicleSuspensionParams& suspensionParams,
99 const PxF32 steerAngle, const PxTransform& rigidBodyPose,
100 PxVec3& start, PxVec3& dir, PxReal& dist)
101{
102 const PxTransform wheelPose = PxVehicleComputeWheelPoseForSuspensionQuery(frame, suspensionParams, steerAngle, rigidBodyPose);
103
104 //Raycast from top of wheel at max compression to bottom of wheel at max droop.
105 dir = PxVehicleComputeSuspensionDirection(suspensionParams, rigidBodyPose);
106 start = wheelPose.p - dir * wheelParams.radius;
107 dist = suspensionParams.suspensionTravelDist + 2.0f*wheelParams.radius;
108}
109
122PX_FORCE_INLINE void PxVehicleComputeSuspensionSweep
123(const PxVehicleFrame& frame, const PxVehicleSuspensionParams& suspensionParams,
124 const PxReal steerAngle, const PxTransform& rigidBodyPose,
125 PxTransform& start, PxVec3& dir, PxReal& dist)
126{
127 start = PxVehicleComputeWheelPoseForSuspensionQuery(frame, suspensionParams, steerAngle, rigidBodyPose);
128 dir = PxVehicleComputeSuspensionDirection(suspensionParams, rigidBodyPose);
129 dist = suspensionParams.suspensionTravelDist;
130}
131
132
147bool PxVehicleComputeSprungMasses(const PxU32 nbSprungMasses, const PxVec3* sprungMassCoordinates, const PxReal totalMass, const PxVehicleAxes::Enum gravityDirection, PxReal* sprungMasses);
148
149#if !PX_DOXYGEN
150} // namespace vehicle2
151} // namespace physx
152#endif
153
#define PX_FORCE_INLINE
Definition PxPreprocessor.h:335
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39
PX_DEPRECATED void PxVehicleComputeSprungMasses(const PxU32 nbSprungMasses, const PxVec3 *sprungMassCoordinates, const PxVec3 &centreOfMass, const PxReal totalMass, const PxU32 gravityDirection, PxReal *sprungMasses)
Compute the sprung masses of the suspension springs given (i) the number of sprung masses,...
Definition VehicleUtilSetup.cpp:86
Enum
Definition PxVehicleParams.h:162