PxTriangleMesh.h
Go to the documentation of this file.00001 // This code contains NVIDIA Confidential Information and is disclosed to you 00002 // under a form of NVIDIA software license agreement provided separately to you. 00003 // 00004 // Notice 00005 // NVIDIA Corporation and its licensors retain all intellectual property and 00006 // proprietary rights in and to this software and related documentation and 00007 // any modifications thereto. Any use, reproduction, disclosure, or 00008 // distribution of this software and related documentation without an express 00009 // license agreement from NVIDIA Corporation is strictly prohibited. 00010 // 00011 // ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES 00012 // NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO 00013 // THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT, 00014 // MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE. 00015 // 00016 // Information and code furnished is believed to be accurate and reliable. 00017 // However, NVIDIA Corporation assumes no responsibility for the consequences of use of such 00018 // information or for any infringement of patents or other rights of third parties that may 00019 // result from its use. No license is granted by implication or otherwise under any patent 00020 // or patent rights of NVIDIA Corporation. Details are subject to change without notice. 00021 // This code supersedes and replaces all information previously supplied. 00022 // NVIDIA Corporation products are not authorized for use as critical 00023 // components in life support devices or systems without express written approval of 00024 // NVIDIA Corporation. 00025 // 00026 // Copyright (c) 2008-2017 NVIDIA Corporation. All rights reserved. 00027 // Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved. 00028 // Copyright (c) 2001-2004 NovodeX AG. All rights reserved. 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 } // namespace physx 00315 #endif 00316 00318 #endif
Copyright © 2008-2017 NVIDIA Corporation, 2701 San Tomas Expressway, Santa Clara, CA 95050 U.S.A. All rights reserved. www.nvidia.com