aboutsummaryrefslogtreecommitdiff
path: root/sdk
diff options
context:
space:
mode:
authorBryan Galdrikian <[email protected]>2017-10-30 12:48:13 -0700
committerBryan Galdrikian <[email protected]>2017-10-30 12:48:13 -0700
commite9623d143fb8b59546e3911d49e3e0c85faa2237 (patch)
tree87d96cd1185f01665bf49e3b5bcf1eac128786da /sdk
parentCommitting missed .inl files (diff)
downloadblast-e9623d143fb8b59546e3911d49e3e0c85faa2237.tar.xz
blast-e9623d143fb8b59546e3911d49e3e0c85faa2237.zip
Add setChunkMesh method for FractureTool
Diffstat (limited to 'sdk')
-rw-r--r--sdk/extensions/authoring/include/NvBlastExtAuthoringFractureTool.h5
-rw-r--r--sdk/extensions/authoring/source/NvBlastExtAuthoringFractureToolImpl.cpp68
-rw-r--r--sdk/extensions/authoring/source/NvBlastExtAuthoringFractureToolImpl.h5
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;