From e9623d143fb8b59546e3911d49e3e0c85faa2237 Mon Sep 17 00:00:00 2001 From: Bryan Galdrikian Date: Mon, 30 Oct 2017 12:48:13 -0700 Subject: Add setChunkMesh method for FractureTool --- .../include/NvBlastExtAuthoringFractureTool.h | 5 ++ .../source/NvBlastExtAuthoringFractureToolImpl.cpp | 68 +++++++++++++++++++--- .../source/NvBlastExtAuthoringFractureToolImpl.h | 5 ++ 3 files changed, 69 insertions(+), 9 deletions(-) (limited to 'sdk') 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 @@ -203,6 +203,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 */ 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 (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 (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 (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 @@ -173,6 +173,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 */ -- cgit v1.2.3