diff options
| author | Anton Novoselov <[email protected]> | 2017-08-08 20:14:22 +0300 |
|---|---|---|
| committer | Anton Novoselov <[email protected]> | 2017-08-08 20:14:22 +0300 |
| commit | d41654b469fa51870b5952c836c04d9da17f32d3 (patch) | |
| tree | 64f8f437eef394630355f281d35ca1d53e5c4d6c /tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastAssetModel.cpp | |
| parent | add +x for packman script (diff) | |
| download | archived-blast-d41654b469fa51870b5952c836c04d9da17f32d3.tar.xz archived-blast-d41654b469fa51870b5952c836c04d9da17f32d3.zip | |
Updated to CL 22627414:
* docs updates
* authoring fixes
* stress solver crash fixes
Diffstat (limited to 'tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastAssetModel.cpp')
| -rw-r--r-- | tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastAssetModel.cpp | 40 |
1 files changed, 27 insertions, 13 deletions
diff --git a/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastAssetModel.cpp b/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastAssetModel.cpp index 2c39824..857cb9b 100644 --- a/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastAssetModel.cpp +++ b/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastAssetModel.cpp @@ -36,7 +36,7 @@ #include "NvBlastExtPxAsset.h" #include <sstream> #include <fstream> -#include "NvBlastExtExporterFbxReader.h" +#include "NvBlastExtExporter.h" #include "PxPhysics.h" #include <NvBlastGlobals.h> #include "NvBlastExtAssetUtils.h" @@ -46,6 +46,8 @@ #include "NvBlastExtLlSerialization.h" #include "NvBlastExtTkSerialization.h" #include "NvBlastExtPxSerialization.h" +#include "NvBlastExtAuthoring.h" +#include "NvBlastExtAuthoringCollisionBuilder.h" BlastAssetModel::BlastAssetModel(TkFramework& framework, PxPhysics& physics, PxCooking& cooking, ExtSerialization& serialization, Renderer& renderer, const char* modelName, const char* modelPath) : BlastAsset(renderer) @@ -179,27 +181,31 @@ BlastAssetModel::BlastAssetModel(TkFramework& framework, PxPhysics& physics, PxC path = GlobalSettings::MakeFileName(modelPath, objFileName.str().c_str()); if (QFile::exists(path.c_str())) { - FbxFileReader rdr; - rdr.loadFromFile(path); - if (rdr.isCollisionLoaded() == 0) + std::shared_ptr<IFbxFileReader> rdr(NvBlastExtExporterCreateFbxFileReader(), [](IFbxFileReader* p) {p->release(); }); + rdr->loadFromFile(path.c_str()); + if (rdr->isCollisionLoaded() == 0) { ASSERT_PRINT(false, "fbx doesn't contain collision geometry"); } - std::vector<std::vector<CollisionHull> > hulls; - rdr.getCollision(hulls); + uint32_t* hullsOffsets = nullptr; + CollisionHull** hulls = nullptr; + uint32_t meshCount = rdr->getCollision(hullsOffsets, hulls); /** Create physics meshes; */ - Nv::Blast::ConvexMeshBuilder collisionBuilder(&cooking, &physics.getPhysicsInsertionCallback()); - physicsChunks.resize(hulls.size()); - physicsSubchunks.resize(hulls.size()); + std::shared_ptr<Nv::Blast::ConvexMeshBuilder> collisionBuilder( + NvBlastExtAuthoringCreateConvexMeshBuilder(&cooking, &physics.getPhysicsInsertionCallback()), + [](Nv::Blast::ConvexMeshBuilder* cmb) {cmb->release(); }); - for (uint32_t i = 0; i < hulls.size(); ++i) + physicsChunks.resize(meshCount); + physicsSubchunks.resize(meshCount); + + for (uint32_t i = 0; i < meshCount; ++i) { - for (uint32_t sbHulls = 0; sbHulls < hulls[i].size(); ++sbHulls) + for (uint32_t sbHulls = hullsOffsets[i]; sbHulls < hullsOffsets[i+1]; ++sbHulls) { - PxConvexMeshGeometry temp = physx::PxConvexMeshGeometry(collisionBuilder.buildConvexMesh(hulls[i][sbHulls])); + PxConvexMeshGeometry temp = physx::PxConvexMeshGeometry(collisionBuilder.get()->buildConvexMesh(*hulls[sbHulls])); if (temp.isValid()) { physicsSubchunks[i].push_back(ExtPxAssetDesc::SubchunkDesc()); @@ -208,12 +214,20 @@ BlastAssetModel::BlastAssetModel(TkFramework& framework, PxPhysics& physics, PxC } } } - for (uint32_t i = 0; i < hulls.size(); ++i) + for (uint32_t i = 0; i < meshCount; ++i) { physicsChunks[i].isStatic = false; physicsChunks[i].subchunkCount = (uint32_t)physicsSubchunks[i].size(); physicsChunks[i].subchunks = physicsSubchunks[i].data(); } + if (hullsOffsets) + { + NVBLAST_FREE(hullsOffsets); + } + if (hulls) + { + NVBLAST_FREE(hulls); + } } m_pxAsset = ExtPxAsset::create(tkAsset, physicsChunks.data(), (uint32_t)physicsChunks.size()); ASSERT_PRINT(m_pxAsset != nullptr, "can't create asset"); |