RavEngine
Loading...
Searching...
No Matches
PxRigidActorExt.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#ifndef PX_RIGID_ACTOR_EXT_H
30#define PX_RIGID_ACTOR_EXT_H
35#include "PxPhysXConfig.h"
36#include "PxPhysics.h"
37#include "PxRigidActor.h"
38
39#if !PX_DOXYGEN
40namespace physx
41{
42#endif
43
44class PxBVH;
45class PxCooking;
46
54{
55public:
56
86 static PxShape* createExclusiveShape(PxRigidActor& actor, const PxGeometry& geometry, PxMaterial*const* materials, PxU16 materialCount,
88 {
89 PxShape* shape = PxGetPhysics().createShape(geometry, materials, materialCount, true, shapeFlags);
90 if(shape)
91 {
92 bool status = actor.attachShape(*shape); // attach can fail, if e.g. we try and attach a trimesh simulation shape to a dynamic actor
93 shape->release(); // if attach fails, we hold the only counted reference, and so this cleans up properly
94 if(!status)
95 shape = NULL;
96 }
97 return shape;
98 }
99
128 static PX_FORCE_INLINE PxShape* createExclusiveShape(PxRigidActor& actor, const PxGeometry& geometry, const PxMaterial& material,
130 {
131 PxMaterial* materialPtr = const_cast<PxMaterial*>(&material);
132 return createExclusiveShape(actor, geometry, &materialPtr, 1, shapeFlags);
133 }
134
144 static PxBounds3* getRigidActorShapeLocalBoundsList(const PxRigidActor& actor, PxU32& numBounds);
145
159 static PxBVH* createBVHFromActor(PxPhysics& physics, const PxRigidActor& actor);
160};
161
162#if !PX_DOXYGEN
163} // namespace physx
164#endif
165
167#endif
Class representing a bounding volume hierarchy.
Definition PxBVH.h:63
Class representing 3D range or axis aligned bounding box.
Definition PxBounds3.h:58
A geometry object.
Definition PxGeometry.h:79
Material class to represent a set of surface properties.
Definition PxMaterial.h:149
Abstract singleton factory class used for instancing objects in the Physics SDK.
Definition PxPhysics.h:91
PX_FORCE_INLINE PxShape * createShape(const PxGeometry &geometry, const PxMaterial &material, bool isExclusive=false, PxShapeFlags shapeFlags=PxShapeFlag::eVISUALIZATION|PxShapeFlag::eSCENE_QUERY_SHAPE|PxShapeFlag::eSIMULATION_SHAPE)
Creates a shape which may be attached to multiple actors.
Definition PxPhysics.h:512
utility functions for use with PxRigidActor and subclasses
Definition PxRigidActorExt.h:54
static PxBVH * createBVHFromActor(PxPhysics &physics, const PxRigidActor &actor)
Convenience function to create a PxBVH object from a PxRigidActor.
Definition ExtRigidActorExt.cpp:74
static PxBounds3 * getRigidActorShapeLocalBoundsList(const PxRigidActor &actor, PxU32 &numBounds)
Gets a list of bounds based on shapes in rigid actor. This list can be used to cook/create bounding v...
Definition ExtRigidActorExt.cpp:40
static PX_FORCE_INLINE PxShape * createExclusiveShape(PxRigidActor &actor, const PxGeometry &geometry, const PxMaterial &material, PxShapeFlags shapeFlags=PxShapeFlag::eVISUALIZATION|PxShapeFlag::eSCENE_QUERY_SHAPE|PxShapeFlag::eSIMULATION_SHAPE)
Creates a new shape with default properties and a single material adds it to the list of shapes of th...
Definition PxRigidActorExt.h:128
static PxShape * createExclusiveShape(PxRigidActor &actor, const PxGeometry &geometry, PxMaterial *const *materials, PxU16 materialCount, PxShapeFlags shapeFlags=PxShapeFlag::eVISUALIZATION|PxShapeFlag::eSCENE_QUERY_SHAPE|PxShapeFlag::eSIMULATION_SHAPE)
Creates a new shape with default properties and a list of materials and adds it to the list of shapes...
Definition PxRigidActorExt.h:86
PxRigidActor represents a base class shared between dynamic and static rigid bodies in the physics SD...
Definition PxRigidActor.h:53
Abstract class for collision shapes.
Definition PxShape.h:146
#define PX_FORCE_INLINE
Definition PxPreprocessor.h:335
PX_C_EXPORT PX_PHYSX_CORE_API physx::PxPhysics &PX_CALL_CONV PxGetPhysics()
Retrieves the Physics SDK after it has been created.
Definition NpPhysics.cpp:1735
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39
@ eSIMULATION_SHAPE
The shape will partake in collision in the physical simulation.
Definition PxShape.h:83
@ eVISUALIZATION
Enable debug renderer for this shape.
Definition PxShape.h:117
@ eSCENE_QUERY_SHAPE
The shape will partake in scene queries (ray casts, overlap tests, sweeps, ...).
Definition PxShape.h:88