00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef PX_PHYSICS_GEOMUTILS_NX_TRIANGLEMESH
00032 #define PX_PHYSICS_GEOMUTILS_NX_TRIANGLEMESH
00033
00036 #include "foundation/PxVec3.h"
00037 #include "foundation/PxBounds3.h"
00038 #include "common/PxPhysXCommonConfig.h"
00039 #include "common/PxBase.h"
00040
00041 #if !PX_DOXYGEN
00042 namespace physx
00043 {
00044 #endif
00045
00051 #define PX_ENABLE_DYNAMIC_MESH_RTREE 1
00052
00064 struct PxMeshMidPhase
00065 {
00066 enum Enum
00067 {
00068 eBVH33 = 0,
00069 eBVH34 = 1,
00070
00071 eINVALID = 2,
00072 eLAST = eINVALID
00073 };
00074 };
00075
00081 struct PxTriangleMeshFlag
00082 {
00083 enum Enum
00084 {
00085 e16_BIT_INDICES = (1<<1),
00086 eADJACENCY_INFO = (1<<2)
00087 };
00088 };
00089
00095 typedef PxFlags<PxTriangleMeshFlag::Enum,PxU8> PxTriangleMeshFlags;
00096 PX_FLAGS_OPERATORS(PxTriangleMeshFlag::Enum,PxU8)
00097
00098
00127 class PxTriangleMesh : public PxBase
00128 {
00129 public:
00135 virtual PxU32 getNbVertices() const = 0;
00136
00142 virtual const PxVec3* getVertices() const = 0;
00143
00144 #if PX_ENABLE_DYNAMIC_MESH_RTREE
00145
00164 virtual PxVec3* getVerticesForModification() = 0;
00165
00183 virtual PxBounds3 refitBVH() = 0;
00184 #endif // PX_ENABLE_DYNAMIC_MESH_RTREE
00185
00191 virtual PxU32 getNbTriangles() const = 0;
00192
00204 virtual const void* getTriangles() const = 0;
00205
00215 virtual PxTriangleMeshFlags getTriangleMeshFlags() const = 0;
00216
00229 virtual const PxU32* getTrianglesRemap() const = 0;
00230
00231
00237 virtual void release() = 0;
00238
00247 virtual PxMaterialTableIndex getTriangleMaterialIndex(PxTriangleID triangleIndex) const = 0;
00248
00254 virtual PxBounds3 getLocalBounds() const = 0;
00255
00264 virtual PxU32 getReferenceCount() const = 0;
00265
00271 virtual void acquireReference() = 0;
00272
00273 protected:
00274 PX_INLINE PxTriangleMesh(PxType concreteType, PxBaseFlags baseFlags) : PxBase(concreteType, baseFlags) {}
00275 PX_INLINE PxTriangleMesh(PxBaseFlags baseFlags) : PxBase(baseFlags) {}
00276 virtual ~PxTriangleMesh() {}
00277
00278 virtual bool isKindOf(const char* name) const { return !::strcmp("PxTriangleMesh", name) || PxBase::isKindOf(name); }
00279 };
00280
00287 class PxBVH33TriangleMesh : public PxTriangleMesh
00288 {
00289 public:
00290 protected:
00291 PX_INLINE PxBVH33TriangleMesh(PxType concreteType, PxBaseFlags baseFlags) : PxTriangleMesh(concreteType, baseFlags) {}
00292 PX_INLINE PxBVH33TriangleMesh(PxBaseFlags baseFlags) : PxTriangleMesh(baseFlags) {}
00293 virtual ~PxBVH33TriangleMesh() {}
00294 virtual bool isKindOf(const char* name) const { return !::strcmp("PxBVH33TriangleMesh", name) || PxTriangleMesh::isKindOf(name); }
00295 };
00296
00303 class PxBVH34TriangleMesh : public PxTriangleMesh
00304 {
00305 public:
00306 protected:
00307 PX_INLINE PxBVH34TriangleMesh(PxType concreteType, PxBaseFlags baseFlags) : PxTriangleMesh(concreteType, baseFlags) {}
00308 PX_INLINE PxBVH34TriangleMesh(PxBaseFlags baseFlags) : PxTriangleMesh(baseFlags) {}
00309 virtual ~PxBVH34TriangleMesh() {}
00310 virtual bool isKindOf(const char* name) const { return !::strcmp("PxBVH34TriangleMesh", name) || PxTriangleMesh::isKindOf(name); }
00311 };
00312
00313 #if !PX_DOXYGEN
00314 }
00315 #endif
00316
00318 #endif