00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef CLOTHING_PHYSICAL_MESH_H
00013 #define CLOTHING_PHYSICAL_MESH_H
00014
00015 #include "ApexInterface.h"
00016 #include "IProgressListener.h"
00017
00018 namespace nvidia
00019 {
00020 namespace apex
00021 {
00022
00023
00027 struct ClothingConstrainCoefficients
00028 {
00029 float maxDistance;
00030 float collisionSphereRadius;
00031 float collisionSphereDistance;
00032 };
00033
00034
00035 PX_PUSH_PACK_DEFAULT
00036
00040 struct ClothingPhysicalMeshStats
00041 {
00043 uint32_t totalBytes;
00045 uint32_t numVertices;
00047 uint32_t numIndices;
00048 };
00049
00050
00054 class ClothingPhysicalMesh : public ApexInterface
00055 {
00056 public:
00060 virtual uint32_t getNumVertices() const = 0;
00061
00065 virtual uint32_t getNumSimulatedVertices() const = 0;
00066
00070 virtual uint32_t getNumMaxDistance0Vertices() const = 0;
00071
00075 virtual uint32_t getNumIndices() const = 0;
00076
00080 virtual uint32_t getNumSimulatedIndices() const = 0;
00081
00089 virtual void getIndices(void* indexDestination, uint32_t byteStride, uint32_t numIndices) const = 0;
00090
00094 virtual bool isTetrahedralMesh() const = 0;
00095
00109 virtual void simplify(uint32_t subdivisions, int32_t maxSteps, float maxError, IProgressListener* progress) = 0;
00110
00117 virtual void setGeometry(bool tetraMesh, uint32_t numVertices, uint32_t vertexByteStride, const void* vertices, const uint32_t* driveChannels,
00118 uint32_t numIndices, uint32_t indexByteStride, const void* indices) = 0;
00119
00120
00127 virtual bool getIndices(uint32_t* indices, uint32_t byteStride) const = 0;
00128
00135 virtual bool getVertices(PxVec3* vertices, uint32_t byteStride) const = 0;
00136
00143 virtual bool getNormals(PxVec3* normals, uint32_t byteStride) const = 0;
00144
00148 virtual uint32_t getNumBonesPerVertex() const = 0;
00149
00159 virtual bool getBoneIndices(uint16_t* boneIndices, uint32_t byteStride) const = 0;
00160
00169 virtual bool getBoneWeights(float* boneWeights, uint32_t byteStride) const = 0;
00170
00176 virtual void allocateMasterFlagsBuffer() = 0;
00177
00183 virtual uint32_t* getMasterFlagsBuffer() = 0;
00184
00192 virtual void allocateConstrainCoefficientBuffer() = 0;
00193
00199 virtual ClothingConstrainCoefficients* getConstrainCoefficientBuffer() const = 0;
00200
00206 virtual bool getConstrainCoefficients(ClothingConstrainCoefficients* coeffs, uint32_t byteStride) const = 0;
00207
00211 virtual void getStats(ClothingPhysicalMeshStats& stats) const = 0;
00212
00213 };
00214
00215 PX_POP_PACK
00216
00217 }
00218 }
00219
00220 #endif // CLOTHING_PHYSICAL_MESH_H