aboutsummaryrefslogtreecommitdiff
path: root/samples/SampleBase/blast/BlastModel.cpp
diff options
context:
space:
mode:
authorAnton Novoselov <[email protected]>2017-08-01 12:53:38 +0300
committerAnton Novoselov <[email protected]>2017-08-01 12:53:38 +0300
commit236f03c0b9a4982328ed1201978f7f69d192d9b2 (patch)
treee486f2fa39dba203563895541e92c60ed3e25759 /samples/SampleBase/blast/BlastModel.cpp
parentAdded screens to welcome page (diff)
downloadarchived-blast-236f03c0b9a4982328ed1201978f7f69d192d9b2.tar.xz
archived-blast-236f03c0b9a4982328ed1201978f7f69d192d9b2.zip
Blast 1.1 release (windows / linux)
see docs/release_notes.txt for details
Diffstat (limited to 'samples/SampleBase/blast/BlastModel.cpp')
-rw-r--r--samples/SampleBase/blast/BlastModel.cpp102
1 files changed, 91 insertions, 11 deletions
diff --git a/samples/SampleBase/blast/BlastModel.cpp b/samples/SampleBase/blast/BlastModel.cpp
index 88ddf3c..8e503d3 100644
--- a/samples/SampleBase/blast/BlastModel.cpp
+++ b/samples/SampleBase/blast/BlastModel.cpp
@@ -1,21 +1,101 @@
-/*
-* Copyright (c) 2008-2015, NVIDIA CORPORATION. All rights reserved.
-*
-* NVIDIA CORPORATION and its licensors retain all intellectual property
-* and proprietary rights in and to this software, related documentation
-* and any modifications thereto. Any use, reproduction, disclosure or
-* distribution of this software and related documentation without an express
-* license agreement from NVIDIA CORPORATION is strictly prohibited.
-*/
+// This code contains NVIDIA Confidential Information and is disclosed to you
+// under a form of NVIDIA software license agreement provided separately to you.
+//
+// Notice
+// NVIDIA Corporation and its licensors retain all intellectual property and
+// proprietary rights in and to this software and related documentation and
+// any modifications thereto. Any use, reproduction, disclosure, or
+// distribution of this software and related documentation without an express
+// license agreement from NVIDIA Corporation is strictly prohibited.
+//
+// ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES
+// NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO
+// THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT,
+// MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE.
+//
+// Information and code furnished is believed to be accurate and reliable.
+// However, NVIDIA Corporation assumes no responsibility for the consequences of use of such
+// information or for any infringement of patents or other rights of third parties that may
+// result from its use. No license is granted by implication or otherwise under any patent
+// or patent rights of NVIDIA Corporation. Details are subject to change without notice.
+// This code supersedes and replaces all information previously supplied.
+// NVIDIA Corporation products are not authorized for use as critical
+// components in life support devices or systems without express written approval of
+// NVIDIA Corporation.
+//
+// Copyright (c) 2008-2017 NVIDIA Corporation. All rights reserved.
+
#include "BlastModel.h"
#define TINYOBJLOADER_IMPLEMENTATION
#include "tiny_obj_loader.h"
-
+#include "NvBlastExtExporter.h"
+#include "NvBlastGlobals.h"
using namespace physx;
+BlastModelPtr BlastModel::loadFromFbxFile(const char* path)
+{
+ std::shared_ptr<BlastModel> model = std::shared_ptr<BlastModel>(new BlastModel());
+
+
+ std::shared_ptr<Nv::Blast::IFbxFileReader> rdr(NvBlastExtExporterCreateFbxFileReader(), [](Nv::Blast::IFbxFileReader* p) {p->release(); });
+ rdr->loadFromFile(path);
+ if (rdr->getBoneCount() == 0)
+ {
+ return nullptr;
+ }
+
+ model->chunks.resize(rdr->getBoneCount());
+
+ model->materials.push_back(BlastModel::Material());
+
+
+ /**
+ Produce buffers of appropriate for AssetViewer format
+ */
+ uint32_t* infl;
+ rdr->getBoneInfluences(infl);
+ for (uint32_t i = 0; i < rdr->getBoneCount(); ++i)
+ {
+ std::vector<int32_t> indRemap(rdr->getVerticesCount(), -1);
+ std::vector<uint32_t> indices;
+ SimpleMesh cmesh;
+ for (uint32_t j = 0; j < rdr->getVerticesCount(); ++j)
+ {
+ if (i == infl[j])
+ {
+ indRemap[j] = (int32_t)cmesh.vertices.size();
+ cmesh.vertices.push_back(SimpleMesh::Vertex());
+ cmesh.vertices.back().normal = rdr->getNormalsArray()[j];
+ cmesh.vertices.back().position = rdr->getPositionArray()[j];
+ cmesh.vertices.back().uv = rdr->getUvArray()[j];
+ }
+ }
+ for (uint32_t j = 0; j < rdr->getIdicesCount(); j += 3)
+ {
+ if (i == infl[rdr->getIndexArray()[j]])
+ {
+ int32_t lind = rdr->getIndexArray()[j + 2];
+ cmesh.indices.push_back(indRemap[lind]);
+ lind = rdr->getIndexArray()[j + 1];
+ cmesh.indices.push_back(indRemap[lind]);
+ lind = rdr->getIndexArray()[j];
+ cmesh.indices.push_back(indRemap[lind]);
+ }
+ }
+
+ model->chunks[i].meshes.push_back(Chunk::Mesh());
+ model->chunks[i].meshes.back().materialIndex = 0;
+ model->chunks[i].meshes.back().mesh = cmesh;
+
+ NVBLAST_FREE(infl);
+ }
+ return model;
+}
+
+
BlastModelPtr BlastModel::loadFromFileTinyLoader(const char* path)
{
std::shared_ptr<BlastModel> model = std::shared_ptr<BlastModel>(new BlastModel());
@@ -33,7 +113,7 @@ BlastModelPtr BlastModel::loadFromFileTinyLoader(const char* path)
break;
}
}
-
+
bool ret = tinyobj::LoadObj(shapes, mats, err, path, mtlPath.data());