diff options
| author | Bryan Galdrikian <[email protected]> | 2017-10-30 12:48:13 -0700 |
|---|---|---|
| committer | Bryan Galdrikian <[email protected]> | 2017-10-30 12:48:13 -0700 |
| commit | e9623d143fb8b59546e3911d49e3e0c85faa2237 (patch) | |
| tree | 87d96cd1185f01665bf49e3b5bcf1eac128786da /sdk | |
| parent | Committing missed .inl files (diff) | |
| download | blast-e9623d143fb8b59546e3911d49e3e0c85faa2237.tar.xz blast-e9623d143fb8b59546e3911d49e3e0c85faa2237.zip | |
Add setChunkMesh method for FractureTool
Diffstat (limited to 'sdk')
3 files changed, 69 insertions, 9 deletions
diff --git a/sdk/extensions/authoring/include/NvBlastExtAuthoringFractureTool.h b/sdk/extensions/authoring/include/NvBlastExtAuthoringFractureTool.h index b23ca18..2c8eef4 100644 --- a/sdk/extensions/authoring/include/NvBlastExtAuthoringFractureTool.h +++ b/sdk/extensions/authoring/include/NvBlastExtAuthoringFractureTool.h @@ -204,6 +204,11 @@ public: virtual void setSourceMesh(const Mesh* mesh) = 0; /** + Set chunk mesh, parentId should be valid, return id of new chunk. + */ + virtual int32_t setChunkMesh(const Mesh* mesh, int32_t parentId) = 0; + + /** Set the material id to use for new interior faces. Defaults to MATERIAL_INTERIOR */ virtual void setInteriorMaterialId(int32_t materialId) = 0; diff --git a/sdk/extensions/authoring/source/NvBlastExtAuthoringFractureToolImpl.cpp b/sdk/extensions/authoring/source/NvBlastExtAuthoringFractureToolImpl.cpp index 920069d..2b1cb65 100644 --- a/sdk/extensions/authoring/source/NvBlastExtAuthoringFractureToolImpl.cpp +++ b/sdk/extensions/authoring/source/NvBlastExtAuthoringFractureToolImpl.cpp @@ -1079,22 +1079,71 @@ void FractureToolImpl::setSourceMesh(const Mesh* meshInput) } - mChunkData.resize(1); - mChunkData[0].meshData = new MeshImpl(*reinterpret_cast <const MeshImpl*>(meshInput)); - mChunkData[0].parent = -1; - mChunkData[0].isLeaf = true; - mChunkData[0].chunkId = mChunkIdCounter++; - Mesh* mesh = mChunkData[0].meshData; + //mChunkData.resize(1); + //mChunkData[0].meshData = new MeshImpl(*reinterpret_cast <const MeshImpl*>(meshInput)); + //mChunkData[0].parent = -1; + //mChunkData[0].isLeaf = true; + //mChunkData[0].chunkId = mChunkIdCounter++; + //Mesh* mesh = mChunkData[0].meshData; /** Move to origin and scale to unit cube */ - mOffset = (mesh->getBoundingBox().maximum + mesh->getBoundingBox().minimum) * 0.5f; - PxVec3 bbSizes = (mesh->getBoundingBox().maximum - mesh->getBoundingBox().minimum); + mOffset = (meshInput->getBoundingBox().maximum + meshInput->getBoundingBox().minimum) * 0.5f; + PxVec3 bbSizes = (meshInput->getBoundingBox().maximum - meshInput->getBoundingBox().minimum); mScaleFactor = std::max(bbSizes.x, std::max(bbSizes.y, bbSizes.z)); + setChunkMesh(meshInput, -1); + + //Vertex* verticesBuffer = mesh->getVerticesWritable(); + //for (uint32_t i = 0; i < mesh->getVerticesCount(); ++i) + //{ + // verticesBuffer[i].p = (verticesBuffer[i].p - mOffset) * (1.0f / mScaleFactor); + //} + + //mesh->getBoundingBoxWritable().minimum = (mesh->getBoundingBox().minimum - mOffset) * (1.0f / mScaleFactor); + //mesh->getBoundingBoxWritable().maximum = (mesh->getBoundingBox().maximum - mOffset) * (1.0f / mScaleFactor); + + + //for (uint32_t i = 0; i < mesh->getFacetCount(); ++i) + //{ + // mesh->getFacetWritable(i)->userData = 0; // Mark facet as initial boundary facet + //} +} + +int32_t FractureToolImpl::setChunkMesh(const Mesh* meshInput, int32_t parentId) +{ + ChunkInfo* parent = nullptr; + for (size_t i = 0; i < mChunkData.size(); i++) + { + if (mChunkData[i].chunkId == parentId) + { + parent = &mChunkData[i]; + } + } + if (meshInput == nullptr || (parent == nullptr && parentId != -1)) + { + return -1; + } + + mChunkData.push_back(ChunkInfo()); + auto& chunk = mChunkData.back(); + chunk.meshData = new MeshImpl(*reinterpret_cast <const MeshImpl*>(meshInput)); + chunk.parent = parentId; + chunk.isLeaf = true; + if ((size_t)parentId < mChunkData.size()) + { + mChunkData[parentId].isLeaf = false; + } + chunk.chunkId = mChunkIdCounter++; + Mesh* mesh = chunk.meshData; + + /** + Move to origin and scale to unit cube + */ + Vertex* verticesBuffer = mesh->getVerticesWritable(); for (uint32_t i = 0; i < mesh->getVerticesCount(); ++i) { @@ -1109,8 +1158,9 @@ void FractureToolImpl::setSourceMesh(const Mesh* meshInput) { mesh->getFacetWritable(i)->userData = 0; // Mark facet as initial boundary facet } -} + return chunk.chunkId; +} void FractureToolImpl::release() { diff --git a/sdk/extensions/authoring/source/NvBlastExtAuthoringFractureToolImpl.h b/sdk/extensions/authoring/source/NvBlastExtAuthoringFractureToolImpl.h index 6411ec3..0f6cdf0 100644 --- a/sdk/extensions/authoring/source/NvBlastExtAuthoringFractureToolImpl.h +++ b/sdk/extensions/authoring/source/NvBlastExtAuthoringFractureToolImpl.h @@ -174,6 +174,11 @@ public: void setSourceMesh(const Mesh* mesh) override; /** + Set chunk mesh, parentId should be valid, return id of new chunk. + */ + int32_t setChunkMesh(const Mesh* mesh, int32_t parentId) override; + + /** Get chunk mesh in polygonal representation */ Mesh* createChunkMesh(int32_t chunkId) override; |