Go to the documentation of this file.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 #ifndef FRACTURE_TOOLS_STRUCTS_H
00030 #define FRACTURE_TOOLS_STRUCTS_H
00031
00032 #include "foundation/Px.h"
00033 #include "ExplicitHierarchicalMesh.h"
00034
00035 PX_PUSH_PACK_DEFAULT
00036
00037 namespace FractureTools
00038 {
00039
00043 struct MeshProcessingParameters
00044 {
00049 bool islandGeneration;
00050
00055 bool removeTJunctions;
00056
00063 unsigned microgridSize;
00064
00073 nvidia::BSPOpenMode::Enum meshMode;
00074
00079 int verbosity;
00080
00082 MeshProcessingParameters()
00083 {
00084 setToDefault();
00085 }
00086
00088 void setToDefault()
00089 {
00090 islandGeneration = false;
00091 removeTJunctions = false;
00092 microgridSize = 65536;
00093 meshMode = nvidia::BSPOpenMode::Automatic;
00094 verbosity = 0;
00095 }
00096 };
00097
00098
00108 class CutoutSet
00109 {
00110 public:
00112 virtual uint32_t getCutoutCount() const = 0;
00113
00118 virtual uint32_t getCutoutVertexCount(uint32_t cutoutIndex) const = 0;
00119
00124 virtual uint32_t getCutoutLoopCount(uint32_t cutoutIndex) const = 0;
00125
00130 virtual const physx::PxVec3& getCutoutVertex(uint32_t cutoutIndex, uint32_t vertexIndex) const = 0;
00131
00136 virtual uint32_t getCutoutLoopSize(uint32_t coutoutIndex, uint32_t loopIndex) const = 0;
00137
00143 virtual uint32_t getCutoutLoopVertexIndex(uint32_t cutoutIndex, uint32_t loopIndex, uint32_t vertexNum) const = 0;
00144
00150 virtual uint32_t getCutoutLoopVertexFlags(uint32_t cutoutIndex, uint32_t loopIndex, uint32_t vertexNum) const = 0;
00151
00155 virtual bool isPeriodic() const = 0;
00156
00160 virtual const physx::PxVec2& getDimensions() const = 0;
00161
00163
00164
00165
00167 virtual void release() = 0;
00168
00169 protected:
00171 virtual ~CutoutSet() {}
00172 };
00173
00174
00179 struct NoiseParameters
00180 {
00184 float amplitude;
00185
00190 float frequency;
00191
00196 int gridSize;
00197
00203 int type;
00204
00206 NoiseParameters()
00207 {
00208 setToDefault();
00209 }
00210
00219 void setToDefault()
00220 {
00221 amplitude = 0.0f;
00222 frequency = 0.25f;
00223 gridSize = 10;
00224 type = 0;
00225 }
00226 };
00227
00228
00234 struct SliceParameters
00235 {
00240 enum Order
00241 {
00242 XYZ,
00243 YZX,
00244 ZXY,
00245 ZYX,
00246 YXZ,
00247 XZY,
00248 Through
00249 };
00250
00252 unsigned order;
00253
00255 unsigned splitsPerPass[3];
00256
00263 float linearVariation[3];
00264
00270 float angularVariation[3];
00271
00273 NoiseParameters noise[3];
00274
00276 SliceParameters()
00277 {
00278 setToDefault();
00279 }
00280
00290 void setToDefault()
00291 {
00292 order = XYZ;
00293 splitsPerPass[0] = splitsPerPass[1] = splitsPerPass[2] = 1;
00294 linearVariation[0] = linearVariation[1] = linearVariation[2] = 0.1f;
00295 angularVariation[0] = angularVariation[1] = angularVariation[2] = 20.0f * 3.1415927f / 180.0f;
00296 noise[0].setToDefault();
00297 noise[1].setToDefault();
00298 noise[2].setToDefault();
00299 }
00300 };
00301
00302
00308 struct FractureSliceDesc
00309 {
00311 unsigned maxDepth;
00312
00314 SliceParameters* sliceParameters;
00315
00319 bool useTargetProportions;
00320
00328 float targetProportions[3];
00329
00336 float minimumChunkSize[3];
00337
00341 nvidia::FractureMaterialDesc materialDesc[3];
00342
00346 bool instanceChunks;
00347
00351 bool useDisplacementMaps;
00352
00354 enum NoiseMode
00355 {
00356 NoiseWavePlane = 0,
00357 NoisePerlin2D,
00358 NoisePerlin3D,
00359
00360 NoiseModeCount
00361 };
00362
00366 unsigned noiseMode;
00367
00369 FractureSliceDesc()
00370 {
00371 setToDefault();
00372 }
00373
00387 void setToDefault()
00388 {
00389 maxDepth = 0;
00390 sliceParameters = NULL;
00391 useTargetProportions = false;
00392 for (int i = 0; i < 3; ++i)
00393 {
00394 targetProportions[i] = 1.0f;
00395 minimumChunkSize[i] = 0.0f;
00396 materialDesc[i].setToDefault();
00397 }
00398 instanceChunks = false;
00399 useDisplacementMaps = false;
00400 noiseMode = NoiseWavePlane;
00401 }
00402 };
00403
00404
00410 struct CutoutParameters
00411 {
00416 float depth;
00417
00423 nvidia::FractureMaterialDesc materialDesc;
00424
00430 NoiseParameters backfaceNoise;
00431
00440 NoiseParameters edgeNoise;
00441
00443 CutoutParameters()
00444 {
00445 setToDefault();
00446 }
00447
00456 void setToDefault()
00457 {
00458 depth = 1.0f;
00459 backfaceNoise.setToDefault();
00460 materialDesc.setToDefault();
00461 edgeNoise.setToDefault();
00462 }
00463 };
00464
00465
00471 struct FractureCutoutDesc
00472 {
00474 enum Directions
00475 {
00476 UserDefined = 0,
00477
00478 NegativeX = 1 << 0,
00479 PositiveX = 1 << 1,
00480 NegativeY = 1 << 2,
00481 PositiveY = 1 << 3,
00482 NegativeZ = 1 << 4,
00483 PositiveZ = 1 << 5,
00484
00485 DirectionCount = 6
00486 };
00487
00489 unsigned directions;
00490
00495 unsigned directionOrder[DirectionCount];
00496
00498 CutoutParameters cutoutParameters[DirectionCount];
00499
00504 physx::PxVec3 userDefinedDirection;
00505
00507 physx::PxMat33 userUVMapping;
00508
00510 CutoutParameters userDefinedCutoutParameters;
00511
00513 enum InstancingMode
00514 {
00515 DoNotInstance,
00516 InstanceCongruentChunks,
00517 InstanceAllChunks,
00518
00519 InstanceModeCount
00520 };
00521
00525 unsigned instancingMode;
00526
00530 bool tileFractureMap;
00531
00535 physx::PxVec2 uvTileSize;
00536
00540 bool splitNonconvexRegions;
00541
00546 enum CutoutChunkFracturingMethod
00547 {
00548 DoNotFractureCutoutChunks,
00549 SliceFractureCutoutChunks,
00550 VoronoiFractureCutoutChunks,
00551
00552 CutoutChunkFracturingMethodCount
00553 };
00554
00563 unsigned chunkFracturingMethod;
00564
00572 bool trimFaceCollisionHulls;
00573
00575 float cutoutWidthScale[DirectionCount];
00576
00578 float cutoutHeightScale[DirectionCount];
00579
00581 float cutoutWidthOffset[DirectionCount];
00582
00584 float cutoutHeightOffset[DirectionCount];
00585
00587 bool cutoutWidthInvert[DirectionCount];
00588
00590 bool cutoutHeightInvert[DirectionCount];
00591
00593 float cutoutSizeX;
00594
00596 float cutoutSizeY;
00597
00604 float facetNormalMergeThresholdAngle;
00605
00607 FractureCutoutDesc()
00608 {
00609 setToDefault();
00610 }
00611
00638 void setToDefault()
00639 {
00640 directions = 0;
00641 userDefinedDirection= physx::PxVec3(0.0f);
00642 userUVMapping = physx::PxMat33(physx::PxIdentity);
00643 userDefinedCutoutParameters.setToDefault();
00644 instancingMode = DoNotInstance;
00645 tileFractureMap = false;
00646 uvTileSize = physx::PxVec2(0.0f);
00647 for (uint32_t i = 0; i < DirectionCount; ++i)
00648 {
00649 directionOrder[i] = 1u << i;
00650 cutoutParameters[i].setToDefault();
00651 cutoutWidthScale[i] = 1.0f;
00652 cutoutHeightScale[i] = 1.0f;
00653 cutoutWidthOffset[i] = 0.0f;
00654 cutoutHeightOffset[i] = 0.0f;
00655 cutoutWidthInvert[i] = false;
00656 cutoutHeightInvert[i] = false;
00657 }
00658 cutoutSizeX = 1.0f;
00659 cutoutSizeY = 1.0f;
00660 facetNormalMergeThresholdAngle = 60.0f;
00661 splitNonconvexRegions = false;
00662 chunkFracturingMethod = DoNotFractureCutoutChunks;
00663 trimFaceCollisionHulls = true;
00664 }
00665 };
00666
00667
00673 struct FractureVoronoiDesc
00674 {
00678 unsigned siteCount;
00679
00683 const physx::PxVec3* sites;
00684
00689 const uint32_t* chunkIndices;
00690
00698 NoiseParameters faceNoise;
00699
00703 bool instanceChunks;
00704
00708 bool useDisplacementMaps;
00709
00711 enum NoiseMode
00712 {
00713 NoiseWavePlane = 0,
00714 NoisePerlin2D,
00715 NoisePerlin3D,
00716
00717 NoiseModeCount
00718 };
00719
00723 unsigned noiseMode;
00724
00731 float minimumChunkSize;
00732
00737 nvidia::FractureMaterialDesc materialDesc;
00738
00739
00741 FractureVoronoiDesc()
00742 {
00743 setToDefault();
00744 }
00745
00759 void setToDefault()
00760 {
00761 siteCount = 0;
00762 sites = NULL;
00763 chunkIndices = NULL;
00764 faceNoise.setToDefault();
00765 instanceChunks = false;
00766 useDisplacementMaps = false;
00767 noiseMode = NoiseWavePlane;
00768 minimumChunkSize = 0.0f;
00769 materialDesc.setToDefault();
00770 }
00771 };
00772
00773
00774 }
00775
00776
00777 PX_POP_PACK
00778
00779 #endif // FRACTURE_TOOLS_H