PxRigidBodyExt.h
Go to the documentation of this file.
1 //
2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions
4 // are met:
5 // * Redistributions of source code must retain the above copyright
6 // notice, this list of conditions and the following disclaimer.
7 // * Redistributions in binary form must reproduce the above copyright
8 // notice, this list of conditions and the following disclaimer in the
9 // documentation and/or other materials provided with the distribution.
10 // * Neither the name of NVIDIA CORPORATION nor the names of its
11 // contributors may be used to endorse or promote products derived
12 // from this software without specific prior written permission.
13 //
14 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
15 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
18 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 //
26 // Copyright (c) 2008-2021 NVIDIA Corporation. All rights reserved.
27 // Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
28 // Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
29 
30 
31 #ifndef PX_PHYSICS_EXTENSIONS_RIGIDBODY_H
32 #define PX_PHYSICS_EXTENSIONS_RIGIDBODY_H
33 
37 #include "PxPhysXConfig.h"
38 #include "PxRigidBody.h"
39 #include "PxQueryReport.h"
40 #include "PxQueryFiltering.h"
42 
43 #if !PX_DOXYGEN
44 namespace physx
45 {
46 #endif
47 
48 class PxScene;
49 struct PxQueryCache;
50 class PxShape;
51 
59 {
60 public:
94  static bool updateMassAndInertia(PxRigidBody& body, const PxReal* shapeDensities, PxU32 shapeDensityCount, const PxVec3* massLocalPose = NULL, bool includeNonSimShapes = false);
95 
96 
110  static bool updateMassAndInertia(PxRigidBody& body, PxReal density, const PxVec3* massLocalPose = NULL, bool includeNonSimShapes = false);
111 
112 
134  static bool setMassAndUpdateInertia(PxRigidBody& body, const PxReal* shapeMasses, PxU32 shapeMassCount, const PxVec3* massLocalPose = NULL, bool includeNonSimShapes = false);
135 
136 
155  static bool setMassAndUpdateInertia(PxRigidBody& body, PxReal mass, const PxVec3* massLocalPose = NULL, bool includeNonSimShapes = false);
156 
157 
167  static PxMassProperties computeMassPropertiesFromShapes(const PxShape* const* shapes, PxU32 shapeCount);
168 
169 
196  static void addForceAtPos(PxRigidBody& body, const PxVec3& force, const PxVec3& pos, PxForceMode::Enum mode = PxForceMode::eFORCE, bool wakeup = true);
197 
224  static void addForceAtLocalPos(PxRigidBody& body, const PxVec3& force, const PxVec3& pos, PxForceMode::Enum mode = PxForceMode::eFORCE, bool wakeup = true);
225 
252  static void addLocalForceAtPos(PxRigidBody& body, const PxVec3& force, const PxVec3& pos, PxForceMode::Enum mode = PxForceMode::eFORCE, bool wakeup = true);
253 
280  static void addLocalForceAtLocalPos(PxRigidBody& body, const PxVec3& force, const PxVec3& pos, PxForceMode::Enum mode = PxForceMode::eFORCE, bool wakeup = true);
281 
292  static PxVec3 getVelocityAtPos(const PxRigidBody& body, const PxVec3& pos);
293 
304  static PxVec3 getLocalVelocityAtLocalPos(const PxRigidBody& body, const PxVec3& pos);
305 
316  static PxVec3 getVelocityAtOffset(const PxRigidBody& body, const PxVec3& pos);
317 
318 
347  static bool linearSweepSingle(
348  PxRigidBody& body, PxScene& scene, const PxVec3& unitDir, const PxReal distance,
349  PxHitFlags outputFlags,
350  PxSweepHit& closestHit, PxU32& shapeIndex,
351  const PxQueryFilterData& filterData = PxQueryFilterData(),
352  PxQueryFilterCallback* filterCall = NULL,
353  const PxQueryCache* cache = NULL,
354  const PxReal inflation=0.0f);
355 
388  static PxU32 linearSweepMultiple(
389  PxRigidBody& body, PxScene& scene, const PxVec3& unitDir, const PxReal distance,
390  PxHitFlags outputFlags,
391  PxSweepHit* touchHitBuffer, PxU32* touchHitShapeIndices, PxU32 touchHitBufferSize,
392  PxSweepHit& block, PxI32& blockingShapeIndex, bool& overflow,
393  const PxQueryFilterData& filterData = PxQueryFilterData(),
394  PxQueryFilterCallback* filterCall = NULL,
395  const PxQueryCache* cache = NULL, const PxReal inflation = 0.0f);
396 
397 
413  static void computeVelocityDeltaFromImpulse(const PxRigidBody& body, const PxVec3& impulsiveForce, const PxVec3& impulsiveTorque, PxVec3& deltaLinearVelocity, PxVec3& deltaAngularVelocity);
414 
432  static void computeVelocityDeltaFromImpulse(const PxRigidBody& body, const PxTransform& globalPose, const PxVec3& point, const PxVec3& impulse, const PxReal invMassScale,
433  const PxReal invInertiaScale, PxVec3& deltaLinearVelocity, PxVec3& deltaAngularVelocity);
434 
449  static void computeLinearAngularImpulse(const PxRigidBody& body, const PxTransform& globalPose, const PxVec3& point, const PxVec3& impulse, const PxReal invMassScale,
450  const PxReal invInertiaScale, PxVec3& linearImpulse, PxVec3& angularImpulse);
451 
452 
453 };
454 
455 #if !PX_DOXYGEN
456 } // namespace physx
457 #endif
458 
460 #endif
Definition: GuContactBuffer.h:37
A scene is a collection of bodies and constraints which can interact.
Definition: PxScene.h:169
Scene query filtering callbacks.
Definition: PxQueryFiltering.h:169
Abstract class for collision shapes.
Definition: PxShape.h:142
float PxReal
Definition: PxSimpleTypes.h:78
PxVec3 force
Definition: PxArticulationReducedCoordinate.h:132
Scene query filtering data.
Definition: PxQueryFiltering.h:132
Enum
Definition: PxForceMode.h:52
utility functions for use with PxRigidBody and subclasses
Definition: PxRigidBodyExt.h:58
Utility class to compute and manipulate mass and inertia tensor properties.
Definition: PxMassProperties.h:63
parameter has unit of mass * distance/ time^2, i.e. a force
Definition: PxForceMode.h:54
single hit cache for scene queries.
Definition: PxScene.h:143
class representing a rigid euclidean transform as a quaternion and a vector
Definition: PxTransform.h:48
int32_t PxI32
Definition: PxSimpleTypes.h:70
Stores results of sweep queries.
Definition: PxQueryReport.h:200
PxRigidBody is a base class shared between dynamic rigid body objects.
Definition: PxRigidBody.h:195
uint32_t PxU32
Definition: Px.h:48
3 Element vector class.
Definition: PxVec3.h:49