Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef EMITTER_GEOMS_H
00013 #define EMITTER_GEOMS_H
00014
00015 #include "Apex.h"
00016
00017 namespace nvidia
00018 {
00019 namespace apex
00020 {
00021
00022 PX_PUSH_PACK_DEFAULT
00023
00025 struct EmitterType
00026 {
00028 enum Enum
00029 {
00030 ET_RATE = 0,
00031 ET_DENSITY_ONCE,
00032 ET_DENSITY_BRUSH,
00033 ET_FILL,
00034 ET_UNDEFINED,
00035 };
00036 };
00037
00038 class EmitterGeomBox;
00039 class EmitterGeomSphere;
00040 class EmitterGeomSphereShell;
00041 class EmitterGeomCylinder;
00042 class EmitterGeomExplicit;
00043
00045 class EmitterGeom
00046 {
00047 public:
00049 virtual void setEmitterType(EmitterType::Enum) = 0;
00050
00052 virtual EmitterType::Enum getEmitterType() const = 0;
00053
00055 virtual const EmitterGeomBox* isBoxGeom() const
00056 {
00057 return NULL;
00058 }
00059
00061 virtual const EmitterGeomSphere* isSphereGeom() const
00062 {
00063 return NULL;
00064 }
00065
00067 virtual const EmitterGeomSphereShell* isSphereShellGeom() const
00068 {
00069 return NULL;
00070 }
00071
00073 virtual const EmitterGeomCylinder* isCylinderGeom() const
00074 {
00075 return NULL;
00076 }
00077
00079 virtual const EmitterGeomExplicit* isExplicitGeom() const
00080 {
00081 return NULL;
00082 }
00083 };
00084
00086 class EmitterGeomSphereShell : public EmitterGeom
00087 {
00088 public:
00089
00091 virtual void setRadius(float radius) = 0;
00092
00094 virtual float getRadius() const = 0;
00095
00097 virtual void setShellThickness(float thickness) = 0;
00098
00100 virtual float getShellThickness() const = 0;
00101 };
00102
00104 class EmitterGeomSphere : public EmitterGeom
00105 {
00106 public:
00107
00109 virtual void setRadius(float radius) = 0;
00110
00112 virtual float getRadius() const = 0;
00113 };
00114
00116 class EmitterGeomCylinder : public EmitterGeom
00117 {
00118 public:
00119
00121 virtual void setRadius(float radius) = 0;
00122
00124 virtual float getRadius() const = 0;
00125
00127 virtual void setHeight(float height) = 0;
00128
00130 virtual float getHeight() const = 0;
00131 };
00132
00134 class EmitterGeomBox : public EmitterGeom
00135 {
00136 public:
00137
00139 virtual void setExtents(const PxVec3& extents) = 0;
00140
00142 virtual PxVec3 getExtents() const = 0;
00143 };
00144
00146 class EmitterGeomExplicit : public EmitterGeom
00147 {
00148 public:
00149
00151 struct PointParams
00152 {
00153 PxVec3 position;
00154 bool doDetectOverlaps;
00155 };
00156
00158 struct SphereParams
00159 {
00160 PxVec3 center;
00161 float radius;
00162 bool doDetectOverlaps;
00163 };
00164
00166 struct EllipsoidParams
00167 {
00168 PxVec3 center;
00169 float radius;
00170 PxVec3 normal;
00171 float polarRadius;
00172 bool doDetectOverlaps;
00173 };
00174
00176 virtual void resetParticleList() = 0;
00177
00184 virtual void addParticleList(uint32_t count,
00185 const PointParams* params,
00186 const PxVec3* velocities = 0) = 0;
00187
00194 virtual void addParticleList(uint32_t count,
00195 const PxVec3* positions,
00196 const PxVec3* velocities = 0) = 0;
00197
00199 struct PointListData
00200 {
00201 const void* positionStart;
00202 uint32_t positionStrideBytes;
00203 const void* velocityStart;
00204 uint32_t velocityStrideBytes;
00205 const void* userDataStart;
00206 uint32_t userDataStrideBytes;
00207 };
00208
00215 virtual void addParticleList(uint32_t count, const PointListData& data) = 0;
00216
00224 virtual void addSphereList(uint32_t count,
00225 const SphereParams* params,
00226 const PxVec3* velocities = 0) = 0;
00227
00235 virtual void addEllipsoidList(uint32_t count,
00236 const EllipsoidParams* params,
00237 const PxVec3* velocities = 0) = 0;
00238
00247 virtual void getParticleList(const PointParams* ¶ms,
00248 uint32_t& numPoints,
00249 const PxVec3* &velocities,
00250 uint32_t& numVelocities) const = 0;
00251
00260 virtual void getSphereList(const SphereParams* ¶ms,
00261 uint32_t& numSpheres,
00262 const PxVec3* &velocities,
00263 uint32_t& numVelocities) const = 0;
00264
00273 virtual void getEllipsoidList(const EllipsoidParams* ¶ms,
00274 uint32_t& numEllipsoids,
00275 const PxVec3* &velocities,
00276 uint32_t& numVelocities) const = 0;
00277
00279 virtual uint32_t getParticleCount() const = 0;
00280
00282 virtual PxVec3 getParticlePos(uint32_t index) const = 0;
00283
00285 virtual uint32_t getSphereCount() const = 0;
00286
00288 virtual PxVec3 getSphereCenter(uint32_t index) const = 0;
00289
00291 virtual float getSphereRadius(uint32_t index) const = 0;
00292
00294 virtual uint32_t getEllipsoidCount() const = 0;
00295
00297 virtual PxVec3 getEllipsoidCenter(uint32_t index) const = 0;
00298
00300 virtual float getEllipsoidRadius(uint32_t index) const = 0;
00301
00303 virtual PxVec3 getEllipsoidNormal(uint32_t index) const = 0;
00304
00306 virtual float getEllipsoidPolarRadius(uint32_t index) const = 0;
00307
00309 virtual float getDistance() const = 0;
00310 };
00311
00312
00313 PX_POP_PACK
00314
00315 }
00316 }
00317
00318 #endif // EMITTER_GEOMS_H