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 #ifndef CLOTHING_PHYSICAL_MESH_H
00031 #define CLOTHING_PHYSICAL_MESH_H
00032
00033 #include "ApexInterface.h"
00034 #include "IProgressListener.h"
00035
00036 namespace nvidia
00037 {
00038 namespace apex
00039 {
00040
00041
00045 struct ClothingConstrainCoefficients
00046 {
00047 float maxDistance;
00048 float collisionSphereRadius;
00049 float collisionSphereDistance;
00050 };
00051
00052
00053 PX_PUSH_PACK_DEFAULT
00054
00058 struct ClothingPhysicalMeshStats
00059 {
00061 uint32_t totalBytes;
00063 uint32_t numVertices;
00065 uint32_t numIndices;
00066 };
00067
00068
00072 class ClothingPhysicalMesh : public ApexInterface
00073 {
00074 public:
00078 virtual uint32_t getNumVertices() const = 0;
00079
00083 virtual uint32_t getNumSimulatedVertices() const = 0;
00084
00088 virtual uint32_t getNumMaxDistance0Vertices() const = 0;
00089
00093 virtual uint32_t getNumIndices() const = 0;
00094
00098 virtual uint32_t getNumSimulatedIndices() const = 0;
00099
00107 virtual void getIndices(void* indexDestination, uint32_t byteStride, uint32_t numIndices) const = 0;
00108
00112 virtual bool isTetrahedralMesh() const = 0;
00113
00127 virtual void simplify(uint32_t subdivisions, int32_t maxSteps, float maxError, IProgressListener* progress) = 0;
00128
00135 virtual void setGeometry(bool tetraMesh, uint32_t numVertices, uint32_t vertexByteStride, const void* vertices, const uint32_t* driveChannels,
00136 uint32_t numIndices, uint32_t indexByteStride, const void* indices) = 0;
00137
00138
00145 virtual bool getIndices(uint32_t* indices, uint32_t byteStride) const = 0;
00146
00153 virtual bool getVertices(PxVec3* vertices, uint32_t byteStride) const = 0;
00154
00161 virtual bool getNormals(PxVec3* normals, uint32_t byteStride) const = 0;
00162
00166 virtual uint32_t getNumBonesPerVertex() const = 0;
00167
00177 virtual bool getBoneIndices(uint16_t* boneIndices, uint32_t byteStride) const = 0;
00178
00187 virtual bool getBoneWeights(float* boneWeights, uint32_t byteStride) const = 0;
00188
00194 virtual void allocateMasterFlagsBuffer() = 0;
00195
00201 virtual uint32_t* getMasterFlagsBuffer() = 0;
00202
00210 virtual void allocateConstrainCoefficientBuffer() = 0;
00211
00217 virtual ClothingConstrainCoefficients* getConstrainCoefficientBuffer() const = 0;
00218
00224 virtual bool getConstrainCoefficients(ClothingConstrainCoefficients* coeffs, uint32_t byteStride) const = 0;
00225
00229 virtual void getStats(ClothingPhysicalMeshStats& stats) const = 0;
00230
00231 };
00232
00233 PX_POP_PACK
00234
00235 }
00236 }
00237
00238 #endif // CLOTHING_PHYSICAL_MESH_H