Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef FRACTURE_TOOLS_STRUCTS_H
00012 #define FRACTURE_TOOLS_STRUCTS_H
00013
00014 #include "foundation/Px.h"
00015 #include "ExplicitHierarchicalMesh.h"
00016
00017 PX_PUSH_PACK_DEFAULT
00018
00019 namespace FractureTools
00020 {
00021
00025 struct MeshProcessingParameters
00026 {
00031 bool islandGeneration;
00032
00037 bool removeTJunctions;
00038
00045 unsigned microgridSize;
00046
00055 nvidia::BSPOpenMode::Enum meshMode;
00056
00061 int verbosity;
00062
00064 MeshProcessingParameters()
00065 {
00066 setToDefault();
00067 }
00068
00070 void setToDefault()
00071 {
00072 islandGeneration = false;
00073 removeTJunctions = false;
00074 microgridSize = 65536;
00075 meshMode = nvidia::BSPOpenMode::Automatic;
00076 verbosity = 0;
00077 }
00078 };
00079
00080
00090 class CutoutSet
00091 {
00092 public:
00094 virtual uint32_t getCutoutCount() const = 0;
00095
00100 virtual uint32_t getCutoutVertexCount(uint32_t cutoutIndex) const = 0;
00101
00106 virtual uint32_t getCutoutLoopCount(uint32_t cutoutIndex) const = 0;
00107
00112 virtual const physx::PxVec3& getCutoutVertex(uint32_t cutoutIndex, uint32_t vertexIndex) const = 0;
00113
00118 virtual uint32_t getCutoutLoopSize(uint32_t coutoutIndex, uint32_t loopIndex) const = 0;
00119
00125 virtual uint32_t getCutoutLoopVertexIndex(uint32_t cutoutIndex, uint32_t loopIndex, uint32_t vertexNum) const = 0;
00126
00132 virtual uint32_t getCutoutLoopVertexFlags(uint32_t cutoutIndex, uint32_t loopIndex, uint32_t vertexNum) const = 0;
00133
00137 virtual bool isPeriodic() const = 0;
00138
00142 virtual const physx::PxVec2& getDimensions() const = 0;
00143
00145
00146
00147
00149 virtual void release() = 0;
00150
00151 protected:
00153 virtual ~CutoutSet() {}
00154 };
00155
00156
00161 struct NoiseParameters
00162 {
00166 float amplitude;
00167
00172 float frequency;
00173
00178 int gridSize;
00179
00185 int type;
00186
00188 NoiseParameters()
00189 {
00190 setToDefault();
00191 }
00192
00201 void setToDefault()
00202 {
00203 amplitude = 0.0f;
00204 frequency = 0.25f;
00205 gridSize = 10;
00206 type = 0;
00207 }
00208 };
00209
00210
00216 struct SliceParameters
00217 {
00222 enum Order
00223 {
00224 XYZ,
00225 YZX,
00226 ZXY,
00227 ZYX,
00228 YXZ,
00229 XZY,
00230 Through
00231 };
00232
00234 unsigned order;
00235
00237 unsigned splitsPerPass[3];
00238
00245 float linearVariation[3];
00246
00252 float angularVariation[3];
00253
00255 NoiseParameters noise[3];
00256
00258 SliceParameters()
00259 {
00260 setToDefault();
00261 }
00262
00272 void setToDefault()
00273 {
00274 order = XYZ;
00275 splitsPerPass[0] = splitsPerPass[1] = splitsPerPass[2] = 1;
00276 linearVariation[0] = linearVariation[1] = linearVariation[2] = 0.1f;
00277 angularVariation[0] = angularVariation[1] = angularVariation[2] = 20.0f * 3.1415927f / 180.0f;
00278 noise[0].setToDefault();
00279 noise[1].setToDefault();
00280 noise[2].setToDefault();
00281 }
00282 };
00283
00284
00290 struct FractureSliceDesc
00291 {
00293 unsigned maxDepth;
00294
00296 SliceParameters* sliceParameters;
00297
00301 bool useTargetProportions;
00302
00310 float targetProportions[3];
00311
00318 float minimumChunkSize[3];
00319
00323 nvidia::FractureMaterialDesc materialDesc[3];
00324
00328 bool instanceChunks;
00329
00333 bool useDisplacementMaps;
00334
00336 enum NoiseMode
00337 {
00338 NoiseWavePlane = 0,
00339 NoisePerlin2D,
00340 NoisePerlin3D,
00341
00342 NoiseModeCount
00343 };
00344
00348 unsigned noiseMode;
00349
00351 FractureSliceDesc()
00352 {
00353 setToDefault();
00354 }
00355
00369 void setToDefault()
00370 {
00371 maxDepth = 0;
00372 sliceParameters = NULL;
00373 useTargetProportions = false;
00374 for (int i = 0; i < 3; ++i)
00375 {
00376 targetProportions[i] = 1.0f;
00377 minimumChunkSize[i] = 0.0f;
00378 materialDesc[i].setToDefault();
00379 }
00380 instanceChunks = false;
00381 useDisplacementMaps = false;
00382 noiseMode = NoiseWavePlane;
00383 }
00384 };
00385
00386
00392 struct CutoutParameters
00393 {
00398 float depth;
00399
00405 nvidia::FractureMaterialDesc materialDesc;
00406
00412 NoiseParameters backfaceNoise;
00413
00422 NoiseParameters edgeNoise;
00423
00425 CutoutParameters()
00426 {
00427 setToDefault();
00428 }
00429
00438 void setToDefault()
00439 {
00440 depth = 1.0f;
00441 backfaceNoise.setToDefault();
00442 materialDesc.setToDefault();
00443 edgeNoise.setToDefault();
00444 }
00445 };
00446
00447
00453 struct FractureCutoutDesc
00454 {
00456 enum Directions
00457 {
00458 UserDefined = 0,
00459
00460 NegativeX = 1 << 0,
00461 PositiveX = 1 << 1,
00462 NegativeY = 1 << 2,
00463 PositiveY = 1 << 3,
00464 NegativeZ = 1 << 4,
00465 PositiveZ = 1 << 5,
00466
00467 DirectionCount = 6
00468 };
00469
00471 unsigned directions;
00472
00477 unsigned directionOrder[DirectionCount];
00478
00480 CutoutParameters cutoutParameters[DirectionCount];
00481
00486 physx::PxVec3 userDefinedDirection;
00487
00489 physx::PxMat33 userUVMapping;
00490
00492 CutoutParameters userDefinedCutoutParameters;
00493
00495 enum InstancingMode
00496 {
00497 DoNotInstance,
00498 InstanceCongruentChunks,
00499 InstanceAllChunks,
00500
00501 InstanceModeCount
00502 };
00503
00507 unsigned instancingMode;
00508
00512 bool tileFractureMap;
00513
00517 physx::PxVec2 uvTileSize;
00518
00522 bool splitNonconvexRegions;
00523
00528 enum CutoutChunkFracturingMethod
00529 {
00530 DoNotFractureCutoutChunks,
00531 SliceFractureCutoutChunks,
00532 VoronoiFractureCutoutChunks,
00533
00534 CutoutChunkFracturingMethodCount
00535 };
00536
00545 unsigned chunkFracturingMethod;
00546
00554 bool trimFaceCollisionHulls;
00555
00557 float cutoutWidthScale[DirectionCount];
00558
00560 float cutoutHeightScale[DirectionCount];
00561
00563 float cutoutWidthOffset[DirectionCount];
00564
00566 float cutoutHeightOffset[DirectionCount];
00567
00569 bool cutoutWidthInvert[DirectionCount];
00570
00572 bool cutoutHeightInvert[DirectionCount];
00573
00575 float cutoutSizeX;
00576
00578 float cutoutSizeY;
00579
00586 float facetNormalMergeThresholdAngle;
00587
00589 FractureCutoutDesc()
00590 {
00591 setToDefault();
00592 }
00593
00620 void setToDefault()
00621 {
00622 directions = 0;
00623 userDefinedDirection= physx::PxVec3(0.0f);
00624 userUVMapping = physx::PxMat33(physx::PxIdentity);
00625 userDefinedCutoutParameters.setToDefault();
00626 instancingMode = DoNotInstance;
00627 tileFractureMap = false;
00628 uvTileSize = physx::PxVec2(0.0f);
00629 for (uint32_t i = 0; i < DirectionCount; ++i)
00630 {
00631 directionOrder[i] = 1u << i;
00632 cutoutParameters[i].setToDefault();
00633 cutoutWidthScale[i] = 1.0f;
00634 cutoutHeightScale[i] = 1.0f;
00635 cutoutWidthOffset[i] = 0.0f;
00636 cutoutHeightOffset[i] = 0.0f;
00637 cutoutWidthInvert[i] = false;
00638 cutoutHeightInvert[i] = false;
00639 }
00640 cutoutSizeX = 1.0f;
00641 cutoutSizeY = 1.0f;
00642 facetNormalMergeThresholdAngle = 60.0f;
00643 splitNonconvexRegions = false;
00644 chunkFracturingMethod = DoNotFractureCutoutChunks;
00645 trimFaceCollisionHulls = true;
00646 }
00647 };
00648
00649
00655 struct FractureVoronoiDesc
00656 {
00660 unsigned siteCount;
00661
00665 const physx::PxVec3* sites;
00666
00671 const uint32_t* chunkIndices;
00672
00680 NoiseParameters faceNoise;
00681
00685 bool instanceChunks;
00686
00690 bool useDisplacementMaps;
00691
00693 enum NoiseMode
00694 {
00695 NoiseWavePlane = 0,
00696 NoisePerlin2D,
00697 NoisePerlin3D,
00698
00699 NoiseModeCount
00700 };
00701
00705 unsigned noiseMode;
00706
00713 float minimumChunkSize;
00714
00719 nvidia::FractureMaterialDesc materialDesc;
00720
00721
00723 FractureVoronoiDesc()
00724 {
00725 setToDefault();
00726 }
00727
00741 void setToDefault()
00742 {
00743 siteCount = 0;
00744 sites = NULL;
00745 chunkIndices = NULL;
00746 faceNoise.setToDefault();
00747 instanceChunks = false;
00748 useDisplacementMaps = false;
00749 noiseMode = NoiseWavePlane;
00750 minimumChunkSize = 0.0f;
00751 materialDesc.setToDefault();
00752 }
00753 };
00754
00755
00756 }
00757
00758
00759 PX_POP_PACK
00760
00761 #endif // FRACTURE_TOOLS_H