Next iteration for c++11 features.
parent
0dabce2754
commit
18531e3677
|
@ -56,8 +56,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
#include <memory>
|
||||
|
||||
using namespace Assimp;
|
||||
namespace Assimp {
|
||||
|
||||
using namespace D3DS;
|
||||
|
||||
namespace {
|
||||
|
|
|
@ -53,7 +53,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#include <assimp/light.h>
|
||||
#include <assimp/material.h>
|
||||
#include <assimp/qnan.h>
|
||||
#include <stdio.h> //sprintf
|
||||
#include <cstdio> //sprintf
|
||||
|
||||
namespace Assimp {
|
||||
namespace D3DS {
|
||||
|
|
|
@ -46,11 +46,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
*/
|
||||
#ifndef AI_3DSIMPORTER_H_INC
|
||||
#define AI_3DSIMPORTER_H_INC
|
||||
#ifndef ASSIMP_BUILD_NO_3DS_IMPORTER
|
||||
|
||||
#include <assimp/BaseImporter.h>
|
||||
#include <assimp/types.h>
|
||||
|
||||
#ifndef ASSIMP_BUILD_NO_3DS_IMPORTER
|
||||
|
||||
#include "3DSHelper.h"
|
||||
#include <assimp/StreamReader.h>
|
||||
|
@ -75,14 +75,14 @@ public:
|
|||
* See BaseImporter::CanRead() for details.
|
||||
*/
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool checkSig) const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Called prior to ReadFile().
|
||||
* The function is a request to the importer to update its configuration
|
||||
* basing on the Importer's configuration property list.
|
||||
*/
|
||||
void SetupProperties(const Importer* pImp);
|
||||
void SetupProperties(const Importer* pImp) override;
|
||||
|
||||
protected:
|
||||
|
||||
|
@ -90,14 +90,14 @@ protected:
|
|||
/** Return importer meta information.
|
||||
* See #BaseImporter::GetInfo for the details
|
||||
*/
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
const aiImporterDesc* GetInfo () const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Imports the given file into the given scene structure.
|
||||
* See BaseImporter::InternReadFile() for details
|
||||
*/
|
||||
void InternReadFile( const std::string& pFile, aiScene* pScene,
|
||||
IOSystem* pIOHandler);
|
||||
IOSystem* pIOHandler) override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Converts a temporary material to the outer representation
|
||||
|
|
|
@ -40,6 +40,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
*/
|
||||
#pragma once
|
||||
|
||||
#ifndef ASSIMP_BUILD_NO_EXPORT
|
||||
#ifndef ASSIMP_BUILD_NO_3MF_EXPORTER
|
||||
|
||||
#include <memory>
|
||||
#include <sstream>
|
||||
#include <vector>
|
||||
|
@ -58,8 +61,6 @@ class IOStream;
|
|||
|
||||
namespace D3MF {
|
||||
|
||||
#ifndef ASSIMP_BUILD_NO_EXPORT
|
||||
#ifndef ASSIMP_BUILD_NO_3MF_EXPORTER
|
||||
|
||||
struct OpcPackageRelationship;
|
||||
|
||||
|
|
|
@ -42,6 +42,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#ifndef AI_D3MFLOADER_H_INCLUDED
|
||||
#define AI_D3MFLOADER_H_INCLUDED
|
||||
|
||||
#ifndef ASSIMP_BUILD_NO_3MF_IMPORTER
|
||||
|
||||
#include <assimp/BaseImporter.h>
|
||||
|
||||
namespace Assimp {
|
||||
|
@ -84,4 +86,6 @@ protected:
|
|||
|
||||
} // Namespace Assimp
|
||||
|
||||
#endif // #ifndef ASSIMP_BUILD_NO_3MF_IMPORTER
|
||||
|
||||
#endif // AI_D3MFLOADER_H_INCLUDED
|
||||
|
|
|
@ -51,11 +51,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#include <assimp/IOSystem.hpp>
|
||||
#include <assimp/texture.h>
|
||||
#include "3MFXmlTags.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <cstdlib>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
namespace Assimp {
|
||||
|
|
|
@ -42,9 +42,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#ifndef D3MFOPCPACKAGE_H
|
||||
#define D3MFOPCPACKAGE_H
|
||||
|
||||
#include <assimp/IOSystem.hpp>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <assimp/IOSystem.hpp>
|
||||
|
||||
struct aiTexture;
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ namespace Assimp {
|
|||
class AC3DImporter : public BaseImporter {
|
||||
public:
|
||||
AC3DImporter();
|
||||
~AC3DImporter();
|
||||
~AC3DImporter() override;
|
||||
|
||||
// Represents an AC3D material
|
||||
struct Material {
|
||||
|
@ -185,25 +185,25 @@ public:
|
|||
* See BaseImporter::CanRead() for details.
|
||||
*/
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
// -------------------------------------------------------------------
|
||||
/** Return importer meta information.
|
||||
* See #BaseImporter::GetInfo for the details */
|
||||
const aiImporterDesc *GetInfo() const;
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Imports the given file into the given scene structure.
|
||||
* See BaseImporter::InternReadFile() for details*/
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene,
|
||||
IOSystem *pIOHandler);
|
||||
IOSystem *pIOHandler) override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Called prior to ReadFile().
|
||||
* The function is a request to the importer to update its configuration
|
||||
* basing on the Importer's configuration property list.*/
|
||||
void SetupProperties(const Importer *pImp);
|
||||
void SetupProperties(const Importer *pImp) override;
|
||||
|
||||
private:
|
||||
// -------------------------------------------------------------------
|
||||
|
|
|
@ -267,7 +267,7 @@ public:
|
|||
AMFImporter() AI_NO_EXCEPT;
|
||||
|
||||
/// Default destructor.
|
||||
~AMFImporter();
|
||||
~AMFImporter() override;
|
||||
|
||||
/// Parse AMF file and fill scene graph. The function has no return value. Result can be found by analyzing the generated graph.
|
||||
/// Also exception can be thrown if trouble will found.
|
||||
|
@ -276,9 +276,9 @@ public:
|
|||
void ParseFile(const std::string &pFile, IOSystem *pIOHandler);
|
||||
void ParseHelper_Node_Enter(AMFNodeElementBase *child);
|
||||
void ParseHelper_Node_Exit();
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool pCheckSig) const;
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler);
|
||||
const aiImporterDesc *GetInfo() const;
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool pCheckSig) const override;
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) override;
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
bool Find_NodeElement(const std::string &pID, const AMFNodeElementBase::EType pType, AMFNodeElementBase **pNodeElement) const;
|
||||
bool Find_ConvertedNode(const std::string &pID, NodeArray &nodeArray, aiNode **pNode) const;
|
||||
bool Find_ConvertedMaterial(const std::string &pID, const SPP_Material **pConvertedMaterial) const;
|
||||
|
|
|
@ -48,15 +48,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#ifndef INCLUDED_AI_AMF_IMPORTER_NODE_H
|
||||
#define INCLUDED_AI_AMF_IMPORTER_NODE_H
|
||||
|
||||
// Header files, stdlib.
|
||||
// Header files, Assimp.
|
||||
#include <assimp/scene.h>
|
||||
#include <assimp/types.h>
|
||||
|
||||
#include <list>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
// Header files, Assimp.
|
||||
#include "assimp/scene.h"
|
||||
#include "assimp/types.h"
|
||||
|
||||
/// \class CAMFImporter_NodeElement
|
||||
/// Base class for elements of nodes.
|
||||
class AMFNodeElementBase {
|
||||
|
|
|
@ -5,8 +5,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
|
|
@ -62,42 +62,37 @@ namespace Assimp {
|
|||
class ASEImporter : public BaseImporter {
|
||||
public:
|
||||
ASEImporter();
|
||||
~ASEImporter();
|
||||
~ASEImporter() override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Returns whether the class can handle the format of the given file.
|
||||
* See BaseImporter::CanRead() for details.
|
||||
*/
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Return importer meta information.
|
||||
* See #BaseImporter::GetInfo for the details
|
||||
*/
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
|
||||
const aiImporterDesc* GetInfo () const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Imports the given file into the given scene structure.
|
||||
* See BaseImporter::InternReadFile() for details
|
||||
*/
|
||||
void InternReadFile( const std::string& pFile, aiScene* pScene,
|
||||
IOSystem* pIOHandler);
|
||||
|
||||
IOSystem* pIOHandler) override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Called prior to ReadFile().
|
||||
* The function is a request to the importer to update its configuration
|
||||
* basing on the Importer's configuration property list.
|
||||
*/
|
||||
void SetupProperties(const Importer* pImp);
|
||||
|
||||
void SetupProperties(const Importer* pImp) override;
|
||||
|
||||
private:
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Generate normal vectors basing on smoothing groups
|
||||
* (in some cases the normal are already contained in the file)
|
||||
|
@ -106,7 +101,6 @@ private:
|
|||
*/
|
||||
bool GenerateNormals(ASE::Mesh& mesh);
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Create valid vertex/normal/UV/color/face lists.
|
||||
* All elements are unique, faces have only one set of indices
|
||||
|
@ -115,51 +109,43 @@ private:
|
|||
*/
|
||||
void BuildUniqueRepresentation(ASE::Mesh& mesh);
|
||||
|
||||
|
||||
/** Create one-material-per-mesh meshes ;-)
|
||||
* \param mesh Mesh to work with
|
||||
* \param Receives the list of all created meshes
|
||||
*/
|
||||
void ConvertMeshes(ASE::Mesh& mesh, std::vector<aiMesh*>& avOut);
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Convert a material to a aiMaterial object
|
||||
* \param mat Input material
|
||||
*/
|
||||
void ConvertMaterial(ASE::Material& mat);
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Setup the final material indices for each mesh
|
||||
*/
|
||||
void BuildMaterialIndices();
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Build the node graph
|
||||
*/
|
||||
void BuildNodes(std::vector<ASE::BaseNode*>& nodes);
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Build output cameras
|
||||
*/
|
||||
void BuildCameras();
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Build output lights
|
||||
*/
|
||||
void BuildLights();
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Build output animations
|
||||
*/
|
||||
void BuildAnimations(const std::vector<ASE::BaseNode*>& nodes);
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Add sub nodes to a node
|
||||
* \param pcParent parent node to be filled
|
||||
|
@ -183,7 +169,6 @@ private:
|
|||
void GenerateDefaultMaterial();
|
||||
|
||||
protected:
|
||||
|
||||
/** Parser instance */
|
||||
ASE::Parser* mParser;
|
||||
|
||||
|
|
|
@ -5,8 +5,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
|
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
@ -43,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
/** @file AssbinExporter.h
|
||||
* ASSBIN Exporter Main Header
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef AI_ASSBINEXPORTER_H_INC
|
||||
#define AI_ASSBINEXPORTER_H_INC
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
@ -74,17 +73,11 @@ private:
|
|||
bool compressed;
|
||||
|
||||
public:
|
||||
virtual bool CanRead(
|
||||
const std::string& pFile,
|
||||
IOSystem* pIOHandler,
|
||||
bool checkSig
|
||||
) const;
|
||||
virtual const aiImporterDesc* GetInfo() const;
|
||||
virtual void InternReadFile(
|
||||
const std::string& pFile,
|
||||
aiScene* pScene,
|
||||
IOSystem* pIOHandler
|
||||
);
|
||||
bool CanRead(const std::string& pFile,
|
||||
IOSystem* pIOHandler, bool checkSig) const override;
|
||||
const aiImporterDesc* GetInfo() const override;
|
||||
void InternReadFile(
|
||||
const std::string& pFile,aiScene* pScene,IOSystem* pIOHandler) override;
|
||||
void ReadHeader();
|
||||
void ReadBinaryScene( IOStream * stream, aiScene* pScene );
|
||||
void ReadBinaryNode( IOStream * stream, aiNode** mRootNode, aiNode* parent );
|
||||
|
|
|
@ -69,13 +69,12 @@ void MeshSplitter::UpdateNode(aiNode* pcNode, const std::vector<std::pair<aiMesh
|
|||
for (unsigned int i = 0, end = pcNode->mNumChildren; i < end;++i) {
|
||||
UpdateNode ( pcNode->mChildren[i], source_mesh_map );
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
#define WAS_NOT_COPIED 0xffffffff
|
||||
static const unsigned int WAS_NOT_COPIED = 0xffffffff;
|
||||
|
||||
typedef std::pair <unsigned int,float> PerVertexWeight;
|
||||
typedef std::vector <PerVertexWeight> VertexWeightTable;
|
||||
using PerVertexWeight = std::pair <unsigned int,float>;
|
||||
using VertexWeightTable = std::vector <PerVertexWeight>;
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
VertexWeightTable* ComputeVertexBoneWeightTable(const aiMesh* pMesh) {
|
||||
|
@ -89,7 +88,7 @@ VertexWeightTable* ComputeVertexBoneWeightTable(const aiMesh* pMesh) {
|
|||
aiBone* bone = pMesh->mBones[i];
|
||||
for (unsigned int a = 0; a < bone->mNumWeights;++a) {
|
||||
const aiVertexWeight& weight = bone->mWeights[a];
|
||||
avPerVertexWeights[weight.mVertexId].push_back( std::make_pair(i,weight.mWeight) );
|
||||
avPerVertexWeights[weight.mVertexId].emplace_back(i,weight.mWeight);
|
||||
}
|
||||
}
|
||||
return avPerVertexWeights;
|
||||
|
@ -100,7 +99,7 @@ void MeshSplitter :: SplitMesh(unsigned int a, aiMesh* in_mesh, std::vector<std:
|
|||
// TODO: should better use std::(multi)set for source_mesh_map.
|
||||
|
||||
if (in_mesh->mNumVertices <= LIMIT) {
|
||||
source_mesh_map.push_back(std::make_pair(in_mesh,a));
|
||||
source_mesh_map.emplace_back(in_mesh,a);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -187,7 +186,7 @@ void MeshSplitter :: SplitMesh(unsigned int a, aiMesh* in_mesh, std::vector<std:
|
|||
break;
|
||||
}
|
||||
|
||||
vFaces.push_back(aiFace());
|
||||
vFaces.emplace_back();
|
||||
aiFace& rFace = vFaces.back();
|
||||
|
||||
// setup face type and number of indices
|
||||
|
|
|
@ -24,38 +24,29 @@ struct aiNode;
|
|||
/** Splits meshes of unique vertices into meshes with no more vertices than
|
||||
* a given, configurable threshold value.
|
||||
*/
|
||||
class MeshSplitter
|
||||
{
|
||||
|
||||
class MeshSplitter {
|
||||
public:
|
||||
unsigned int LIMIT;
|
||||
|
||||
void SetLimit(unsigned int l) {
|
||||
LIMIT = l;
|
||||
}
|
||||
void SetLimit(unsigned int l) {
|
||||
LIMIT = l;
|
||||
}
|
||||
|
||||
unsigned int GetLimit() const {
|
||||
return LIMIT;
|
||||
}
|
||||
unsigned int GetLimit() const {
|
||||
return LIMIT;
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Executes the post processing step on the given imported data.
|
||||
// -------------------------------------------------------------------
|
||||
/** Executes the post processing step on the given imported data.
|
||||
* At the moment a process is not supposed to fail.
|
||||
* @param pScene The imported data to work at.
|
||||
*/
|
||||
void Execute( aiScene* pScene);
|
||||
|
||||
void Execute(aiScene *pScene);
|
||||
|
||||
private:
|
||||
void UpdateNode(aiNode *pcNode, const std::vector<std::pair<aiMesh *, unsigned int>> &source_mesh_map);
|
||||
void SplitMesh(unsigned int index, aiMesh *mesh, std::vector<std::pair<aiMesh *, unsigned int>> &source_mesh_map);
|
||||
|
||||
void UpdateNode(aiNode* pcNode, const std::vector<std::pair<aiMesh*, unsigned int> >& source_mesh_map);
|
||||
void SplitMesh (unsigned int index, aiMesh* mesh, std::vector<std::pair<aiMesh*, unsigned int> >& source_mesh_map);
|
||||
|
||||
public:
|
||||
|
||||
unsigned int LIMIT;
|
||||
};
|
||||
|
||||
#endif // INCLUDED_MESH_SPLITTER
|
||||
|
||||
|
|
|
@ -43,6 +43,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
/** @file AssxmlExporter.h
|
||||
* ASSXML Exporter Main Header
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef AI_ASSXMLEXPORTER_H_INC
|
||||
#define AI_ASSXMLEXPORTER_H_INC
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
@ -43,7 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
/** @file AssxmlFileWriter.h
|
||||
* @brief Declaration of Assxml file writer.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#ifndef AI_ASSXMLFILEWRITER_H_INC
|
||||
#define AI_ASSXMLFILEWRITER_H_INC
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
@ -40,8 +39,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/** @file Definition of the .b3d importer class. */
|
||||
|
||||
/**
|
||||
* @file Definition of the .b3d importer class.
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef AI_B3DIMPORTER_H_INC
|
||||
#define AI_B3DIMPORTER_H_INC
|
||||
|
||||
|
@ -62,14 +63,12 @@ namespace Assimp{
|
|||
class B3DImporter : public BaseImporter{
|
||||
public:
|
||||
B3DImporter() = default;
|
||||
virtual ~B3DImporter();
|
||||
|
||||
virtual bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const;
|
||||
~B3DImporter() override;
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
|
||||
virtual const aiImporterDesc* GetInfo () const;
|
||||
virtual void InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler);
|
||||
const aiImporterDesc* GetInfo () const override;
|
||||
void InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler) override;
|
||||
|
||||
private:
|
||||
|
||||
|
@ -113,7 +112,6 @@ private:
|
|||
void ReadBB3D( aiScene *scene );
|
||||
|
||||
size_t _pos;
|
||||
// unsigned _size;
|
||||
std::vector<unsigned char> _buf;
|
||||
std::vector<size_t> _stack;
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
@ -43,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
/** @file BlenderLoader.h
|
||||
* @brief Declaration of the Blender 3D (*.blend) importer class.
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef INCLUDED_AI_BLEND_LOADER_H
|
||||
#define INCLUDED_AI_BLEND_LOADER_H
|
||||
|
||||
|
@ -56,149 +56,139 @@ struct aiLight;
|
|||
struct aiCamera;
|
||||
struct aiMaterial;
|
||||
|
||||
namespace Assimp {
|
||||
namespace Assimp {
|
||||
|
||||
// TinyFormatter.h
|
||||
namespace Formatter {
|
||||
template <typename T,typename TR, typename A> class basic_formatter;
|
||||
typedef class basic_formatter< char, std::char_traits<char>, std::allocator<char> > format;
|
||||
}
|
||||
// TinyFormatter.h
|
||||
namespace Formatter {
|
||||
|
||||
// BlenderDNA.h
|
||||
namespace Blender {
|
||||
class FileDatabase;
|
||||
struct ElemBase;
|
||||
}
|
||||
template <typename T, typename TR, typename A>
|
||||
class basic_formatter;
|
||||
|
||||
// BlenderScene.h
|
||||
namespace Blender {
|
||||
struct Scene;
|
||||
struct Object;
|
||||
struct Mesh;
|
||||
struct Camera;
|
||||
struct Lamp;
|
||||
struct MTex;
|
||||
struct Image;
|
||||
struct Material;
|
||||
}
|
||||
typedef class basic_formatter<char, std::char_traits<char>, std::allocator<char>> format;
|
||||
|
||||
// BlenderIntermediate.h
|
||||
namespace Blender {
|
||||
struct ConversionData;
|
||||
template <template <typename,typename> class TCLASS, typename T> struct TempArray;
|
||||
}
|
||||
} // namespace Formatter
|
||||
|
||||
// BlenderModifier.h
|
||||
namespace Blender {
|
||||
class BlenderModifierShowcase;
|
||||
class BlenderModifier;
|
||||
}
|
||||
// BlenderDNA.h
|
||||
namespace Blender {
|
||||
class FileDatabase;
|
||||
struct ElemBase;
|
||||
} // namespace Blender
|
||||
|
||||
// BlenderScene.h
|
||||
namespace Blender {
|
||||
struct Scene;
|
||||
struct Object;
|
||||
struct Mesh;
|
||||
struct Camera;
|
||||
struct Lamp;
|
||||
struct MTex;
|
||||
struct Image;
|
||||
struct Material;
|
||||
} // namespace Blender
|
||||
|
||||
// BlenderIntermediate.h
|
||||
namespace Blender {
|
||||
struct ConversionData;
|
||||
template <template <typename, typename> class TCLASS, typename T>
|
||||
struct TempArray;
|
||||
} // namespace Blender
|
||||
|
||||
// BlenderModifier.h
|
||||
namespace Blender {
|
||||
class BlenderModifierShowcase;
|
||||
class BlenderModifier;
|
||||
} // namespace Blender
|
||||
|
||||
// -------------------------------------------------------------------------------------------
|
||||
/** Load blenders official binary format. The actual file structure (the `DNA` how they
|
||||
* call it is outsourced to BlenderDNA.cpp/BlenderDNA.h. This class only performs the
|
||||
* conversion from intermediate format to aiScene. */
|
||||
// -------------------------------------------------------------------------------------------
|
||||
class BlenderImporter : public BaseImporter, public LogFunctions<BlenderImporter>
|
||||
{
|
||||
class BlenderImporter : public BaseImporter, public LogFunctions<BlenderImporter> {
|
||||
public:
|
||||
BlenderImporter();
|
||||
~BlenderImporter();
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const;
|
||||
~BlenderImporter() override;
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
void SetupProperties(const Importer* pImp);
|
||||
void InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler);
|
||||
void ParseBlendFile(Blender::FileDatabase& out, std::shared_ptr<IOStream> stream);
|
||||
void ExtractScene(Blender::Scene& out, const Blender::FileDatabase& file);
|
||||
void ConvertBlendFile(aiScene* out, const Blender::Scene& in, const Blender::FileDatabase& file);
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
void SetupProperties(const Importer *pImp) override;
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) override;
|
||||
void ParseBlendFile(Blender::FileDatabase &out, std::shared_ptr<IOStream> stream);
|
||||
void ExtractScene(Blender::Scene &out, const Blender::FileDatabase &file);
|
||||
void ConvertBlendFile(aiScene *out, const Blender::Scene &in, const Blender::FileDatabase &file);
|
||||
|
||||
private:
|
||||
aiNode* ConvertNode(const Blender::Scene& in,
|
||||
const Blender::Object* obj,
|
||||
Blender::ConversionData& conv_info,
|
||||
const aiMatrix4x4& parentTransform
|
||||
);
|
||||
aiNode *ConvertNode(const Blender::Scene &in,
|
||||
const Blender::Object *obj,
|
||||
Blender::ConversionData &conv_info,
|
||||
const aiMatrix4x4 &parentTransform);
|
||||
|
||||
// --------------------
|
||||
void ConvertMesh(const Blender::Scene& in,
|
||||
const Blender::Object* obj,
|
||||
const Blender::Mesh* mesh,
|
||||
Blender::ConversionData& conv_data,
|
||||
Blender::TempArray<std::vector,aiMesh>& temp
|
||||
);
|
||||
void ConvertMesh(const Blender::Scene &in,
|
||||
const Blender::Object *obj,
|
||||
const Blender::Mesh *mesh,
|
||||
Blender::ConversionData &conv_data,
|
||||
Blender::TempArray<std::vector, aiMesh> &temp);
|
||||
|
||||
// --------------------
|
||||
aiLight* ConvertLight(const Blender::Scene& in,
|
||||
const Blender::Object* obj,
|
||||
const Blender::Lamp* mesh,
|
||||
Blender::ConversionData& conv_data
|
||||
);
|
||||
aiLight *ConvertLight(const Blender::Scene &in,
|
||||
const Blender::Object *obj,
|
||||
const Blender::Lamp *mesh,
|
||||
Blender::ConversionData &conv_data);
|
||||
|
||||
// --------------------
|
||||
aiCamera* ConvertCamera(const Blender::Scene& in,
|
||||
const Blender::Object* obj,
|
||||
const Blender::Camera* mesh,
|
||||
Blender::ConversionData& conv_data
|
||||
);
|
||||
aiCamera *ConvertCamera(const Blender::Scene &in,
|
||||
const Blender::Object *obj,
|
||||
const Blender::Camera *mesh,
|
||||
Blender::ConversionData &conv_data);
|
||||
|
||||
// --------------------
|
||||
void BuildDefaultMaterial(
|
||||
Blender::ConversionData& conv_data
|
||||
);
|
||||
Blender::ConversionData &conv_data);
|
||||
|
||||
// --------------------
|
||||
void AddBlendParams(
|
||||
aiMaterial* result,
|
||||
const Blender::Material* source
|
||||
);
|
||||
aiMaterial *result,
|
||||
const Blender::Material *source);
|
||||
|
||||
// --------------------
|
||||
void BuildMaterials(
|
||||
Blender::ConversionData& conv_data
|
||||
);
|
||||
Blender::ConversionData &conv_data);
|
||||
|
||||
// --------------------
|
||||
void ResolveTexture(
|
||||
aiMaterial* out,
|
||||
const Blender::Material* mat,
|
||||
const Blender::MTex* tex,
|
||||
Blender::ConversionData& conv_data
|
||||
);
|
||||
aiMaterial *out,
|
||||
const Blender::Material *mat,
|
||||
const Blender::MTex *tex,
|
||||
Blender::ConversionData &conv_data);
|
||||
|
||||
// --------------------
|
||||
void ResolveImage(
|
||||
aiMaterial* out,
|
||||
const Blender::Material* mat,
|
||||
const Blender::MTex* tex,
|
||||
const Blender::Image* img,
|
||||
Blender::ConversionData& conv_data
|
||||
);
|
||||
aiMaterial *out,
|
||||
const Blender::Material *mat,
|
||||
const Blender::MTex *tex,
|
||||
const Blender::Image *img,
|
||||
Blender::ConversionData &conv_data);
|
||||
|
||||
// --------------------
|
||||
void AddSentinelTexture(
|
||||
aiMaterial* out,
|
||||
const Blender::Material* mat,
|
||||
const Blender::MTex* tex,
|
||||
Blender::ConversionData& conv_data
|
||||
);
|
||||
aiMaterial *out,
|
||||
const Blender::Material *mat,
|
||||
const Blender::MTex *tex,
|
||||
Blender::ConversionData &conv_data);
|
||||
|
||||
private: // static stuff, mostly logging and error reporting.
|
||||
// --------------------
|
||||
static void CheckActualType(const Blender::ElemBase *dt,
|
||||
const char *check);
|
||||
|
||||
// --------------------
|
||||
static void CheckActualType(const Blender::ElemBase* dt,
|
||||
const char* check
|
||||
);
|
||||
|
||||
// --------------------
|
||||
static void NotSupportedObjectType(const Blender::Object* obj,
|
||||
const char* type
|
||||
);
|
||||
|
||||
static void NotSupportedObjectType(const Blender::Object *obj,
|
||||
const char *type);
|
||||
|
||||
private:
|
||||
|
||||
Blender::BlenderModifierShowcase* modifier_cache;
|
||||
Blender::BlenderModifierShowcase *modifier_cache;
|
||||
|
||||
}; // !class BlenderImporter
|
||||
|
||||
|
|
|
@ -51,104 +51,100 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
struct aiNode;
|
||||
|
||||
namespace Assimp {
|
||||
class LineSplitter;
|
||||
namespace Assimp {
|
||||
class LineSplitter;
|
||||
|
||||
// TinyFormatter.h
|
||||
namespace Formatter {
|
||||
template <typename T,typename TR, typename A> class basic_formatter;
|
||||
typedef class basic_formatter< char, std::char_traits<char>, std::allocator<char> > format;
|
||||
}
|
||||
// TinyFormatter.h
|
||||
namespace Formatter {
|
||||
template <typename T, typename TR, typename A>
|
||||
class basic_formatter;
|
||||
typedef class basic_formatter<char, std::char_traits<char>, std::allocator<char>> format;
|
||||
} // namespace Formatter
|
||||
|
||||
// COBScene.h
|
||||
namespace COB {
|
||||
struct ChunkInfo;
|
||||
struct Node;
|
||||
struct Scene;
|
||||
}
|
||||
// COBScene.h
|
||||
namespace COB {
|
||||
struct ChunkInfo;
|
||||
struct Node;
|
||||
struct Scene;
|
||||
} // namespace COB
|
||||
|
||||
// -------------------------------------------------------------------------------------------
|
||||
/** Importer class to load TrueSpace files (cob,scn) up to v6.
|
||||
*
|
||||
* Currently relatively limited, loads only ASCII files and needs more test coverage. */
|
||||
// -------------------------------------------------------------------------------------------
|
||||
class COBImporter : public BaseImporter
|
||||
{
|
||||
class COBImporter : public BaseImporter {
|
||||
public:
|
||||
COBImporter();
|
||||
~COBImporter();
|
||||
~COBImporter() override;
|
||||
|
||||
// --------------------
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
|
||||
bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
// --------------------
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
|
||||
// --------------------
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
void SetupProperties(const Importer *pImp) override;
|
||||
|
||||
// --------------------
|
||||
void SetupProperties(const Importer* pImp);
|
||||
|
||||
// --------------------
|
||||
void InternReadFile( const std::string& pFile, aiScene* pScene,
|
||||
IOSystem* pIOHandler);
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene,
|
||||
IOSystem *pIOHandler) override;
|
||||
|
||||
private:
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Prepend 'COB: ' and throw msg.*/
|
||||
AI_WONT_RETURN static void ThrowException(const std::string& msg) AI_WONT_RETURN_SUFFIX;
|
||||
AI_WONT_RETURN static void ThrowException(const std::string &msg) AI_WONT_RETURN_SUFFIX;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** @brief Read from an ascii scene/object file
|
||||
* @param out Receives output data.
|
||||
* @param stream Stream to read from. */
|
||||
void ReadAsciiFile(COB::Scene& out, StreamReaderLE* stream);
|
||||
void ReadAsciiFile(COB::Scene &out, StreamReaderLE *stream);
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** @brief Read from a binary scene/object file
|
||||
* @param out Receives output data.
|
||||
* @param stream Stream to read from. */
|
||||
void ReadBinaryFile(COB::Scene& out, StreamReaderLE* stream);
|
||||
void ReadBinaryFile(COB::Scene &out, StreamReaderLE *stream);
|
||||
|
||||
// Conversion to Assimp output format
|
||||
|
||||
aiNode* BuildNodes(const COB::Node& root,const COB::Scene& scin,aiScene* fill);
|
||||
aiNode *BuildNodes(const COB::Node &root, const COB::Scene &scin, aiScene *fill);
|
||||
|
||||
private:
|
||||
// ASCII file support
|
||||
|
||||
void UnsupportedChunk_Ascii(LineSplitter& splitter, const COB::ChunkInfo& nfo, const char* name);
|
||||
void ReadChunkInfo_Ascii(COB::ChunkInfo& out, const LineSplitter& splitter);
|
||||
void ReadBasicNodeInfo_Ascii(COB::Node& msh, LineSplitter& splitter, const COB::ChunkInfo& nfo);
|
||||
template <typename T> void ReadFloat3Tuple_Ascii(T& fill, const char** in);
|
||||
|
||||
void ReadPolH_Ascii(COB::Scene& out, LineSplitter& splitter, const COB::ChunkInfo& nfo);
|
||||
void ReadBitM_Ascii(COB::Scene& out, LineSplitter& splitter, const COB::ChunkInfo& nfo);
|
||||
void ReadMat1_Ascii(COB::Scene& out, LineSplitter& splitter, const COB::ChunkInfo& nfo);
|
||||
void ReadGrou_Ascii(COB::Scene& out, LineSplitter& splitter, const COB::ChunkInfo& nfo);
|
||||
void ReadBone_Ascii(COB::Scene& out, LineSplitter& splitter, const COB::ChunkInfo& nfo);
|
||||
void ReadCame_Ascii(COB::Scene& out, LineSplitter& splitter, const COB::ChunkInfo& nfo);
|
||||
void ReadLght_Ascii(COB::Scene& out, LineSplitter& splitter, const COB::ChunkInfo& nfo);
|
||||
void ReadUnit_Ascii(COB::Scene& out, LineSplitter& splitter, const COB::ChunkInfo& nfo);
|
||||
void ReadChan_Ascii(COB::Scene& out, LineSplitter& splitter, const COB::ChunkInfo& nfo);
|
||||
void UnsupportedChunk_Ascii(LineSplitter &splitter, const COB::ChunkInfo &nfo, const char *name);
|
||||
void ReadChunkInfo_Ascii(COB::ChunkInfo &out, const LineSplitter &splitter);
|
||||
void ReadBasicNodeInfo_Ascii(COB::Node &msh, LineSplitter &splitter, const COB::ChunkInfo &nfo);
|
||||
template <typename T>
|
||||
void ReadFloat3Tuple_Ascii(T &fill, const char **in);
|
||||
|
||||
void ReadPolH_Ascii(COB::Scene &out, LineSplitter &splitter, const COB::ChunkInfo &nfo);
|
||||
void ReadBitM_Ascii(COB::Scene &out, LineSplitter &splitter, const COB::ChunkInfo &nfo);
|
||||
void ReadMat1_Ascii(COB::Scene &out, LineSplitter &splitter, const COB::ChunkInfo &nfo);
|
||||
void ReadGrou_Ascii(COB::Scene &out, LineSplitter &splitter, const COB::ChunkInfo &nfo);
|
||||
void ReadBone_Ascii(COB::Scene &out, LineSplitter &splitter, const COB::ChunkInfo &nfo);
|
||||
void ReadCame_Ascii(COB::Scene &out, LineSplitter &splitter, const COB::ChunkInfo &nfo);
|
||||
void ReadLght_Ascii(COB::Scene &out, LineSplitter &splitter, const COB::ChunkInfo &nfo);
|
||||
void ReadUnit_Ascii(COB::Scene &out, LineSplitter &splitter, const COB::ChunkInfo &nfo);
|
||||
void ReadChan_Ascii(COB::Scene &out, LineSplitter &splitter, const COB::ChunkInfo &nfo);
|
||||
|
||||
// Binary file support
|
||||
|
||||
void UnsupportedChunk_Binary(StreamReaderLE& reader, const COB::ChunkInfo& nfo, const char* name);
|
||||
void ReadString_Binary(std::string& out, StreamReaderLE& reader);
|
||||
void ReadBasicNodeInfo_Binary(COB::Node& msh, StreamReaderLE& reader, const COB::ChunkInfo& nfo);
|
||||
|
||||
void ReadPolH_Binary(COB::Scene& out, StreamReaderLE& reader, const COB::ChunkInfo& nfo);
|
||||
void ReadBitM_Binary(COB::Scene& out, StreamReaderLE& reader, const COB::ChunkInfo& nfo);
|
||||
void ReadMat1_Binary(COB::Scene& out, StreamReaderLE& reader, const COB::ChunkInfo& nfo);
|
||||
void ReadCame_Binary(COB::Scene& out, StreamReaderLE& reader, const COB::ChunkInfo& nfo);
|
||||
void ReadLght_Binary(COB::Scene& out, StreamReaderLE& reader, const COB::ChunkInfo& nfo);
|
||||
void ReadGrou_Binary(COB::Scene& out, StreamReaderLE& reader, const COB::ChunkInfo& nfo);
|
||||
void ReadUnit_Binary(COB::Scene& out, StreamReaderLE& reader, const COB::ChunkInfo& nfo);
|
||||
void UnsupportedChunk_Binary(StreamReaderLE &reader, const COB::ChunkInfo &nfo, const char *name);
|
||||
void ReadString_Binary(std::string &out, StreamReaderLE &reader);
|
||||
void ReadBasicNodeInfo_Binary(COB::Node &msh, StreamReaderLE &reader, const COB::ChunkInfo &nfo);
|
||||
|
||||
void ReadPolH_Binary(COB::Scene &out, StreamReaderLE &reader, const COB::ChunkInfo &nfo);
|
||||
void ReadBitM_Binary(COB::Scene &out, StreamReaderLE &reader, const COB::ChunkInfo &nfo);
|
||||
void ReadMat1_Binary(COB::Scene &out, StreamReaderLE &reader, const COB::ChunkInfo &nfo);
|
||||
void ReadCame_Binary(COB::Scene &out, StreamReaderLE &reader, const COB::ChunkInfo &nfo);
|
||||
void ReadLght_Binary(COB::Scene &out, StreamReaderLE &reader, const COB::ChunkInfo &nfo);
|
||||
void ReadGrou_Binary(COB::Scene &out, StreamReaderLE &reader, const COB::ChunkInfo &nfo);
|
||||
void ReadUnit_Binary(COB::Scene &out, StreamReaderLE &reader, const COB::ChunkInfo &nfo);
|
||||
|
||||
}; // !class COBImporter
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
@ -43,16 +42,16 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
/** @file COBScene.h
|
||||
* @brief Utilities for the COB importer.
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef INCLUDED_AI_COB_SCENE_H
|
||||
#define INCLUDED_AI_COB_SCENE_H
|
||||
|
||||
#include <memory>
|
||||
#include <deque>
|
||||
#include <map>
|
||||
|
||||
#include <assimp/BaseImporter.h>
|
||||
#include <assimp/material.h>
|
||||
|
||||
#include <deque>
|
||||
#include <map>
|
||||
|
||||
namespace Assimp {
|
||||
namespace COB {
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
@ -48,7 +47,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
#include <assimp/BaseImporter.h>
|
||||
|
||||
namespace Assimp {
|
||||
namespace Assimp {
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
/** Importer class to load MOCAPs in CharacterStudio Motion format.
|
||||
|
@ -59,35 +58,32 @@ namespace Assimp {
|
|||
* Link to file format specification:
|
||||
* <max_8_dvd>\samples\Motion\Docs\CSM.rtf
|
||||
*/
|
||||
class CSMImporter : public BaseImporter
|
||||
{
|
||||
class CSMImporter : public BaseImporter {
|
||||
public:
|
||||
CSMImporter();
|
||||
~CSMImporter();
|
||||
~CSMImporter() override;
|
||||
|
||||
|
||||
public:
|
||||
// -------------------------------------------------------------------
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
|
||||
bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
// -------------------------------------------------------------------
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
void SetupProperties(const Importer *pImp) override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
void SetupProperties(const Importer* pImp);
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
void InternReadFile( const std::string& pFile, aiScene* pScene,
|
||||
IOSystem* pIOHandler);
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene,
|
||||
IOSystem *pIOHandler) override;
|
||||
|
||||
private:
|
||||
|
||||
bool noSkeletonMesh;
|
||||
|
||||
}; // end of class CSMImporter
|
||||
|
||||
} // end of namespace Assimp
|
||||
|
||||
#endif // AI_AC3DIMPORTER_H_INC
|
||||
|
||||
|
|
|
@ -47,7 +47,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#include "ColladaParser.h"
|
||||
#include <assimp/ColladaMetaData.h>
|
||||
#include <assimp/CreateAnimMesh.h>
|
||||
#include <assimp/Defines.h>
|
||||
#include <assimp/ParsingUtils.h>
|
||||
#include <assimp/SkeletonMeshBuilder.h>
|
||||
#include <assimp/ZipArchiveIOSystem.h>
|
||||
|
|
|
@ -43,6 +43,7 @@
|
|||
* @brief Defines the parser helper class for the collada loader
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#ifndef AI_COLLADAPARSER_H_INC
|
||||
#define AI_COLLADAPARSER_H_INC
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
@ -43,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
/** @file DXFLoader.h
|
||||
* @brief Declaration of the .dxf importer class.
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef AI_DXFLOADER_H_INCLUDED
|
||||
#define AI_DXFLOADER_H_INCLUDED
|
||||
|
||||
|
@ -59,7 +59,7 @@ namespace DXF {
|
|||
struct Block;
|
||||
struct InsertBlock;
|
||||
|
||||
typedef std::map<std::string, const DXF::Block*> BlockMap;
|
||||
using BlockMap = std::map<std::string, const DXF::Block*>;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
@ -69,29 +69,26 @@ namespace DXF {
|
|||
class DXFImporter : public BaseImporter {
|
||||
public:
|
||||
DXFImporter();
|
||||
~DXFImporter();
|
||||
~DXFImporter() override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Returns whether the class can handle the format of the given file.
|
||||
* See BaseImporter::CanRead() for details. */
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
// -------------------------------------------------------------------
|
||||
/** Return importer meta information.
|
||||
* See #BaseImporter::GetInfo for the details*/
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
const aiImporterDesc* GetInfo () const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Imports the given file into the given scene structure.
|
||||
* See BaseImporter::InternReadFile() for details */
|
||||
void InternReadFile( const std::string& pFile,
|
||||
aiScene* pScene,
|
||||
IOSystem* pIOHandler);
|
||||
void InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler) override;
|
||||
|
||||
private:
|
||||
|
||||
// -----------------------------------------------------
|
||||
void SkipSection(DXF::LineReader& reader);
|
||||
|
||||
|
|
|
@ -70,28 +70,29 @@ typedef class basic_formatter<char, std::char_traits<char>, std::allocator<char>
|
|||
class FBXImporter : public BaseImporter, public LogFunctions<FBXImporter> {
|
||||
public:
|
||||
FBXImporter();
|
||||
virtual ~FBXImporter();
|
||||
~FBXImporter() override;
|
||||
|
||||
// --------------------
|
||||
bool CanRead(const std::string &pFile,
|
||||
IOSystem *pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
// --------------------
|
||||
const aiImporterDesc *GetInfo() const;
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
|
||||
// --------------------
|
||||
void SetupProperties(const Importer *pImp);
|
||||
void SetupProperties(const Importer *pImp) override;
|
||||
|
||||
// --------------------
|
||||
void InternReadFile(const std::string &pFile,
|
||||
aiScene *pScene,
|
||||
IOSystem *pIOHandler);
|
||||
IOSystem *pIOHandler) override;
|
||||
|
||||
private:
|
||||
FBX::ImportSettings settings;
|
||||
}; // !class FBXImporter
|
||||
|
||||
} // end of namespace Assimp
|
||||
|
||||
#endif // !INCLUDED_AI_FBX_IMPORTER_H
|
||||
|
|
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
@ -42,15 +41,15 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
/** @file HMPLoader.h
|
||||
* @brief Declaration of the HMP importer class
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#ifndef AI_HMPLOADER_H_INCLUDED
|
||||
#define AI_HMPLOADER_H_INCLUDED
|
||||
|
||||
// internal headers
|
||||
#include <assimp/BaseImporter.h>
|
||||
|
||||
#include "AssetLib/MDL/MDLLoader.h"
|
||||
// internal headers
|
||||
#include "AssetLib/HMP/HMPFileData.h"
|
||||
#include "AssetLib/MDL/MDLLoader.h"
|
||||
|
||||
namespace Assimp {
|
||||
using namespace HMP;
|
||||
|
@ -58,66 +57,58 @@ using namespace HMP;
|
|||
// ---------------------------------------------------------------------------
|
||||
/** Used to load 3D GameStudio HMP files (terrains)
|
||||
*/
|
||||
class HMPImporter : public MDLImporter
|
||||
{
|
||||
class HMPImporter : public MDLImporter {
|
||||
public:
|
||||
HMPImporter();
|
||||
~HMPImporter();
|
||||
|
||||
|
||||
public:
|
||||
~HMPImporter() override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Returns whether the class can handle the format of the given file.
|
||||
* See BaseImporter::CanRead() for details.
|
||||
*/
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
|
||||
bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Return importer meta information.
|
||||
* See #BaseImporter::GetInfo for the details
|
||||
*/
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Imports the given file into the given scene structure.
|
||||
* See BaseImporter::InternReadFile() for details
|
||||
*/
|
||||
void InternReadFile( const std::string& pFile, aiScene* pScene,
|
||||
IOSystem* pIOHandler);
|
||||
|
||||
protected:
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene,
|
||||
IOSystem *pIOHandler) override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Import a HMP4 file
|
||||
*/
|
||||
void InternReadFile_HMP4( );
|
||||
void InternReadFile_HMP4();
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Import a HMP5 file
|
||||
*/
|
||||
void InternReadFile_HMP5( );
|
||||
void InternReadFile_HMP5();
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Import a HMP7 file
|
||||
*/
|
||||
void InternReadFile_HMP7( );
|
||||
void InternReadFile_HMP7();
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Validate a HMP 5,4,7 file header
|
||||
*/
|
||||
void ValidateHeader_HMP457( );
|
||||
void ValidateHeader_HMP457();
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Try to load one material from the file, if this fails create
|
||||
* a default material
|
||||
*/
|
||||
void CreateMaterial(const unsigned char* szCurrent,
|
||||
const unsigned char** szCurrentOut);
|
||||
void CreateMaterial(const unsigned char *szCurrent,
|
||||
const unsigned char **szCurrentOut);
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Build a list of output faces and vertices. The function
|
||||
|
@ -125,7 +116,7 @@ protected:
|
|||
* \param width Width of the height field
|
||||
* \param width Height of the height field
|
||||
*/
|
||||
void CreateOutputFaceList(unsigned int width,unsigned int height);
|
||||
void CreateOutputFaceList(unsigned int width, unsigned int height);
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Generate planar texture coordinates for a terrain
|
||||
|
@ -133,21 +124,17 @@ protected:
|
|||
* \param height Height of the terrain, in vertices
|
||||
*/
|
||||
void GenerateTextureCoords(const unsigned int width,
|
||||
const unsigned int height);
|
||||
const unsigned int height);
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Read the first skin from the file and skip all others ...
|
||||
* \param iNumSkins Number of skins in the file
|
||||
* \param szCursor Position of the first skin (offset 84)
|
||||
*/
|
||||
void ReadFirstSkin(unsigned int iNumSkins, const unsigned char* szCursor,
|
||||
const unsigned char** szCursorOut);
|
||||
|
||||
private:
|
||||
|
||||
void ReadFirstSkin(unsigned int iNumSkins, const unsigned char *szCursor,
|
||||
const unsigned char **szCursorOut);
|
||||
};
|
||||
|
||||
} // end of namespace Assimp
|
||||
|
||||
#endif // AI_HMPIMPORTER_H_INC
|
||||
|
||||
|
|
|
@ -48,7 +48,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#include "Common/PolyTools.h"
|
||||
#include "PostProcessing/ProcessHelper.h"
|
||||
|
||||
#include <assimp/Defines.h>
|
||||
|
||||
#include <iterator>
|
||||
#include <tuple>
|
||||
|
|
|
@ -49,18 +49,22 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#include <assimp/BaseImporter.h>
|
||||
#include <assimp/LogAux.h>
|
||||
|
||||
namespace Assimp {
|
||||
namespace Assimp {
|
||||
|
||||
// TinyFormatter.h
|
||||
namespace Formatter {
|
||||
template <typename T,typename TR, typename A> class basic_formatter;
|
||||
typedef class basic_formatter< char, std::char_traits<char>, std::allocator<char> > format;
|
||||
}
|
||||
// TinyFormatter.h
|
||||
namespace Formatter {
|
||||
|
||||
namespace STEP {
|
||||
class DB;
|
||||
}
|
||||
template <typename T, typename TR, typename A>
|
||||
class basic_formatter;
|
||||
typedef class basic_formatter<char, std::char_traits<char>, std::allocator<char>> format;
|
||||
|
||||
} // namespace Formatter
|
||||
|
||||
namespace STEP {
|
||||
|
||||
class DB;
|
||||
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------------------------
|
||||
/** Load the IFC format, which is an open specification to describe building and construction
|
||||
|
@ -69,63 +73,41 @@ namespace Assimp {
|
|||
See http://en.wikipedia.org/wiki/Industry_Foundation_Classes
|
||||
*/
|
||||
// -------------------------------------------------------------------------------------------
|
||||
class IFCImporter : public BaseImporter, public LogFunctions<IFCImporter>
|
||||
{
|
||||
class IFCImporter : public BaseImporter, public LogFunctions<IFCImporter> {
|
||||
public:
|
||||
IFCImporter();
|
||||
~IFCImporter();
|
||||
|
||||
|
||||
public:
|
||||
|
||||
// --------------------
|
||||
bool CanRead( const std::string& pFile,
|
||||
IOSystem* pIOHandler,
|
||||
bool checkSig
|
||||
) const;
|
||||
|
||||
protected:
|
||||
|
||||
// --------------------
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
|
||||
// --------------------
|
||||
void SetupProperties(const Importer* pImp);
|
||||
|
||||
// --------------------
|
||||
void InternReadFile( const std::string& pFile,
|
||||
aiScene* pScene,
|
||||
IOSystem* pIOHandler
|
||||
);
|
||||
|
||||
private:
|
||||
|
||||
|
||||
public:
|
||||
|
||||
|
||||
// loader settings, publicly accessible via their corresponding AI_CONFIG constants
|
||||
struct Settings
|
||||
{
|
||||
Settings()
|
||||
: skipSpaceRepresentations()
|
||||
, useCustomTriangulation()
|
||||
, skipAnnotations()
|
||||
, conicSamplingAngle(10.f)
|
||||
, cylindricalTessellation(32)
|
||||
{}
|
||||
|
||||
struct Settings {
|
||||
Settings() :
|
||||
skipSpaceRepresentations(), useCustomTriangulation(), skipAnnotations(), conicSamplingAngle(10.f), cylindricalTessellation(32) {}
|
||||
|
||||
bool skipSpaceRepresentations;
|
||||
bool useCustomTriangulation;
|
||||
bool skipAnnotations;
|
||||
float conicSamplingAngle;
|
||||
int cylindricalTessellation;
|
||||
int cylindricalTessellation;
|
||||
};
|
||||
|
||||
IFCImporter();
|
||||
~IFCImporter() override;
|
||||
|
||||
// --------------------
|
||||
bool CanRead(const std::string &pFile,
|
||||
IOSystem *pIOHandler,
|
||||
bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
// --------------------
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
|
||||
// --------------------
|
||||
void SetupProperties(const Importer *pImp) override;
|
||||
|
||||
// --------------------
|
||||
void InternReadFile(const std::string &pFile,
|
||||
aiScene *pScene,
|
||||
IOSystem *pIOHandler) override;
|
||||
|
||||
private:
|
||||
|
||||
Settings settings;
|
||||
|
||||
}; // !class IFCImporter
|
||||
|
|
|
@ -49,7 +49,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#include "AssetLib/IFC/IFCUtil.h"
|
||||
#include "Common/PolyTools.h"
|
||||
#include "PostProcessing/ProcessHelper.h"
|
||||
#include <assimp/Defines.h>
|
||||
|
||||
namespace Assimp {
|
||||
namespace IFC {
|
||||
|
|
|
@ -65,22 +65,21 @@ namespace Assimp {
|
|||
class IRRImporter : public BaseImporter, public IrrlichtBase {
|
||||
public:
|
||||
IRRImporter();
|
||||
~IRRImporter();
|
||||
~IRRImporter() override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Returns whether the class can handle the format of the given file.
|
||||
* See BaseImporter::CanRead() for details.
|
||||
*/
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
void InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler);
|
||||
void SetupProperties(const Importer* pImp);
|
||||
const aiImporterDesc* GetInfo () const override;
|
||||
void InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler) override;
|
||||
void SetupProperties(const Importer* pImp) override;
|
||||
|
||||
private:
|
||||
|
||||
/** Data structure for a scene-graph node animator
|
||||
*/
|
||||
struct Animator {
|
||||
|
|
|
@ -63,28 +63,28 @@ namespace Assimp {
|
|||
class IRRMeshImporter : public BaseImporter, public IrrlichtBase {
|
||||
public:
|
||||
IRRMeshImporter();
|
||||
~IRRMeshImporter();
|
||||
~IRRMeshImporter() override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Returns whether the class can handle the format of the given file.
|
||||
* See BaseImporter::CanRead() for details.
|
||||
*/
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
// -------------------------------------------------------------------
|
||||
/** Return importer meta information.
|
||||
* See #BaseImporter::GetInfo for the details
|
||||
*/
|
||||
const aiImporterDesc *GetInfo() const;
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Imports the given file into the given scene structure.
|
||||
* See BaseImporter::InternReadFile() for details
|
||||
*/
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene,
|
||||
IOSystem *pIOHandler);
|
||||
IOSystem *pIOHandler) override;
|
||||
};
|
||||
|
||||
} // end of namespace Assimp
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
#include <assimp/BaseImporter.h>
|
||||
#include <assimp/XmlParser.h>
|
||||
#include <stdint.h>
|
||||
#include <cstdint>
|
||||
|
||||
struct aiMaterial;
|
||||
|
||||
|
|
|
@ -41,15 +41,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
*/
|
||||
|
||||
/** @file Declaration of the LWO importer class. */
|
||||
#pragma once
|
||||
#ifndef AI_LWOLOADER_H_INCLUDED
|
||||
#define AI_LWOLOADER_H_INCLUDED
|
||||
|
||||
#include <assimp/types.h>
|
||||
#include <assimp/material.h>
|
||||
#include <assimp/DefaultLogger.hpp>
|
||||
|
||||
#include "LWOFileData.h"
|
||||
#include <assimp/BaseImporter.h>
|
||||
#include <assimp/material.h>
|
||||
#include <assimp/DefaultLogger.hpp>
|
||||
|
||||
#include <map>
|
||||
|
||||
|
@ -57,7 +56,7 @@ struct aiTexture;
|
|||
struct aiNode;
|
||||
struct aiMaterial;
|
||||
|
||||
namespace Assimp {
|
||||
namespace Assimp {
|
||||
using namespace LWO;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
@ -70,41 +69,38 @@ using namespace LWO;
|
|||
* they aren't specific to one format version
|
||||
*/
|
||||
// ---------------------------------------------------------------------------
|
||||
class LWOImporter : public BaseImporter
|
||||
{
|
||||
class LWOImporter : public BaseImporter {
|
||||
public:
|
||||
LWOImporter();
|
||||
~LWOImporter();
|
||||
~LWOImporter() override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Returns whether the class can handle the format of the given file.
|
||||
* See BaseImporter::CanRead() for details.
|
||||
*/
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
|
||||
bool checkSig) const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Called prior to ReadFile().
|
||||
* The function is a request to the importer to update its configuration
|
||||
* basing on the Importer's configuration property list.
|
||||
*/
|
||||
void SetupProperties(const Importer* pImp);
|
||||
void SetupProperties(const Importer *pImp) override;
|
||||
|
||||
protected:
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Get list of supported extensions
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Imports the given file into the given scene structure.
|
||||
* See BaseImporter::InternReadFile() for details
|
||||
*/
|
||||
void InternReadFile( const std::string& pFile, aiScene* pScene,
|
||||
IOSystem* pIOHandler);
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene,
|
||||
IOSystem *pIOHandler) override;
|
||||
|
||||
private:
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Loads a LWO file in the older LWOB format (LW < 6)
|
||||
*/
|
||||
|
@ -115,16 +111,14 @@ private:
|
|||
*/
|
||||
void LoadLWO2File();
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Parsing functions used for all file format versions
|
||||
*/
|
||||
inline void GetS0(std::string& out,unsigned int max);
|
||||
inline void GetS0(std::string &out, unsigned int max);
|
||||
inline float GetF4();
|
||||
inline uint32_t GetU4();
|
||||
inline uint16_t GetU2();
|
||||
inline uint8_t GetU1();
|
||||
|
||||
inline uint8_t GetU1();
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Loads a surface chunk from an LWOB file
|
||||
|
@ -143,28 +137,28 @@ private:
|
|||
* @param size Maximum size to be read, in bytes.
|
||||
* @param head Header of the SUF.BLOK header
|
||||
*/
|
||||
void LoadLWO2TextureBlock(LE_NCONST IFF::SubChunkHeader* head,
|
||||
unsigned int size );
|
||||
void LoadLWO2TextureBlock(LE_NCONST IFF::SubChunkHeader *head,
|
||||
unsigned int size);
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Loads a shader block from a LWO2 file.
|
||||
* @param size Maximum size to be read, in bytes.
|
||||
* @param head Header of the SUF.BLOK header
|
||||
*/
|
||||
void LoadLWO2ShaderBlock(LE_NCONST IFF::SubChunkHeader* head,
|
||||
unsigned int size );
|
||||
void LoadLWO2ShaderBlock(LE_NCONST IFF::SubChunkHeader *head,
|
||||
unsigned int size);
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Loads an image map from a LWO2 file
|
||||
* @param size Maximum size to be read, in bytes.
|
||||
* @param tex Texture object to be filled
|
||||
*/
|
||||
void LoadLWO2ImageMap(unsigned int size, LWO::Texture& tex );
|
||||
void LoadLWO2Gradient(unsigned int size, LWO::Texture& tex );
|
||||
void LoadLWO2Procedural(unsigned int size, LWO::Texture& tex );
|
||||
void LoadLWO2ImageMap(unsigned int size, LWO::Texture &tex);
|
||||
void LoadLWO2Gradient(unsigned int size, LWO::Texture &tex);
|
||||
void LoadLWO2Procedural(unsigned int size, LWO::Texture &tex);
|
||||
|
||||
// loads the header - used by thethree functions above
|
||||
void LoadLWO2TextureHeader(unsigned int size, LWO::Texture& tex );
|
||||
void LoadLWO2TextureHeader(unsigned int size, LWO::Texture &tex);
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Loads the LWO tag list from the file
|
||||
|
@ -213,30 +207,30 @@ private:
|
|||
// -------------------------------------------------------------------
|
||||
/** Count vertices and faces in a LWOB/LWO2 file
|
||||
*/
|
||||
void CountVertsAndFacesLWO2(unsigned int& verts,
|
||||
unsigned int& faces,
|
||||
uint16_t*& cursor,
|
||||
const uint16_t* const end,
|
||||
unsigned int max = UINT_MAX);
|
||||
void CountVertsAndFacesLWO2(unsigned int &verts,
|
||||
unsigned int &faces,
|
||||
uint16_t *&cursor,
|
||||
const uint16_t *const end,
|
||||
unsigned int max = UINT_MAX);
|
||||
|
||||
void CountVertsAndFacesLWOB(unsigned int& verts,
|
||||
unsigned int& faces,
|
||||
LE_NCONST uint16_t*& cursor,
|
||||
const uint16_t* const end,
|
||||
unsigned int max = UINT_MAX);
|
||||
void CountVertsAndFacesLWOB(unsigned int &verts,
|
||||
unsigned int &faces,
|
||||
LE_NCONST uint16_t *&cursor,
|
||||
const uint16_t *const end,
|
||||
unsigned int max = UINT_MAX);
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Read vertices and faces in a LWOB/LWO2 file
|
||||
*/
|
||||
void CopyFaceIndicesLWO2(LWO::FaceList::iterator& it,
|
||||
uint16_t*& cursor,
|
||||
const uint16_t* const end);
|
||||
void CopyFaceIndicesLWO2(LWO::FaceList::iterator &it,
|
||||
uint16_t *&cursor,
|
||||
const uint16_t *const end);
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
void CopyFaceIndicesLWOB(LWO::FaceList::iterator& it,
|
||||
LE_NCONST uint16_t*& cursor,
|
||||
const uint16_t* const end,
|
||||
unsigned int max = UINT_MAX);
|
||||
void CopyFaceIndicesLWOB(LWO::FaceList::iterator &it,
|
||||
LE_NCONST uint16_t *&cursor,
|
||||
const uint16_t *const end,
|
||||
unsigned int max = UINT_MAX);
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Resolve the tag and surface lists that have been loaded.
|
||||
|
@ -257,19 +251,18 @@ private:
|
|||
* @param in Input texture list
|
||||
* @param type Type identifier of the texture list
|
||||
*/
|
||||
bool HandleTextures(aiMaterial* pcMat, const TextureList& in,
|
||||
aiTextureType type);
|
||||
bool HandleTextures(aiMaterial *pcMat, const TextureList &in,
|
||||
aiTextureType type);
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Adjust a texture path
|
||||
*/
|
||||
void AdjustTexturePath(std::string& out);
|
||||
void AdjustTexturePath(std::string &out);
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Convert a LWO surface description to an ASSIMP material
|
||||
*/
|
||||
void ConvertMaterial(const LWO::Surface& surf,aiMaterial* pcMat);
|
||||
|
||||
void ConvertMaterial(const LWO::Surface &surf, aiMaterial *pcMat);
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Get a list of all UV/VC channels required by a specific surface.
|
||||
|
@ -279,27 +272,27 @@ private:
|
|||
* @param out Output list. The members are indices into the
|
||||
* UV/VC channel lists of the layer
|
||||
*/
|
||||
void FindUVChannels(/*const*/ LWO::Surface& surf,
|
||||
LWO::SortedRep& sorted,
|
||||
/*const*/ LWO::Layer& layer,
|
||||
unsigned int out[AI_MAX_NUMBER_OF_TEXTURECOORDS]);
|
||||
void FindUVChannels(/*const*/ LWO::Surface &surf,
|
||||
LWO::SortedRep &sorted,
|
||||
/*const*/ LWO::Layer &layer,
|
||||
unsigned int out[AI_MAX_NUMBER_OF_TEXTURECOORDS]);
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
char FindUVChannels(LWO::TextureList& list,
|
||||
LWO::Layer& layer,LWO::UVChannel& uv, unsigned int next);
|
||||
char FindUVChannels(LWO::TextureList &list,
|
||||
LWO::Layer &layer, LWO::UVChannel &uv, unsigned int next);
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
void FindVCChannels(const LWO::Surface& surf,
|
||||
LWO::SortedRep& sorted,
|
||||
const LWO::Layer& layer,
|
||||
unsigned int out[AI_MAX_NUMBER_OF_COLOR_SETS]);
|
||||
void FindVCChannels(const LWO::Surface &surf,
|
||||
LWO::SortedRep &sorted,
|
||||
const LWO::Layer &layer,
|
||||
unsigned int out[AI_MAX_NUMBER_OF_COLOR_SETS]);
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Generate the final node graph
|
||||
* Unused nodes are deleted.
|
||||
* @param apcNodes Flat list of nodes
|
||||
*/
|
||||
void GenerateNodeGraph(std::map<uint16_t,aiNode*>& apcNodes);
|
||||
void GenerateNodeGraph(std::map<uint16_t, aiNode *> &apcNodes);
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Add children to a node
|
||||
|
@ -307,14 +300,14 @@ private:
|
|||
* @param parent Index of the node
|
||||
* @param apcNodes Flat list of nodes - used nodes are set to nullptr.
|
||||
*/
|
||||
void AddChildren(aiNode* node, uint16_t parent,
|
||||
std::vector<aiNode*>& apcNodes);
|
||||
void AddChildren(aiNode *node, uint16_t parent,
|
||||
std::vector<aiNode *> &apcNodes);
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Read a variable sized integer
|
||||
* @param inout Input and output buffer
|
||||
*/
|
||||
int ReadVSizedIntLWO2(uint8_t*& inout);
|
||||
int ReadVSizedIntLWO2(uint8_t *&inout);
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Assign a value from a VMAP to a vertex and all vertices
|
||||
|
@ -325,8 +318,8 @@ private:
|
|||
* @param data Value of the VMAP to be assigned - read numRead
|
||||
* floats from this array.
|
||||
*/
|
||||
void DoRecursiveVMAPAssignment(VMapEntry* base, unsigned int numRead,
|
||||
unsigned int idx, float* data);
|
||||
void DoRecursiveVMAPAssignment(VMapEntry *base, unsigned int numRead,
|
||||
unsigned int idx, float *data);
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Compute normal vectors for a mesh
|
||||
|
@ -334,9 +327,8 @@ private:
|
|||
* @param smoothingGroups Smoothing-groups-per-face array
|
||||
* @param surface Surface for the mesh
|
||||
*/
|
||||
void ComputeNormals(aiMesh* mesh, const std::vector<unsigned int>& smoothingGroups,
|
||||
const LWO::Surface& surface);
|
||||
|
||||
void ComputeNormals(aiMesh *mesh, const std::vector<unsigned int> &smoothingGroups,
|
||||
const LWO::Surface &surface);
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Setup a new texture after the corresponding chunk was
|
||||
|
@ -345,11 +337,10 @@ private:
|
|||
* @param size Maximum number of bytes to be read
|
||||
* @return Pointer to new texture
|
||||
*/
|
||||
LWO::Texture* SetupNewTextureLWOB(LWO::TextureList& list,
|
||||
unsigned int size);
|
||||
LWO::Texture *SetupNewTextureLWOB(LWO::TextureList &list,
|
||||
unsigned int size);
|
||||
|
||||
protected:
|
||||
|
||||
/** true if the file is a LWO2 file*/
|
||||
bool mIsLWO2;
|
||||
|
||||
|
@ -357,20 +348,20 @@ protected:
|
|||
bool mIsLXOB;
|
||||
|
||||
/** Temporary list of layers from the file */
|
||||
LayerList* mLayers;
|
||||
LayerList *mLayers;
|
||||
|
||||
/** Pointer to the current layer */
|
||||
LWO::Layer* mCurLayer;
|
||||
LWO::Layer *mCurLayer;
|
||||
|
||||
/** Temporary tag list from the file */
|
||||
TagList* mTags;
|
||||
TagList *mTags;
|
||||
|
||||
/** Mapping table to convert from tag to surface indices.
|
||||
UINT_MAX indicates that a no corresponding surface is available */
|
||||
TagMappingTable* mMapping;
|
||||
TagMappingTable *mMapping;
|
||||
|
||||
/** Temporary surface list from the file */
|
||||
SurfaceList* mSurfaces;
|
||||
SurfaceList *mSurfaces;
|
||||
|
||||
/** Temporary clip list from the file */
|
||||
ClipList mClips;
|
||||
|
@ -379,13 +370,13 @@ protected:
|
|||
EnvelopeList mEnvelopes;
|
||||
|
||||
/** file buffer */
|
||||
uint8_t* mFileBuffer;
|
||||
uint8_t *mFileBuffer;
|
||||
|
||||
/** Size of the file, in bytes */
|
||||
unsigned int fileSize;
|
||||
|
||||
/** Output scene */
|
||||
aiScene* mScene;
|
||||
aiScene *mScene;
|
||||
|
||||
/** Configuration option: speed flag set? */
|
||||
bool configSpeedFlag;
|
||||
|
@ -394,16 +385,14 @@ protected:
|
|||
unsigned int configLayerIndex;
|
||||
|
||||
/** Configuration option: name of layer to be loaded */
|
||||
std::string configLayerName;
|
||||
std::string configLayerName;
|
||||
|
||||
/** True if we have a named layer */
|
||||
bool hasNamedLayer;
|
||||
};
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
inline
|
||||
float LWOImporter::GetF4() {
|
||||
inline float LWOImporter::GetF4() {
|
||||
float f;
|
||||
::memcpy(&f, mFileBuffer, 4);
|
||||
mFileBuffer += 4;
|
||||
|
@ -412,8 +401,7 @@ float LWOImporter::GetF4() {
|
|||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
inline uint32_t LWOImporter::GetU4()
|
||||
{
|
||||
inline uint32_t LWOImporter::GetU4() {
|
||||
uint32_t f;
|
||||
::memcpy(&f, mFileBuffer, 4);
|
||||
mFileBuffer += 4;
|
||||
|
@ -422,8 +410,7 @@ inline uint32_t LWOImporter::GetU4()
|
|||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
inline uint16_t LWOImporter::GetU2()
|
||||
{
|
||||
inline uint16_t LWOImporter::GetU2() {
|
||||
uint16_t f;
|
||||
::memcpy(&f, mFileBuffer, 2);
|
||||
mFileBuffer += 2;
|
||||
|
@ -432,55 +419,50 @@ inline uint16_t LWOImporter::GetU2()
|
|||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
inline uint8_t LWOImporter::GetU1()
|
||||
{
|
||||
inline uint8_t LWOImporter::GetU1() {
|
||||
return *mFileBuffer++;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
inline int LWOImporter::ReadVSizedIntLWO2(uint8_t*& inout)
|
||||
{
|
||||
inline int LWOImporter::ReadVSizedIntLWO2(uint8_t *&inout) {
|
||||
int i;
|
||||
int c = *inout;inout++;
|
||||
if(c != 0xFF)
|
||||
{
|
||||
int c = *inout;
|
||||
inout++;
|
||||
if (c != 0xFF) {
|
||||
i = c << 8;
|
||||
c = *inout;inout++;
|
||||
c = *inout;
|
||||
inout++;
|
||||
i |= c;
|
||||
}
|
||||
else
|
||||
{
|
||||
c = *inout;inout++;
|
||||
} else {
|
||||
c = *inout;
|
||||
inout++;
|
||||
i = c << 16;
|
||||
c = *inout;inout++;
|
||||
c = *inout;
|
||||
inout++;
|
||||
i |= c << 8;
|
||||
c = *inout;inout++;
|
||||
c = *inout;
|
||||
inout++;
|
||||
i |= c;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
inline void LWOImporter::GetS0(std::string& out,unsigned int max)
|
||||
{
|
||||
inline void LWOImporter::GetS0(std::string &out, unsigned int max) {
|
||||
unsigned int iCursor = 0;
|
||||
const char*sz = (const char*)mFileBuffer;
|
||||
while (*mFileBuffer)
|
||||
{
|
||||
if (++iCursor > max)
|
||||
{
|
||||
const char *sz = (const char *)mFileBuffer;
|
||||
while (*mFileBuffer) {
|
||||
if (++iCursor > max) {
|
||||
ASSIMP_LOG_WARN("LWO: Invalid file, string is is too long");
|
||||
break;
|
||||
}
|
||||
++mFileBuffer;
|
||||
}
|
||||
size_t len = (size_t) ((const char*)mFileBuffer-sz);
|
||||
out = std::string(sz,len);
|
||||
mFileBuffer += (len&0x1 ? 1 : 2);
|
||||
size_t len = (size_t)((const char *)mFileBuffer - sz);
|
||||
out = std::string(sz, len);
|
||||
mFileBuffer += (len & 0x1 ? 1 : 2);
|
||||
}
|
||||
|
||||
|
||||
|
||||
} // end of namespace Assimp
|
||||
|
||||
#endif // AI_LWOIMPORTER_H_INCLUDED
|
||||
|
|
|
@ -42,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
/** @file LWSLoader.h
|
||||
* @brief Declaration of the LightWave scene importer class.
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef AI_LWSLOADER_H_INCLUDED
|
||||
#define AI_LWSLOADER_H_INCLUDED
|
||||
|
||||
|
@ -53,6 +54,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
struct aiImporterDesc;
|
||||
|
||||
namespace Assimp {
|
||||
|
||||
class BatchLoader;
|
||||
class Importer;
|
||||
class IOSystem;
|
||||
|
@ -172,26 +174,26 @@ struct NodeDesc {
|
|||
class LWSImporter : public BaseImporter {
|
||||
public:
|
||||
LWSImporter();
|
||||
~LWSImporter();
|
||||
~LWSImporter() override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Check whether we can read a specific file
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
// -------------------------------------------------------------------
|
||||
// Get list of supported extensions
|
||||
const aiImporterDesc *GetInfo() const;
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Import file into given scene data structure
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene,
|
||||
IOSystem *pIOHandler);
|
||||
IOSystem *pIOHandler) override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Setup import properties
|
||||
void SetupProperties(const Importer *pImp);
|
||||
void SetupProperties(const Importer *pImp) override;
|
||||
|
||||
private:
|
||||
// -------------------------------------------------------------------
|
||||
|
@ -226,9 +228,7 @@ private:
|
|||
private:
|
||||
bool configSpeedFlag;
|
||||
IOSystem *io;
|
||||
|
||||
double first, last, fps;
|
||||
|
||||
bool noSkeletonMesh;
|
||||
};
|
||||
|
||||
|
|
|
@ -65,21 +65,20 @@ class M3DImporter : public BaseImporter {
|
|||
public:
|
||||
/// \brief Default constructor
|
||||
M3DImporter();
|
||||
~M3DImporter() override {}
|
||||
|
||||
public:
|
||||
/// \brief Returns whether the class can handle the format of the given file.
|
||||
/// \remark See BaseImporter::CanRead() for details.
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const;
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
//! \brief Appends the supported extension.
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
|
||||
//! \brief File import implementation.
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) override;
|
||||
|
||||
private:
|
||||
aiScene *mScene = nullptr; // the scene to import to
|
||||
|
||||
//! \brief Appends the supported extension.
|
||||
const aiImporterDesc *GetInfo() const;
|
||||
|
||||
//! \brief File import implementation.
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler);
|
||||
|
||||
void importMaterials(const M3DWrapper &m3d);
|
||||
void importTextures(const M3DWrapper &m3d);
|
||||
void importMeshes(const M3DWrapper &m3d);
|
||||
|
@ -94,6 +93,9 @@ private:
|
|||
void populateMesh(const M3DWrapper &m3d, aiMesh *pMesh, std::vector<aiFace> *faces, std::vector<aiVector3D> *verteces,
|
||||
std::vector<aiVector3D> *normals, std::vector<aiVector3D> *texcoords, std::vector<aiColor4D> *colors,
|
||||
std::vector<unsigned int> *vertexids);
|
||||
|
||||
private:
|
||||
aiScene *mScene = nullptr; // the scene to import to
|
||||
};
|
||||
|
||||
} // Namespace Assimp
|
||||
|
|
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
@ -43,61 +42,55 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
/** @file MD2Loader.h
|
||||
* @brief Declaration of the .MD2 importer class.
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef AI_MD2LOADER_H_INCLUDED
|
||||
#define AI_MD2LOADER_H_INCLUDED
|
||||
|
||||
#include <assimp/BaseImporter.h>
|
||||
#include <assimp/types.h>
|
||||
#include <assimp/ByteSwapper.h>
|
||||
#include "MD2FileData.h"
|
||||
#include <assimp/BaseImporter.h>
|
||||
#include <assimp/ByteSwapper.h>
|
||||
#include <assimp/types.h>
|
||||
|
||||
struct aiNode;
|
||||
|
||||
namespace Assimp {
|
||||
namespace Assimp {
|
||||
|
||||
using namespace MD2;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
/** Importer class for MD2
|
||||
*/
|
||||
class MD2Importer : public BaseImporter
|
||||
{
|
||||
class MD2Importer : public BaseImporter {
|
||||
public:
|
||||
MD2Importer();
|
||||
~MD2Importer();
|
||||
|
||||
|
||||
public:
|
||||
~MD2Importer() override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Returns whether the class can handle the format of the given file.
|
||||
* See BaseImporter::CanRead() for details. */
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
|
||||
bool checkSig) const;
|
||||
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
|
||||
bool checkSig) const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Called prior to ReadFile().
|
||||
* The function is a request to the importer to update its configuration
|
||||
* basing on the Importer's configuration property list.
|
||||
*/
|
||||
void SetupProperties(const Importer* pImp);
|
||||
void SetupProperties(const Importer *pImp) override;
|
||||
|
||||
protected:
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Return importer meta information.
|
||||
* See #BaseImporter::GetInfo for the details
|
||||
*/
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Imports the given file into the given scene structure.
|
||||
* See BaseImporter::InternReadFile() for details
|
||||
*/
|
||||
void InternReadFile( const std::string& pFile, aiScene* pScene,
|
||||
IOSystem* pIOHandler);
|
||||
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene,
|
||||
IOSystem *pIOHandler) override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Validate the header of the file
|
||||
|
@ -105,15 +98,14 @@ protected:
|
|||
void ValidateHeader();
|
||||
|
||||
protected:
|
||||
|
||||
/** Configuration option: frame to be loaded */
|
||||
unsigned int configFrameID;
|
||||
|
||||
/** Header of the MD2 file */
|
||||
BE_NCONST MD2::Header* m_pcHeader;
|
||||
BE_NCONST MD2::Header *m_pcHeader;
|
||||
|
||||
/** Buffer to hold the loaded file */
|
||||
BE_NCONST uint8_t* mBuffer;
|
||||
BE_NCONST uint8_t *mBuffer;
|
||||
|
||||
/** Size of the file, in bytes */
|
||||
unsigned int fileSize;
|
||||
|
|
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
@ -46,9 +45,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#ifndef AI_MD3LOADER_H_INCLUDED
|
||||
#define AI_MD3LOADER_H_INCLUDED
|
||||
|
||||
#include "MD3FileData.h"
|
||||
#include <assimp/BaseImporter.h>
|
||||
#include <assimp/ByteSwapper.h>
|
||||
#include "MD3FileData.h"
|
||||
#include <assimp/StringComparison.h>
|
||||
#include <assimp/types.h>
|
||||
|
||||
|
@ -56,8 +55,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
struct aiMaterial;
|
||||
|
||||
namespace Assimp {
|
||||
|
||||
namespace Assimp {
|
||||
|
||||
using namespace MD3;
|
||||
namespace Q3Shader {
|
||||
|
@ -65,16 +63,14 @@ namespace Q3Shader {
|
|||
// ---------------------------------------------------------------------------
|
||||
/** @brief Tiny utility data structure to hold the data of a .skin file
|
||||
*/
|
||||
struct SkinData
|
||||
{
|
||||
//! A single entryin texture list
|
||||
struct TextureEntry : public std::pair<std::string,std::string>
|
||||
{
|
||||
struct SkinData {
|
||||
//! A single entry in texture list
|
||||
struct TextureEntry : public std::pair<std::string, std::string> {
|
||||
// did we resolve this texture entry?
|
||||
bool resolved;
|
||||
|
||||
// for std::find()
|
||||
bool operator == (const std::string& f) const {
|
||||
bool operator==(const std::string &f) const {
|
||||
return f == first;
|
||||
}
|
||||
};
|
||||
|
@ -88,8 +84,7 @@ struct SkinData
|
|||
// ---------------------------------------------------------------------------
|
||||
/** @brief Specifies cull modi for Quake shader files.
|
||||
*/
|
||||
enum ShaderCullMode
|
||||
{
|
||||
enum ShaderCullMode {
|
||||
CULL_NONE,
|
||||
CULL_CW,
|
||||
CULL_CCW
|
||||
|
@ -98,8 +93,7 @@ enum ShaderCullMode
|
|||
// ---------------------------------------------------------------------------
|
||||
/** @brief Specifies alpha blend modi (src + dest) for Quake shader files
|
||||
*/
|
||||
enum BlendFunc
|
||||
{
|
||||
enum BlendFunc {
|
||||
BLEND_NONE,
|
||||
BLEND_GL_ONE,
|
||||
BLEND_GL_ZERO,
|
||||
|
@ -112,8 +106,7 @@ enum BlendFunc
|
|||
// ---------------------------------------------------------------------------
|
||||
/** @brief Specifies alpha test modi for Quake texture maps
|
||||
*/
|
||||
enum AlphaTestFunc
|
||||
{
|
||||
enum AlphaTestFunc {
|
||||
AT_NONE,
|
||||
AT_GT0,
|
||||
AT_LT128,
|
||||
|
@ -123,36 +116,31 @@ enum AlphaTestFunc
|
|||
// ---------------------------------------------------------------------------
|
||||
/** @brief Tiny utility data structure to hold a .shader map data block
|
||||
*/
|
||||
struct ShaderMapBlock
|
||||
{
|
||||
struct ShaderMapBlock {
|
||||
ShaderMapBlock() AI_NO_EXCEPT
|
||||
: blend_src (BLEND_NONE)
|
||||
, blend_dest (BLEND_NONE)
|
||||
, alpha_test (AT_NONE)
|
||||
{}
|
||||
: blend_src(BLEND_NONE),
|
||||
blend_dest(BLEND_NONE),
|
||||
alpha_test(AT_NONE) {}
|
||||
|
||||
//! Name of referenced map
|
||||
std::string name;
|
||||
|
||||
//! Blend and alpha test settings for texture
|
||||
BlendFunc blend_src,blend_dest;
|
||||
BlendFunc blend_src, blend_dest;
|
||||
AlphaTestFunc alpha_test;
|
||||
|
||||
|
||||
//! For std::find()
|
||||
bool operator== (const std::string& o) const {
|
||||
return !ASSIMP_stricmp(o,name);
|
||||
bool operator==(const std::string &o) const {
|
||||
return !ASSIMP_stricmp(o, name);
|
||||
}
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
/** @brief Tiny utility data structure to hold a .shader data block
|
||||
*/
|
||||
struct ShaderDataBlock
|
||||
{
|
||||
struct ShaderDataBlock {
|
||||
ShaderDataBlock() AI_NO_EXCEPT
|
||||
: cull (CULL_CW)
|
||||
{}
|
||||
: cull(CULL_CW) {}
|
||||
|
||||
//! Name of referenced data element
|
||||
std::string name;
|
||||
|
@ -163,18 +151,16 @@ struct ShaderDataBlock
|
|||
//! Maps defined in the shader
|
||||
std::list<ShaderMapBlock> maps;
|
||||
|
||||
|
||||
//! For std::find()
|
||||
bool operator== (const std::string& o) const {
|
||||
return !ASSIMP_stricmp(o,name);
|
||||
bool operator==(const std::string &o) const {
|
||||
return !ASSIMP_stricmp(o, name);
|
||||
}
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
/** @brief Tiny utility data structure to hold the data of a .shader file
|
||||
*/
|
||||
struct ShaderData
|
||||
{
|
||||
struct ShaderData {
|
||||
//! Shader data blocks
|
||||
std::list<ShaderDataBlock> blocks;
|
||||
};
|
||||
|
@ -188,8 +174,7 @@ struct ShaderData
|
|||
* @param io IOSystem to be used for reading
|
||||
* @return false if file is not accessible
|
||||
*/
|
||||
bool LoadShader(ShaderData& fill, const std::string& file,IOSystem* io);
|
||||
|
||||
bool LoadShader(ShaderData &fill, const std::string &file, IOSystem *io);
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
/** @brief Convert a Q3Shader to an aiMaterial
|
||||
|
@ -197,7 +182,7 @@ bool LoadShader(ShaderData& fill, const std::string& file,IOSystem* io);
|
|||
* @param[out] out Material structure to be filled.
|
||||
* @param[in] shader Input shader
|
||||
*/
|
||||
void ConvertShaderToMaterial(aiMaterial* out, const ShaderDataBlock& shader);
|
||||
void ConvertShaderToMaterial(aiMaterial *out, const ShaderDataBlock &shader);
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
/** @brief Load a skin file
|
||||
|
@ -208,56 +193,50 @@ void ConvertShaderToMaterial(aiMaterial* out, const ShaderDataBlock& shader);
|
|||
* @param io IOSystem to be used for reading
|
||||
* @return false if file is not accessible
|
||||
*/
|
||||
bool LoadSkin(SkinData& fill, const std::string& file,IOSystem* io);
|
||||
bool LoadSkin(SkinData &fill, const std::string &file, IOSystem *io);
|
||||
|
||||
} // ! namespace Q3SHader
|
||||
} // namespace Q3Shader
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
/** @brief Importer class to load MD3 files
|
||||
*/
|
||||
class MD3Importer : public BaseImporter
|
||||
{
|
||||
class MD3Importer : public BaseImporter {
|
||||
public:
|
||||
MD3Importer();
|
||||
~MD3Importer();
|
||||
|
||||
|
||||
public:
|
||||
~MD3Importer() override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Returns whether the class can handle the format of the given file.
|
||||
* See BaseImporter::CanRead() for details. */
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
|
||||
bool checkSig) const;
|
||||
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
|
||||
bool checkSig) const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Called prior to ReadFile().
|
||||
* The function is a request to the importer to update its configuration
|
||||
* basing on the Importer's configuration property list.
|
||||
*/
|
||||
void SetupProperties(const Importer* pImp);
|
||||
void SetupProperties(const Importer *pImp) override;
|
||||
|
||||
protected:
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Return importer meta information.
|
||||
* See #BaseImporter::GetInfo for the details
|
||||
*/
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Imports the given file into the given scene structure.
|
||||
* See BaseImporter::InternReadFile() for details
|
||||
*/
|
||||
void InternReadFile( const std::string& pFile, aiScene* pScene,
|
||||
IOSystem* pIOHandler);
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene,
|
||||
IOSystem *pIOHandler) override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Validate offsets in the header
|
||||
*/
|
||||
void ValidateHeaderOffsets();
|
||||
void ValidateSurfaceHeaderOffsets(const MD3::Surface* pcSurfHeader);
|
||||
void ValidateSurfaceHeaderOffsets(const MD3::Surface *pcSurfHeader);
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Read a Q3 multipart file
|
||||
|
@ -269,13 +248,13 @@ protected:
|
|||
/** Try to read the skin for a MD3 file
|
||||
* @param fill Receives output information
|
||||
*/
|
||||
void ReadSkin(Q3Shader::SkinData& fill) const;
|
||||
void ReadSkin(Q3Shader::SkinData &fill) const;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Try to read the shader for a MD3 file
|
||||
* @param fill Receives output information
|
||||
*/
|
||||
void ReadShader(Q3Shader::ShaderData& fill) const;
|
||||
void ReadShader(Q3Shader::ShaderData &fill) const;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Convert a texture path in a MD3 file to a proper value
|
||||
|
@ -283,11 +262,10 @@ protected:
|
|||
* @param[in] header_path Base path specified in MD3 header
|
||||
* @param[out] out Receives the converted output string
|
||||
*/
|
||||
void ConvertPath(const char* texture_name, const char* header_path,
|
||||
std::string& out) const;
|
||||
void ConvertPath(const char *texture_name, const char *header_path,
|
||||
std::string &out) const;
|
||||
|
||||
protected:
|
||||
|
||||
/** Configuration option: frame to be loaded */
|
||||
unsigned int configFrameID;
|
||||
|
||||
|
@ -307,10 +285,10 @@ protected:
|
|||
bool configSpeedFlag;
|
||||
|
||||
/** Header of the MD3 file */
|
||||
BE_NCONST MD3::Header* pcHeader;
|
||||
BE_NCONST MD3::Header *pcHeader;
|
||||
|
||||
/** File buffer */
|
||||
BE_NCONST unsigned char* mBuffer;
|
||||
BE_NCONST unsigned char *mBuffer;
|
||||
|
||||
/** Size of the file, in bytes */
|
||||
unsigned int fileSize;
|
||||
|
@ -325,11 +303,11 @@ protected:
|
|||
std::string filename;
|
||||
|
||||
/** Output scene to be filled */
|
||||
aiScene* mScene;
|
||||
aiScene *mScene;
|
||||
|
||||
/** IO system to be used to access the data*/
|
||||
IOSystem* mIOHandler;
|
||||
};
|
||||
IOSystem *mIOHandler;
|
||||
};
|
||||
|
||||
} // end of namespace Assimp
|
||||
|
||||
|
|
|
@ -43,12 +43,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
* @brief Definition of the .MD5 importer class.
|
||||
* http://www.modwiki.net/wiki/MD5_(file_format)
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef AI_MD5LOADER_H_INCLUDED
|
||||
#define AI_MD5LOADER_H_INCLUDED
|
||||
|
||||
#include "MD5Parser.h"
|
||||
#include <assimp/BaseImporter.h>
|
||||
|
||||
#include <assimp/types.h>
|
||||
|
||||
struct aiNode;
|
||||
|
@ -65,35 +65,35 @@ using namespace Assimp::MD5;
|
|||
class MD5Importer : public BaseImporter {
|
||||
public:
|
||||
MD5Importer();
|
||||
~MD5Importer();
|
||||
~MD5Importer() override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Returns whether the class can handle the format of the given file.
|
||||
* See BaseImporter::CanRead() for details.
|
||||
*/
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
// -------------------------------------------------------------------
|
||||
/** Return importer meta information.
|
||||
* See #BaseImporter::GetInfo for the details
|
||||
*/
|
||||
const aiImporterDesc *GetInfo() const;
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Called prior to ReadFile().
|
||||
* The function is a request to the importer to update its configuration
|
||||
* basing on the Importer's configuration property list.
|
||||
*/
|
||||
void SetupProperties(const Importer *pImp);
|
||||
void SetupProperties(const Importer *pImp) override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Imports the given file into the given scene structure.
|
||||
* See BaseImporter::InternReadFile() for details
|
||||
*/
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene,
|
||||
IOSystem *pIOHandler);
|
||||
IOSystem *pIOHandler) override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Load a *.MD5MESH file.
|
||||
|
|
|
@ -48,8 +48,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
#include <assimp/types.h>
|
||||
|
||||
#include <assimp/BaseImporter.h>
|
||||
#include "MDCFileData.h"
|
||||
#include <assimp/BaseImporter.h>
|
||||
#include <assimp/ByteSwapper.h>
|
||||
|
||||
namespace Assimp {
|
||||
|
@ -59,45 +59,37 @@ using namespace MDC;
|
|||
// ---------------------------------------------------------------------------
|
||||
/** Importer class to load the RtCW MDC file format
|
||||
*/
|
||||
class MDCImporter : public BaseImporter
|
||||
{
|
||||
class MDCImporter : public BaseImporter {
|
||||
public:
|
||||
MDCImporter();
|
||||
~MDCImporter();
|
||||
|
||||
|
||||
public:
|
||||
~MDCImporter() override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Returns whether the class can handle the format of the given file.
|
||||
* See BaseImporter::CanRead() for details. */
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
|
||||
bool checkSig) const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Called prior to ReadFile().
|
||||
* The function is a request to the importer to update its configuration
|
||||
* basing on the Importer's configuration property list.
|
||||
*/
|
||||
void SetupProperties(const Importer* pImp);
|
||||
void SetupProperties(const Importer *pImp) override;
|
||||
|
||||
protected:
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Return importer meta information.
|
||||
* See #BaseImporter::GetInfo for the details
|
||||
*/
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Imports the given file into the given scene structure.
|
||||
* See BaseImporter::InternReadFile() for details
|
||||
*/
|
||||
void InternReadFile( const std::string& pFile, aiScene* pScene,
|
||||
IOSystem* pIOHandler);
|
||||
|
||||
protected:
|
||||
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene,
|
||||
IOSystem *pIOHandler) override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Validate the header of the file
|
||||
|
@ -107,19 +99,17 @@ protected:
|
|||
// -------------------------------------------------------------------
|
||||
/** Validate the header of a MDC surface
|
||||
*/
|
||||
void ValidateSurfaceHeader(BE_NCONST MDC::Surface* pcSurf);
|
||||
void ValidateSurfaceHeader(BE_NCONST MDC::Surface *pcSurf);
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
/** Configuration option: frame to be loaded */
|
||||
unsigned int configFrameID;
|
||||
|
||||
/** Header of the MDC file */
|
||||
BE_NCONST MDC::Header* pcHeader;
|
||||
BE_NCONST MDC::Header *pcHeader;
|
||||
|
||||
/** Buffer to hold the loaded file */
|
||||
unsigned char* mBuffer;
|
||||
unsigned char *mBuffer;
|
||||
|
||||
/** size of the file, in bytes */
|
||||
unsigned int fileSize;
|
||||
|
|
|
@ -43,7 +43,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
/** @file MDLLoader.h
|
||||
* @brief Declaration of the loader for MDL files
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#ifndef AI_MDLLOADER_H_INCLUDED
|
||||
#define AI_MDLLOADER_H_INCLUDED
|
||||
|
||||
|
@ -55,7 +55,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
struct aiNode;
|
||||
struct aiTexture;
|
||||
|
||||
namespace Assimp {
|
||||
namespace Assimp {
|
||||
|
||||
using namespace MDL;
|
||||
|
||||
|
@ -87,34 +87,34 @@ class MDLImporter : public BaseImporter
|
|||
{
|
||||
public:
|
||||
MDLImporter();
|
||||
~MDLImporter();
|
||||
~MDLImporter() override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Returns whether the class can handle the format of the given file.
|
||||
* See BaseImporter::CanRead() for details. */
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool checkSig) const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Called prior to ReadFile().
|
||||
* The function is a request to the importer to update its configuration
|
||||
* basing on the Importer's configuration property list.
|
||||
*/
|
||||
void SetupProperties(const Importer* pImp);
|
||||
void SetupProperties(const Importer* pImp) override;
|
||||
|
||||
protected:
|
||||
// -------------------------------------------------------------------
|
||||
/** Return importer meta information.
|
||||
* See #BaseImporter::GetInfo for the details
|
||||
*/
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
const aiImporterDesc* GetInfo () const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Imports the given file into the given scene structure.
|
||||
* See BaseImporter::InternReadFile() for details
|
||||
*/
|
||||
void InternReadFile( const std::string& pFile, aiScene* pScene,
|
||||
IOSystem* pIOHandler);
|
||||
IOSystem* pIOHandler) override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Import a quake 1 MDL file (IDPO)
|
||||
|
|
|
@ -43,10 +43,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
#ifndef ASSIMP_BUILD_NO_MDL_IMPORTER
|
||||
|
||||
// internal headers
|
||||
#include "MDLDefaultColorMap.h"
|
||||
#include "MDLLoader.h"
|
||||
#include <assimp/Defines.h>
|
||||
|
||||
#include <assimp/StringUtils.h>
|
||||
#include <assimp/qnan.h>
|
||||
#include <assimp/scene.h>
|
||||
|
|
|
@ -68,10 +68,10 @@ public:
|
|||
|
||||
private:
|
||||
//! \brief Appends the supported extension.
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
const aiImporterDesc* GetInfo() const override;
|
||||
|
||||
//! \brief File import implementation.
|
||||
void InternReadFile(const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler);
|
||||
void InternReadFile(const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler) override;
|
||||
|
||||
//! \brief Create the data from imported content.
|
||||
void CreateDataFromImport(const pmx::PmxModel* pModel, aiScene* pScene);
|
||||
|
|
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
@ -43,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
/** @file MS3DLoader.h
|
||||
* @brief Declaration of the MS3D importer class.
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef AI_MS3DLOADER_H_INCLUDED
|
||||
#define AI_MS3DLOADER_H_INCLUDED
|
||||
|
||||
|
@ -50,65 +50,53 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#include <assimp/StreamReader.h>
|
||||
struct aiNode;
|
||||
|
||||
namespace Assimp {
|
||||
namespace Assimp {
|
||||
|
||||
// ----------------------------------------------------------------------------------------------
|
||||
/** Milkshape 3D importer implementation */
|
||||
// ----------------------------------------------------------------------------------------------
|
||||
class MS3DImporter
|
||||
: public BaseImporter
|
||||
{
|
||||
|
||||
class MS3DImporter : public BaseImporter {
|
||||
public:
|
||||
|
||||
MS3DImporter();
|
||||
~MS3DImporter();
|
||||
|
||||
public:
|
||||
~MS3DImporter() override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Returns whether the class can handle the format of the given file.
|
||||
* See BaseImporter::CanRead() for details. */
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
|
||||
bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Return importer meta information.
|
||||
* See #BaseImporter::GetInfo for the details */
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Imports the given file into the given scene structure.
|
||||
* See BaseImporter::InternReadFile() for details */
|
||||
void InternReadFile( const std::string& pFile, aiScene* pScene,
|
||||
IOSystem* pIOHandler);
|
||||
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene,
|
||||
IOSystem *pIOHandler) override;
|
||||
|
||||
private:
|
||||
|
||||
struct TempJoint;
|
||||
void CollectChildJoints(const std::vector<TempJoint>& joints, std::vector<bool>& hadit, aiNode* nd,const aiMatrix4x4& absTrafo);
|
||||
void CollectChildJoints(const std::vector<TempJoint>& joints, aiNode* nd);
|
||||
void CollectChildJoints(const std::vector<TempJoint> &joints, std::vector<bool> &hadit, aiNode *nd, const aiMatrix4x4 &absTrafo);
|
||||
void CollectChildJoints(const std::vector<TempJoint> &joints, aiNode *nd);
|
||||
|
||||
template<typename T> void ReadComments(StreamReaderLE& stream, std::vector<T>& outp);
|
||||
private:
|
||||
|
||||
aiScene* mScene;
|
||||
template <typename T>
|
||||
void ReadComments(StreamReaderLE &stream, std::vector<T> &outp);
|
||||
|
||||
private:
|
||||
aiScene *mScene;
|
||||
|
||||
struct TempVertex
|
||||
{
|
||||
private:
|
||||
struct TempVertex {
|
||||
aiVector3D pos;
|
||||
unsigned int bone_id[4], ref_cnt;
|
||||
float weights[4];
|
||||
};
|
||||
|
||||
struct TempTriangle
|
||||
{
|
||||
struct TempTriangle {
|
||||
unsigned int indices[3];
|
||||
aiVector3D normals[3];
|
||||
aiVector2D uv[3];
|
||||
|
@ -116,34 +104,30 @@ private:
|
|||
unsigned int sg, group;
|
||||
};
|
||||
|
||||
struct TempGroup
|
||||
{
|
||||
struct TempGroup {
|
||||
char name[33]; // +0
|
||||
std::vector<unsigned int> triangles;
|
||||
unsigned int mat; // 0xff is no material
|
||||
std::string comment;
|
||||
};
|
||||
|
||||
struct TempMaterial
|
||||
{
|
||||
struct TempMaterial {
|
||||
// again, add an extra 0 character to all strings -
|
||||
char name[33];
|
||||
char texture[129];
|
||||
char alphamap[129];
|
||||
|
||||
aiColor4D diffuse,specular,ambient,emissive;
|
||||
float shininess,transparency;
|
||||
aiColor4D diffuse, specular, ambient, emissive;
|
||||
float shininess, transparency;
|
||||
std::string comment;
|
||||
};
|
||||
|
||||
struct TempKeyFrame
|
||||
{
|
||||
struct TempKeyFrame {
|
||||
float time;
|
||||
aiVector3D value;
|
||||
};
|
||||
|
||||
struct TempJoint
|
||||
{
|
||||
struct TempJoint {
|
||||
char name[33];
|
||||
char parentName[33];
|
||||
aiVector3D rotation, position;
|
||||
|
@ -158,5 +142,5 @@ private:
|
|||
//};
|
||||
};
|
||||
|
||||
}
|
||||
} // namespace Assimp
|
||||
#endif
|
||||
|
|
|
@ -44,19 +44,18 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#ifndef INCLUDED_AI_NDO_LOADER_H
|
||||
#define INCLUDED_AI_NDO_LOADER_H
|
||||
|
||||
#include <assimp/vector3.h>
|
||||
#include <assimp/BaseImporter.h>
|
||||
#include <stdint.h>
|
||||
#include <assimp/vector3.h>
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
|
||||
struct aiImporterDesc;
|
||||
struct aiScene;
|
||||
|
||||
namespace Assimp {
|
||||
class IOSystem;
|
||||
class Importer;
|
||||
namespace Assimp {
|
||||
class IOSystem;
|
||||
class Importer;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
/** @brief Importer class to load meshes from Nendo.
|
||||
|
@ -64,38 +63,30 @@ namespace Assimp {
|
|||
* Basing on
|
||||
* <blender>/blender/release/scripts/nendo_import.py by Anthony D'Agostino.
|
||||
*/
|
||||
class NDOImporter : public BaseImporter
|
||||
{
|
||||
class NDOImporter : public BaseImporter {
|
||||
public:
|
||||
NDOImporter();
|
||||
~NDOImporter();
|
||||
|
||||
|
||||
public:
|
||||
~NDOImporter() override;
|
||||
|
||||
//! Represents a single edge
|
||||
struct Edge
|
||||
{
|
||||
struct Edge {
|
||||
unsigned int edge[8];
|
||||
unsigned int hard;
|
||||
uint8_t color[8];
|
||||
};
|
||||
|
||||
//! Represents a single face
|
||||
struct Face
|
||||
{
|
||||
struct Face {
|
||||
unsigned int elem;
|
||||
};
|
||||
|
||||
struct Vertex
|
||||
{
|
||||
struct Vertex {
|
||||
unsigned int num;
|
||||
aiVector3D val;
|
||||
};
|
||||
|
||||
//! Represents a single object
|
||||
struct Object
|
||||
{
|
||||
struct Object {
|
||||
std::string name;
|
||||
|
||||
std::vector<Edge> edges;
|
||||
|
@ -104,23 +95,22 @@ public:
|
|||
};
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
|
||||
bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
// -------------------------------------------------------------------
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
void SetupProperties(const Importer *pImp) override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
void SetupProperties(const Importer* pImp);
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
void InternReadFile( const std::string& pFile, aiScene* pScene,
|
||||
IOSystem* pIOHandler);
|
||||
|
||||
private:
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene,
|
||||
IOSystem *pIOHandler) override;
|
||||
|
||||
}; // end of class NDOImporter
|
||||
|
||||
} // end of namespace Assimp
|
||||
|
||||
#endif // INCLUDED_AI_NDO_LOADER_H
|
||||
|
|
|
@ -43,16 +43,16 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
/** @file NFFLoader.h
|
||||
* @brief Declaration of the NFF importer class.
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef AI_NFFLOADER_H_INCLUDED
|
||||
#define AI_NFFLOADER_H_INCLUDED
|
||||
|
||||
#include <assimp/BaseImporter.h>
|
||||
#include <assimp/types.h>
|
||||
#include <assimp/material.h>
|
||||
#include <assimp/types.h>
|
||||
#include <vector>
|
||||
|
||||
|
||||
namespace Assimp {
|
||||
namespace Assimp {
|
||||
|
||||
// ----------------------------------------------------------------------------------
|
||||
/** NFF (Neutral File Format) Importer class.
|
||||
|
@ -61,67 +61,56 @@ namespace Assimp {
|
|||
* Both are quite different and the loading code is somewhat dirty at
|
||||
* the moment. Sense8 should be moved to a separate loader.
|
||||
*/
|
||||
class NFFImporter : public BaseImporter
|
||||
{
|
||||
class NFFImporter : public BaseImporter {
|
||||
public:
|
||||
NFFImporter();
|
||||
~NFFImporter();
|
||||
|
||||
|
||||
public:
|
||||
~NFFImporter() override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Returns whether the class can handle the format of the given file.
|
||||
* See BaseImporter::CanRead() for details.
|
||||
*/
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
|
||||
bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Return importer meta information.
|
||||
* See #BaseImporter::GetInfo for the details
|
||||
*/
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Imports the given file into the given scene structure.
|
||||
* See BaseImporter::InternReadFile() for details
|
||||
*/
|
||||
void InternReadFile( const std::string& pFile, aiScene* pScene,
|
||||
IOSystem* pIOHandler);
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene,
|
||||
IOSystem *pIOHandler) override;
|
||||
|
||||
private:
|
||||
|
||||
|
||||
// describes face material properties
|
||||
struct ShadingInfo
|
||||
{
|
||||
ShadingInfo()
|
||||
: color (0.6f,0.6f,0.6f)
|
||||
, diffuse (1.f,1.f,1.f)
|
||||
, specular (1.f,1.f,1.f)
|
||||
, ambient (0.f,0.f,0.f)
|
||||
, emissive (0.f,0.f,0.f)
|
||||
, refracti (1.f)
|
||||
, twoSided (false) // for NFF2
|
||||
, shaded (true) // for NFF2
|
||||
, opacity (1.f)
|
||||
, shininess (0.f)
|
||||
, mapping (aiTextureMapping_UV)
|
||||
{}
|
||||
struct ShadingInfo {
|
||||
ShadingInfo() :
|
||||
color(0.6f, 0.6f, 0.6f),
|
||||
diffuse(1.f, 1.f, 1.f),
|
||||
specular(1.f, 1.f, 1.f),
|
||||
ambient(0.f, 0.f, 0.f),
|
||||
emissive(0.f, 0.f, 0.f),
|
||||
refracti(1.f),
|
||||
twoSided(false), // for NFF2
|
||||
shaded(true), // for NFF2
|
||||
opacity(1.f),
|
||||
shininess(0.f),
|
||||
mapping(aiTextureMapping_UV) {
|
||||
// empty
|
||||
}
|
||||
|
||||
aiColor3D color,diffuse,specular,ambient,emissive;
|
||||
aiColor3D color, diffuse, specular, ambient, emissive;
|
||||
ai_real refracti;
|
||||
|
||||
std::string texFile;
|
||||
|
||||
// For NFF2
|
||||
bool twoSided;
|
||||
bool twoSided; // For NFF2
|
||||
bool shaded;
|
||||
ai_real opacity, shininess;
|
||||
|
||||
std::string name;
|
||||
|
||||
// texture mapping to be generated for the mesh - uv is the default
|
||||
|
@ -130,16 +119,15 @@ private:
|
|||
aiTextureMapping mapping;
|
||||
|
||||
// shininess is ignored for the moment
|
||||
bool operator == (const ShadingInfo& other) const
|
||||
{
|
||||
return color == other.color &&
|
||||
diffuse == other.diffuse &&
|
||||
specular == other.specular &&
|
||||
ambient == other.ambient &&
|
||||
refracti == other.refracti &&
|
||||
texFile == other.texFile &&
|
||||
twoSided == other.twoSided &&
|
||||
shaded == other.shaded;
|
||||
bool operator == (const ShadingInfo &other) const {
|
||||
return color == other.color &&
|
||||
diffuse == other.diffuse &&
|
||||
specular == other.specular &&
|
||||
ambient == other.ambient &&
|
||||
refracti == other.refracti &&
|
||||
texFile == other.texFile &&
|
||||
twoSided == other.twoSided &&
|
||||
shaded == other.shaded;
|
||||
|
||||
// Some properties from NFF2 aren't compared by this operator.
|
||||
// Comparing MeshInfo::matIndex should do that.
|
||||
|
@ -147,35 +135,25 @@ private:
|
|||
};
|
||||
|
||||
// describes a NFF light source
|
||||
struct Light
|
||||
{
|
||||
Light()
|
||||
: intensity (1.f)
|
||||
, color (1.f,1.f,1.f)
|
||||
{}
|
||||
struct Light {
|
||||
Light() :
|
||||
intensity(1.f), color(1.f, 1.f, 1.f) {}
|
||||
|
||||
aiVector3D position;
|
||||
ai_real intensity;
|
||||
aiColor3D color;
|
||||
};
|
||||
|
||||
enum PatchType
|
||||
{
|
||||
enum PatchType {
|
||||
PatchType_Simple = 0x0,
|
||||
PatchType_Normals = 0x1,
|
||||
PatchType_UVAndNormals = 0x2
|
||||
};
|
||||
|
||||
// describes a NFF mesh
|
||||
struct MeshInfo
|
||||
{
|
||||
MeshInfo(PatchType _pType, bool bL = false)
|
||||
: pType (_pType)
|
||||
, bLocked (bL)
|
||||
, radius (1.f,1.f,1.f)
|
||||
, dir (0.f,1.f,0.f)
|
||||
, matIndex (0)
|
||||
{
|
||||
struct MeshInfo {
|
||||
MeshInfo(PatchType _pType, bool bL = false) :
|
||||
pType(_pType), bLocked(bL), radius(1.f, 1.f, 1.f), dir(0.f, 1.f, 0.f), matIndex(0) {
|
||||
name[0] = '\0'; // by default meshes are unnamed
|
||||
}
|
||||
|
||||
|
@ -192,11 +170,10 @@ private:
|
|||
std::vector<unsigned int> faces;
|
||||
|
||||
// for NFF2
|
||||
std::vector<aiColor4D> colors;
|
||||
std::vector<aiColor4D> colors;
|
||||
unsigned int matIndex;
|
||||
};
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Loads the material table for the NFF2 file format from an
|
||||
* external file.
|
||||
|
@ -205,9 +182,8 @@ private:
|
|||
* @param path Path to the file (abs. or rel.)
|
||||
* @param pIOHandler IOSystem to be used to open the file
|
||||
*/
|
||||
void LoadNFF2MaterialTable(std::vector<ShadingInfo>& output,
|
||||
const std::string& path, IOSystem* pIOHandler);
|
||||
|
||||
void LoadNFF2MaterialTable(std::vector<ShadingInfo> &output,
|
||||
const std::string &path, IOSystem *pIOHandler);
|
||||
};
|
||||
|
||||
} // end of namespace Assimp
|
||||
|
|
|
@ -5,8 +5,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
|
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
@ -43,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
/** @file OFFLoader.h
|
||||
* @brief Declaration of the OFF importer class.
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef AI_OFFLOADER_H_INCLUDED
|
||||
#define AI_OFFLOADER_H_INCLUDED
|
||||
|
||||
|
@ -50,43 +50,35 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#include <assimp/types.h>
|
||||
#include <vector>
|
||||
|
||||
namespace Assimp {
|
||||
namespace Assimp {
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
/** Importer class for the Object File Format (.off)
|
||||
*/
|
||||
class OFFImporter : public BaseImporter
|
||||
{
|
||||
class OFFImporter : public BaseImporter {
|
||||
public:
|
||||
OFFImporter();
|
||||
~OFFImporter();
|
||||
|
||||
|
||||
public:
|
||||
~OFFImporter() override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Returns whether the class can handle the format of the given file.
|
||||
* See BaseImporter::CanRead() for details. */
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
|
||||
bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Return importer meta information.
|
||||
* See #BaseImporter::GetInfo for the details
|
||||
*/
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Imports the given file into the given scene structure.
|
||||
* See BaseImporter::InternReadFile() for details
|
||||
*/
|
||||
void InternReadFile( const std::string& pFile, aiScene* pScene,
|
||||
IOSystem* pIOHandler);
|
||||
|
||||
private:
|
||||
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene,
|
||||
IOSystem *pIOHandler) override;
|
||||
};
|
||||
|
||||
} // end of namespace Assimp
|
||||
|
|
|
@ -60,7 +60,7 @@ struct Material;
|
|||
//! \brief Data structure for a simple obj-face, describes discredit,l.ation and materials
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
struct Face {
|
||||
typedef std::vector<unsigned int> IndexArray;
|
||||
using IndexArray = std::vector<unsigned int>;
|
||||
|
||||
//! Primitive type
|
||||
aiPrimitiveType m_PrimitiveType;
|
||||
|
@ -122,7 +122,6 @@ struct Object {
|
|||
struct Material {
|
||||
//! Name of material description
|
||||
aiString MaterialName;
|
||||
|
||||
//! Texture names
|
||||
aiString texture;
|
||||
aiString textureSpecular;
|
||||
|
@ -237,9 +236,9 @@ struct Mesh {
|
|||
//! \brief Data structure to store all obj-specific model datas
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
struct Model {
|
||||
typedef std::map<std::string, std::vector<unsigned int> *> GroupMap;
|
||||
typedef std::map<std::string, std::vector<unsigned int> *>::iterator GroupMapIt;
|
||||
typedef std::map<std::string, std::vector<unsigned int> *>::const_iterator ConstGroupMapIt;
|
||||
using GroupMap = std::map<std::string, std::vector<unsigned int> *>;
|
||||
using GroupMapIt = std::map<std::string, std::vector<unsigned int> *>::iterator;
|
||||
using ConstGroupMapIt = std::map<std::string, std::vector<unsigned int> *>::const_iterator;
|
||||
|
||||
//! Model name
|
||||
std::string m_ModelName;
|
||||
|
@ -278,12 +277,12 @@ struct Model {
|
|||
|
||||
//! \brief The default class constructor
|
||||
Model() :
|
||||
m_ModelName(""),
|
||||
m_ModelName(),
|
||||
m_pCurrent(nullptr),
|
||||
m_pCurrentMaterial(nullptr),
|
||||
m_pDefaultMaterial(nullptr),
|
||||
m_pGroupFaceIDs(nullptr),
|
||||
m_strActiveGroup(""),
|
||||
m_strActiveGroup(),
|
||||
m_TextureCoordDim(0),
|
||||
m_pCurrentMesh(nullptr) {
|
||||
// empty
|
||||
|
@ -291,27 +290,17 @@ struct Model {
|
|||
|
||||
//! \brief The class destructor
|
||||
~Model() {
|
||||
// Clear all stored object instances
|
||||
for (std::vector<Object *>::iterator it = m_Objects.begin();
|
||||
it != m_Objects.end(); ++it) {
|
||||
delete *it;
|
||||
for (auto & it : m_Objects) {
|
||||
delete it;
|
||||
}
|
||||
m_Objects.clear();
|
||||
|
||||
// Clear all stored mesh instances
|
||||
for (std::vector<Mesh *>::iterator it = m_Meshes.begin();
|
||||
it != m_Meshes.end(); ++it) {
|
||||
delete *it;
|
||||
for (auto & Meshe : m_Meshes) {
|
||||
delete Meshe;
|
||||
}
|
||||
m_Meshes.clear();
|
||||
|
||||
for (GroupMapIt it = m_Groups.begin(); it != m_Groups.end(); ++it) {
|
||||
delete it->second;
|
||||
for (auto & Group : m_Groups) {
|
||||
delete Group.second;
|
||||
}
|
||||
m_Groups.clear();
|
||||
|
||||
for (std::map<std::string, Material *>::iterator it = m_MaterialMap.begin(); it != m_MaterialMap.end(); ++it) {
|
||||
delete it->second;
|
||||
for (auto & it : m_MaterialMap) {
|
||||
delete it.second;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -38,6 +38,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
----------------------------------------------------------------------
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef OBJ_FILE_IMPORTER_H_INC
|
||||
#define OBJ_FILE_IMPORTER_H_INC
|
||||
|
||||
|
@ -65,19 +66,18 @@ public:
|
|||
ObjFileImporter();
|
||||
|
||||
/// \brief Destructor
|
||||
~ObjFileImporter();
|
||||
~ObjFileImporter() override;
|
||||
|
||||
public:
|
||||
/// \brief Returns whether the class can handle the format of the given file.
|
||||
/// \remark See BaseImporter::CanRead() for details.
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const;
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const override;
|
||||
|
||||
private:
|
||||
protected:
|
||||
//! \brief Appends the supported extension.
|
||||
const aiImporterDesc *GetInfo() const;
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
|
||||
//! \brief File import implementation.
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler);
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) override;
|
||||
|
||||
//! \brief Create the data from imported content.
|
||||
void CreateDataFromImport(const ObjFile::Model *pModel, aiScene *pScene);
|
||||
|
|
|
@ -61,9 +61,9 @@ struct Material;
|
|||
class ObjFileMtlImporter {
|
||||
public:
|
||||
static const size_t BUFFERSIZE = 2048;
|
||||
typedef std::vector<char> DataArray;
|
||||
typedef std::vector<char>::iterator DataArrayIt;
|
||||
typedef std::vector<char>::const_iterator ConstDataArrayIt;
|
||||
using DataArray = std::vector<char>;
|
||||
using DataArrayIt = std::vector<char>::iterator;
|
||||
using ConstDataArrayIt = std::vector<char>::const_iterator;
|
||||
|
||||
//! \brief The class default constructor
|
||||
ObjFileMtlImporter(std::vector<char> &buffer, const std::string &strAbsPath,
|
||||
|
|
|
@ -73,7 +73,6 @@ public:
|
|||
typedef std::vector<char>::iterator DataArrayIt;
|
||||
typedef std::vector<char>::const_iterator ConstDataArrayIt;
|
||||
|
||||
public:
|
||||
/// @brief The default constructor.
|
||||
ObjFileParser();
|
||||
/// @brief Constructor with data array.
|
||||
|
|
|
@ -81,10 +81,10 @@ bool OgreImporter::CanRead(const std::string &pFile, Assimp::IOSystem *pIOHandle
|
|||
if (EndsWith(pFile, ".mesh.xml", false)) {
|
||||
const char *tokens[] = { "<mesh>" };
|
||||
return SearchFileHeaderForToken(pIOHandler, pFile, tokens, 1);
|
||||
} else {
|
||||
/// @todo Read and validate first header chunk?
|
||||
return EndsWith(pFile, ".mesh", false);
|
||||
}
|
||||
|
||||
/// @todo Read and validate first header chunk?
|
||||
return EndsWith(pFile, ".mesh", false);
|
||||
}
|
||||
|
||||
void OgreImporter::InternReadFile(const std::string &pFile, aiScene *pScene, Assimp::IOSystem *pIOHandler) {
|
||||
|
@ -110,28 +110,27 @@ void OgreImporter::InternReadFile(const std::string &pFile, aiScene *pScene, Ass
|
|||
|
||||
// Convert to Assimp
|
||||
mesh->ConvertToAssimpScene(pScene);
|
||||
return;
|
||||
}
|
||||
// XML .mesh.xml import
|
||||
else {
|
||||
/// @note XmlReader does not take ownership of f, hence the scoped ptr.
|
||||
std::unique_ptr<IOStream> scopedFile(f);
|
||||
XmlParser xmlParser;
|
||||
/// @note XmlReader does not take ownership of f, hence the scoped ptr.
|
||||
std::unique_ptr<IOStream> scopedFile(f);
|
||||
XmlParser xmlParser;
|
||||
|
||||
//std::unique_ptr<CIrrXML_IOStreamReader> xmlStream(new CIrrXML_IOStreamReader(scopedFile.get()));
|
||||
//std::unique_ptr<XmlReader> reader(irr::io::createIrrXMLReader(xmlStream.get()));
|
||||
xmlParser.parse(scopedFile.get());
|
||||
// Import mesh
|
||||
std::unique_ptr<MeshXml> mesh(OgreXmlSerializer::ImportMesh(&xmlParser));
|
||||
//std::unique_ptr<CIrrXML_IOStreamReader> xmlStream(new CIrrXML_IOStreamReader(scopedFile.get()));
|
||||
//std::unique_ptr<XmlReader> reader(irr::io::createIrrXMLReader(xmlStream.get()));
|
||||
xmlParser.parse(scopedFile.get());
|
||||
// Import mesh
|
||||
std::unique_ptr<MeshXml> mesh(OgreXmlSerializer::ImportMesh(&xmlParser));
|
||||
|
||||
// Import skeleton
|
||||
OgreXmlSerializer::ImportSkeleton(pIOHandler, mesh.get());
|
||||
// Import skeleton
|
||||
OgreXmlSerializer::ImportSkeleton(pIOHandler, mesh.get());
|
||||
|
||||
// Import mesh referenced materials
|
||||
ReadMaterials(pFile, pIOHandler, pScene, mesh.get());
|
||||
// Import mesh referenced materials
|
||||
ReadMaterials(pFile, pIOHandler, pScene, mesh.get());
|
||||
|
||||
// Convert to Assimp
|
||||
mesh->ConvertToAssimpScene(pScene);
|
||||
}
|
||||
// Convert to Assimp
|
||||
mesh->ConvertToAssimpScene(pScene);
|
||||
}
|
||||
|
||||
} // namespace Ogre
|
||||
|
|
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
@ -39,64 +38,61 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#ifndef AI_OGREIMPORTER_H_INC
|
||||
#define AI_OGREIMPORTER_H_INC
|
||||
|
||||
#ifndef ASSIMP_BUILD_NO_OGRE_IMPORTER
|
||||
|
||||
#include <assimp/BaseImporter.h>
|
||||
|
||||
#include "OgreStructs.h"
|
||||
#include "OgreParsingUtils.h"
|
||||
|
||||
#include <assimp/material.h>
|
||||
|
||||
namespace Assimp
|
||||
{
|
||||
namespace Ogre
|
||||
{
|
||||
#include "OgreParsingUtils.h"
|
||||
#include "OgreStructs.h"
|
||||
|
||||
namespace Assimp {
|
||||
namespace Ogre {
|
||||
|
||||
/** Importer for Ogre mesh, skeleton and material formats.
|
||||
@todo Support vertex colors.
|
||||
@todo Support poses/animations from the mesh file.
|
||||
Currently only skeleton file animations are supported. */
|
||||
class OgreImporter : public BaseImporter
|
||||
{
|
||||
class OgreImporter : public BaseImporter {
|
||||
public:
|
||||
/// BaseImporter override.
|
||||
virtual bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const;
|
||||
virtual bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
/// BaseImporter override.
|
||||
virtual void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) override;
|
||||
|
||||
/// BaseImporter override.
|
||||
virtual void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler);
|
||||
virtual const aiImporterDesc *GetInfo() const override;
|
||||
|
||||
/// BaseImporter override.
|
||||
virtual const aiImporterDesc *GetInfo() const;
|
||||
|
||||
/// BaseImporter override.
|
||||
virtual void SetupProperties(const Importer *pImp);
|
||||
virtual void SetupProperties(const Importer *pImp) override;
|
||||
|
||||
private:
|
||||
/// Read materials referenced by the @c mesh to @c pScene.
|
||||
void ReadMaterials(const std::string &pFile, Assimp::IOSystem *pIOHandler, aiScene *pScene, Mesh *mesh);
|
||||
void ReadMaterials(const std::string &pFile, Assimp::IOSystem *pIOHandler, aiScene *pScene, MeshXml *mesh);
|
||||
void AssignMaterials(aiScene *pScene, std::vector<aiMaterial*> &materials);
|
||||
void AssignMaterials(aiScene *pScene, std::vector<aiMaterial *> &materials);
|
||||
|
||||
/// Reads material
|
||||
aiMaterial* ReadMaterial(const std::string &pFile, Assimp::IOSystem *pIOHandler, const std::string &MaterialName);
|
||||
aiMaterial *ReadMaterial(const std::string &pFile, Assimp::IOSystem *pIOHandler, const std::string &MaterialName);
|
||||
|
||||
// These functions parse blocks from a material file from @c ss. Starting parsing from "{" and ending it to "}".
|
||||
bool ReadTechnique(const std::string &techniqueName, std::stringstream &ss, aiMaterial *material);
|
||||
bool ReadPass(const std::string &passName, std::stringstream &ss, aiMaterial *material);
|
||||
bool ReadTextureUnit(const std::string &textureUnitName, std::stringstream &ss, aiMaterial *material);
|
||||
|
||||
private:
|
||||
std::string m_userDefinedMaterialLibFile;
|
||||
bool m_detectTextureTypeFromFilename;
|
||||
|
||||
std::map<aiTextureType, unsigned int> m_textures;
|
||||
};
|
||||
} // Ogre
|
||||
} // Assimp
|
||||
} // namespace Ogre
|
||||
} // namespace Assimp
|
||||
|
||||
#endif // ASSIMP_BUILD_NO_OGRE_IMPORTER
|
||||
#endif // AI_OGREIMPORTER_H_INC
|
||||
|
|
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
@ -39,6 +38,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
----------------------------------------------------------------------
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef AI_OPENGEX_EXPORTER_H
|
||||
#define AI_OPENGEX_EXPORTER_H
|
||||
|
||||
|
|
|
@ -47,14 +47,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#include <assimp/StringComparison.h>
|
||||
#include <assimp/StringUtils.h>
|
||||
#include <assimp/DefaultLogger.hpp>
|
||||
|
||||
#include <assimp/ai_assert.h>
|
||||
#include <assimp/importerdesc.h>
|
||||
#include <assimp/scene.h>
|
||||
#include <openddlparser/OpenDDLParser.h>
|
||||
|
||||
#include <vector>
|
||||
|
||||
static const aiImporterDesc desc = {
|
||||
"Open Game Engine Exchange",
|
||||
"",
|
||||
|
|
|
@ -39,6 +39,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
----------------------------------------------------------------------
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef AI_OPENGEX_IMPORTER_H
|
||||
#define AI_OPENGEX_IMPORTER_H
|
||||
|
||||
|
@ -96,21 +97,21 @@ public:
|
|||
OpenGEXImporter();
|
||||
|
||||
/// The class destructor.
|
||||
virtual ~OpenGEXImporter();
|
||||
~OpenGEXImporter() override;
|
||||
|
||||
/// BaseImporter override.
|
||||
virtual bool CanRead( const std::string &file, IOSystem *pIOHandler, bool checkSig ) const;
|
||||
|
||||
/// BaseImporter override.
|
||||
virtual void InternReadFile( const std::string &file, aiScene *pScene, IOSystem *pIOHandler );
|
||||
|
||||
/// BaseImporter override.
|
||||
virtual const aiImporterDesc *GetInfo() const;
|
||||
|
||||
/// BaseImporter override.
|
||||
virtual void SetupProperties( const Importer *pImp );
|
||||
bool CanRead( const std::string &file, IOSystem *pIOHandler, bool checkSig ) const override;
|
||||
|
||||
protected:
|
||||
/// BaseImporter override.
|
||||
void InternReadFile( const std::string &file, aiScene *pScene, IOSystem *pIOHandler ) override;
|
||||
|
||||
/// BaseImporter override.
|
||||
virtual const aiImporterDesc *GetInfo() const override;
|
||||
|
||||
/// BaseImporter override.
|
||||
virtual void SetupProperties( const Importer *pImp ) override;
|
||||
|
||||
void handleNodes( ODDLParser::DDLNode *node, aiScene *pScene );
|
||||
void handleMetricNode( ODDLParser::DDLNode *node, aiScene *pScene );
|
||||
void handleNameNode( ODDLParser::DDLNode *node, aiScene *pScene );
|
||||
|
@ -176,15 +177,15 @@ private:
|
|||
};
|
||||
|
||||
struct ChildInfo {
|
||||
typedef std::list<aiNode*> NodeList;
|
||||
using NodeList = std::list<aiNode*>;
|
||||
std::list<aiNode*> m_children;
|
||||
};
|
||||
ChildInfo *m_root;
|
||||
typedef std::map<aiNode*, std::unique_ptr<ChildInfo> > NodeChildMap;
|
||||
using NodeChildMap = std::map<aiNode*, std::unique_ptr<ChildInfo> >;
|
||||
NodeChildMap m_nodeChildMap;
|
||||
|
||||
std::vector<std::unique_ptr<aiMesh> > m_meshCache;
|
||||
typedef std::map<std::string, size_t> ReferenceMap;
|
||||
using ReferenceMap = std::map<std::string, size_t>;
|
||||
std::map<std::string, size_t> m_mesh2refMap;
|
||||
std::map<std::string, size_t> m_material2refMap;
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
/** @file PLYLoader.h
|
||||
* @brief Declaration of the .ply importer class.
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef AI_PLYLOADER_H_INCLUDED
|
||||
#define AI_PLYLOADER_H_INCLUDED
|
||||
|
||||
|
@ -64,14 +65,14 @@ using namespace PLY;
|
|||
class PLYImporter : public BaseImporter {
|
||||
public:
|
||||
PLYImporter();
|
||||
~PLYImporter();
|
||||
~PLYImporter() override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Returns whether the class can handle the format of the given file.
|
||||
* See BaseImporter::CanRead() for details.
|
||||
*/
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool checkSig) const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Extract a vertex from the DOM
|
||||
|
@ -88,14 +89,14 @@ protected:
|
|||
/** Return importer meta information.
|
||||
* See #BaseImporter::GetInfo for the details
|
||||
*/
|
||||
const aiImporterDesc *GetInfo() const;
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Imports the given file into the given scene structure.
|
||||
* See BaseImporter::InternReadFile() for details
|
||||
*/
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene,
|
||||
IOSystem *pIOHandler);
|
||||
IOSystem *pIOHandler) override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Extract a material list from the DOM
|
||||
|
|
|
@ -48,8 +48,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#include <assimp/IOStreamBuffer.h>
|
||||
#include <vector>
|
||||
|
||||
namespace Assimp
|
||||
{
|
||||
namespace Assimp {
|
||||
|
||||
//pre-declaration
|
||||
class PLYImporter;
|
||||
|
|
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
@ -71,19 +70,19 @@ public:
|
|||
Q3BSPFileImporter();
|
||||
|
||||
/// @brief Destructor.
|
||||
~Q3BSPFileImporter();
|
||||
~Q3BSPFileImporter() override;
|
||||
|
||||
/// @brief Returns whether the class can handle the format of the given file.
|
||||
/// @remark See BaseImporter::CanRead() for details.
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig ) const;
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig ) const override;
|
||||
|
||||
protected:
|
||||
typedef std::map<std::string, std::vector<Q3BSP::sQ3BSPFace*>*> FaceMap;
|
||||
typedef std::map<std::string, std::vector<Q3BSP::sQ3BSPFace*>* >::iterator FaceMapIt;
|
||||
typedef std::map<std::string, std::vector<Q3BSP::sQ3BSPFace*>*>::const_iterator FaceMapConstIt;
|
||||
using FaceMap = std::map<std::string, std::vector<Q3BSP::sQ3BSPFace*>*>;
|
||||
using FaceMapIt = std::map<std::string, std::vector<Q3BSP::sQ3BSPFace*>* >::iterator;
|
||||
using FaceMapConstIt = std::map<std::string, std::vector<Q3BSP::sQ3BSPFace*>*>::const_iterator;
|
||||
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
void InternReadFile(const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler);
|
||||
const aiImporterDesc* GetInfo () const override;
|
||||
void InternReadFile(const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler) override;
|
||||
void separateMapName( const std::string &rImportName, std::string &rArchiveName, std::string &rMapName );
|
||||
bool findFirstMapInArchive(ZipArchiveIOSystem &rArchive, std::string &rMapName );
|
||||
void CreateDataFromImport( const Q3BSP::Q3BSPModel *pModel, aiScene* pScene, ZipArchiveIOSystem *pArchive );
|
||||
|
|
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
|
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
@ -57,9 +56,9 @@ namespace Q3BSP
|
|||
}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/// @brief This class implements th Q3DSP file parsing.
|
||||
// -------------------------------------------------------------------
|
||||
class Q3BSPFileParser
|
||||
{
|
||||
class Q3BSPFileParser {
|
||||
public:
|
||||
Q3BSPFileParser( const std::string &rMapName, ZipArchiveIOSystem *pZipArchive );
|
||||
~Q3BSPFileParser();
|
||||
|
|
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
@ -36,80 +35,66 @@ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/** @file Q3DLoader.h
|
||||
* @brief Declaration of the Q3D importer class.
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef AI_Q3DLOADER_H_INCLUDED
|
||||
#define AI_Q3DLOADER_H_INCLUDED
|
||||
|
||||
#include <assimp/BaseImporter.h>
|
||||
#include <assimp/types.h>
|
||||
#include <vector>
|
||||
#include <stdint.h>
|
||||
#include <cstdint>
|
||||
|
||||
namespace Assimp {
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
/** Importer class for the Quick3D Object and Scene formats.
|
||||
*/
|
||||
class Q3DImporter : public BaseImporter
|
||||
{
|
||||
class Q3DImporter : public BaseImporter {
|
||||
public:
|
||||
Q3DImporter();
|
||||
~Q3DImporter();
|
||||
|
||||
|
||||
public:
|
||||
~Q3DImporter() override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Returns whether the class can handle the format of the given file.
|
||||
* See BaseImporter::CanRead() for details. */
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Return importer meta information.
|
||||
* See #BaseImporter::GetInfo for the details
|
||||
*/
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
const aiImporterDesc* GetInfo () const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Imports the given file into the given scene structure.
|
||||
* See BaseImporter::InternReadFile() for details
|
||||
*/
|
||||
void InternReadFile( const std::string& pFile, aiScene* pScene,
|
||||
IOSystem* pIOHandler);
|
||||
IOSystem* pIOHandler) override;
|
||||
|
||||
private:
|
||||
|
||||
struct Material
|
||||
{
|
||||
Material()
|
||||
: diffuse (0.6f,0.6f,0.6f)
|
||||
, transparency (0.f)
|
||||
, texIdx (UINT_MAX)
|
||||
{}
|
||||
struct Material {
|
||||
Material() : diffuse(0.6f,0.6f,0.6f), transparency(0.f), texIdx(UINT_MAX) {
|
||||
// empty
|
||||
}
|
||||
|
||||
aiString name;
|
||||
aiColor3D ambient, diffuse, specular;
|
||||
float transparency;
|
||||
|
||||
unsigned int texIdx;
|
||||
};
|
||||
|
||||
struct Face
|
||||
{
|
||||
explicit Face(unsigned int s)
|
||||
: indices (s)
|
||||
, uvindices (s)
|
||||
, mat (0)
|
||||
{
|
||||
struct Face {
|
||||
explicit Face(unsigned int s) : indices(s), uvindices(s), mat(0) {
|
||||
// empty
|
||||
}
|
||||
|
||||
std::vector<unsigned int> indices;
|
||||
|
@ -117,14 +102,11 @@ private:
|
|||
unsigned int mat;
|
||||
};
|
||||
|
||||
struct Mesh
|
||||
{
|
||||
|
||||
struct Mesh {
|
||||
std::vector<aiVector3D> verts;
|
||||
std::vector<aiVector3D> normals;
|
||||
std::vector<aiVector3D> uv;
|
||||
std::vector<Face> faces;
|
||||
|
||||
uint32_t prevUVIdx;
|
||||
};
|
||||
};
|
||||
|
|
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
@ -43,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
/** @file RAWLoader.h
|
||||
* @brief Declaration of the RAW importer class.
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef AI_RAWLOADER_H_INCLUDED
|
||||
#define AI_RAWLOADER_H_INCLUDED
|
||||
|
||||
|
@ -50,64 +50,51 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#include <assimp/types.h>
|
||||
#include <vector>
|
||||
|
||||
namespace Assimp {
|
||||
namespace Assimp {
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
/** Importer class for the PovRay RAW triangle format
|
||||
*/
|
||||
class RAWImporter : public BaseImporter
|
||||
{
|
||||
class RAWImporter : public BaseImporter {
|
||||
public:
|
||||
RAWImporter();
|
||||
~RAWImporter();
|
||||
|
||||
|
||||
public:
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Returns whether the class can handle the format of the given file.
|
||||
* See BaseImporter::CanRead() for details.
|
||||
*/
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Return importer meta information.
|
||||
* See #BaseImporter::GetInfo for the details
|
||||
*/
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
const aiImporterDesc* GetInfo () const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Imports the given file into the given scene structure.
|
||||
* See BaseImporter::InternReadFile() for details
|
||||
*/
|
||||
void InternReadFile( const std::string& pFile, aiScene* pScene,
|
||||
IOSystem* pIOHandler);
|
||||
IOSystem* pIOHandler) override;
|
||||
|
||||
private:
|
||||
|
||||
struct MeshInformation
|
||||
{
|
||||
explicit MeshInformation(const std::string& _name)
|
||||
: name(_name)
|
||||
{
|
||||
struct MeshInformation {
|
||||
explicit MeshInformation(const std::string& _name) : name(_name) {
|
||||
vertices.reserve(100);
|
||||
colors.reserve(100);
|
||||
}
|
||||
|
||||
std::string name;
|
||||
|
||||
std::vector<aiVector3D> vertices;
|
||||
std::vector<aiColor4D> colors;
|
||||
};
|
||||
|
||||
struct GroupInformation
|
||||
{
|
||||
explicit GroupInformation(const std::string& _name)
|
||||
: name(_name)
|
||||
{
|
||||
struct GroupInformation {
|
||||
explicit GroupInformation(const std::string& _name) : name(_name) {
|
||||
meshes.reserve(10);
|
||||
}
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
@ -43,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
/** @file SIBImporter.h
|
||||
* @brief Declaration of the SIB importer class.
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef AI_SIBIMPORTER_H_INCLUDED
|
||||
#define AI_SIBIMPORTER_H_INCLUDED
|
||||
|
||||
|
@ -50,60 +50,51 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#include <assimp/types.h>
|
||||
#include <vector>
|
||||
|
||||
namespace Assimp {
|
||||
namespace Assimp {
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
/** Importer class for the Nevercenter Silo SIB scene format
|
||||
*/
|
||||
class ASSIMP_API SIBImporter : public BaseImporter
|
||||
{
|
||||
class ASSIMP_API SIBImporter : public BaseImporter {
|
||||
public:
|
||||
SIBImporter();
|
||||
~SIBImporter();
|
||||
~SIBImporter() override;
|
||||
|
||||
public:
|
||||
// -------------------------------------------------------------------
|
||||
/** Returns whether the class can handle the format of the given file.
|
||||
* See BaseImporter::CanRead() for details.
|
||||
*/
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
// -------------------------------------------------------------------
|
||||
/** Return importer meta information.
|
||||
* See #BaseImporter::GetInfo for the details
|
||||
*/
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
const aiImporterDesc* GetInfo () const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Imports the given file into the given scene structure.
|
||||
* See BaseImporter::InternReadFile() for details
|
||||
*/
|
||||
void InternReadFile( const std::string& pFile, aiScene* pScene,
|
||||
IOSystem* pIOHandler);
|
||||
IOSystem* pIOHandler) override;
|
||||
|
||||
private:
|
||||
struct MeshInformation
|
||||
{
|
||||
explicit MeshInformation(const std::string& _name)
|
||||
: name(_name)
|
||||
{
|
||||
struct MeshInformation {
|
||||
explicit MeshInformation(const std::string& _name) : name(_name) {
|
||||
vertices.reserve(100);
|
||||
colors.reserve(100);
|
||||
}
|
||||
|
||||
std::string name;
|
||||
|
||||
std::vector<aiVector3D> vertices;
|
||||
std::vector<aiColor4D> colors;
|
||||
};
|
||||
|
||||
struct GroupInformation
|
||||
{
|
||||
explicit GroupInformation(const std::string& _name)
|
||||
: name(_name)
|
||||
{
|
||||
struct GroupInformation {
|
||||
explicit GroupInformation(const std::string& _name) : name(_name) {
|
||||
meshes.reserve(10);
|
||||
}
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
@ -44,24 +43,21 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
* @brief Definition of the Valve SMD file format
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#ifndef AI_SMDLOADER_H_INCLUDED
|
||||
#define AI_SMDLOADER_H_INCLUDED
|
||||
|
||||
// internal headers
|
||||
#include <assimp/BaseImporter.h>
|
||||
#include <assimp/ParsingUtils.h>
|
||||
|
||||
// public Assimp headers
|
||||
#include <assimp/types.h>
|
||||
#include <assimp/texture.h>
|
||||
#include <assimp/anim.h>
|
||||
#include <assimp/material.h>
|
||||
|
||||
struct aiNode;
|
||||
|
||||
// STL headers
|
||||
#include <vector>
|
||||
|
||||
struct aiNode;
|
||||
|
||||
namespace Assimp {
|
||||
namespace SMD {
|
||||
|
||||
|
@ -69,8 +65,7 @@ namespace SMD {
|
|||
/** Data structure for a vertex in a SMD file
|
||||
*/
|
||||
struct Vertex {
|
||||
Vertex() AI_NO_EXCEPT
|
||||
: iParentNode(UINT_MAX) {
|
||||
Vertex() AI_NO_EXCEPT : iParentNode(UINT_MAX) {
|
||||
// empty
|
||||
}
|
||||
|
||||
|
@ -91,9 +86,8 @@ struct Vertex {
|
|||
/** Data structure for a face in a SMD file
|
||||
*/
|
||||
struct Face {
|
||||
Face() AI_NO_EXCEPT
|
||||
: iTexture(0x0)
|
||||
, avVertices{} {
|
||||
Face() AI_NO_EXCEPT :
|
||||
iTexture(0x0), avVertices{} {
|
||||
// empty
|
||||
}
|
||||
|
||||
|
@ -109,17 +103,10 @@ struct Face {
|
|||
*/
|
||||
struct Bone {
|
||||
//! Default constructor
|
||||
Bone() AI_NO_EXCEPT
|
||||
: iParent(UINT_MAX)
|
||||
, bIsUsed(false) {
|
||||
Bone() AI_NO_EXCEPT : iParent(UINT_MAX), bIsUsed(false) {
|
||||
// empty
|
||||
}
|
||||
|
||||
//! Destructor
|
||||
~Bone()
|
||||
{
|
||||
}
|
||||
|
||||
//! Name of the bone
|
||||
std::string mName;
|
||||
|
||||
|
@ -129,14 +116,12 @@ struct Bone {
|
|||
//! Animation of the bone
|
||||
struct Animation {
|
||||
//! Public default constructor
|
||||
Animation() AI_NO_EXCEPT
|
||||
: iFirstTimeKey() {
|
||||
Animation() AI_NO_EXCEPT : iFirstTimeKey() {
|
||||
asKeys.reserve(20);
|
||||
}
|
||||
|
||||
//! Data structure for a matrix key
|
||||
struct MatrixKey
|
||||
{
|
||||
struct MatrixKey {
|
||||
//! Matrix at this time
|
||||
aiMatrix4x4 matrix;
|
||||
|
||||
|
@ -174,46 +159,38 @@ struct Bone {
|
|||
// ---------------------------------------------------------------------------
|
||||
/** Used to load Half-life 1 and 2 SMD models
|
||||
*/
|
||||
class ASSIMP_API SMDImporter : public BaseImporter
|
||||
{
|
||||
class ASSIMP_API SMDImporter : public BaseImporter {
|
||||
public:
|
||||
SMDImporter();
|
||||
~SMDImporter();
|
||||
|
||||
|
||||
public:
|
||||
~SMDImporter() override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Returns whether the class can handle the format of the given file.
|
||||
* See BaseImporter::CanRead() for details.
|
||||
*/
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool checkSig) const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Called prior to ReadFile().
|
||||
* The function is a request to the importer to update its configuration
|
||||
* basing on the Importer's configuration property list.
|
||||
*/
|
||||
void SetupProperties(const Importer* pImp);
|
||||
void SetupProperties(const Importer* pImp) override;
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Return importer meta information.
|
||||
* See #BaseImporter::GetInfo for the details
|
||||
*/
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
const aiImporterDesc* GetInfo () const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Imports the given file into the given scene structure.
|
||||
* See BaseImporter::InternReadFile() for details
|
||||
*/
|
||||
void InternReadFile( const std::string& pFile, aiScene* pScene,
|
||||
IOSystem* pIOHandler);
|
||||
|
||||
protected:
|
||||
IOSystem* pIOHandler) override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Parse the SMD file and create the output scene
|
||||
|
@ -405,7 +382,7 @@ private:
|
|||
*/
|
||||
bool bHasUVs;
|
||||
|
||||
/** Current line numer
|
||||
/** Current line number
|
||||
*/
|
||||
unsigned int iLineNumber;
|
||||
|
||||
|
|
|
@ -43,6 +43,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
/** @file STLExporter.h
|
||||
* Declares the exporter class to write a scene to a Stereolithography (STL) file
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef AI_STLEXPORTER_H_INC
|
||||
#define AI_STLEXPORTER_H_INC
|
||||
|
||||
|
@ -57,28 +58,24 @@ namespace Assimp {
|
|||
// ------------------------------------------------------------------------------------------------
|
||||
/** Helper class to export a given scene to a STL file. */
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
class STLExporter
|
||||
{
|
||||
class STLExporter {
|
||||
public:
|
||||
/// Constructor for a specific scene to export
|
||||
STLExporter(const char* filename, const aiScene* pScene, bool exportPOintClouds, bool binary = false);
|
||||
STLExporter(const char *filename, const aiScene *pScene, bool exportPOintClouds, bool binary = false);
|
||||
|
||||
/// public stringstreams to write all output into
|
||||
/// public string-streams to write all output into
|
||||
std::ostringstream mOutput;
|
||||
|
||||
private:
|
||||
void WritePointCloud(const std::string &name, const aiScene* pScene);
|
||||
void WriteMesh(const aiMesh* m);
|
||||
void WriteMeshBinary(const aiMesh* m);
|
||||
void WritePointCloud(const std::string &name, const aiScene *pScene);
|
||||
void WriteMesh(const aiMesh *m);
|
||||
void WriteMeshBinary(const aiMesh *m);
|
||||
|
||||
private:
|
||||
|
||||
const std::string filename;
|
||||
|
||||
// this endl() doesn't flush() the stream
|
||||
const std::string endl;
|
||||
};
|
||||
|
||||
}
|
||||
} // namespace Assimp
|
||||
|
||||
#endif
|
||||
|
|
|
@ -43,7 +43,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
#ifndef ASSIMP_BUILD_NO_STL_IMPORTER
|
||||
|
||||
// internal headers
|
||||
#include "STLLoader.h"
|
||||
#include <assimp/ParsingUtils.h>
|
||||
#include <assimp/fast_atof.h>
|
||||
|
@ -146,7 +145,9 @@ bool STLImporter::CanRead(const std::string &pFile, IOSystem *pIOHandler, bool c
|
|||
|
||||
if (extension == "stl") {
|
||||
return true;
|
||||
} else if (!extension.length() || checkSig) {
|
||||
}
|
||||
|
||||
if (!extension.length() || checkSig) {
|
||||
if (!pIOHandler) {
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -53,7 +53,6 @@ struct aiNode;
|
|||
|
||||
namespace Assimp {
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief Importer class for the sterolithography STL file format.
|
||||
|
@ -68,13 +67,13 @@ public:
|
|||
/**
|
||||
* @brief The class destructor.
|
||||
*/
|
||||
~STLImporter();
|
||||
~STLImporter() override;
|
||||
|
||||
/**
|
||||
* @brief Returns whether the class can handle the format of the given file.
|
||||
* See BaseImporter::CanRead() for details.
|
||||
*/
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const;
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
|
||||
|
@ -82,14 +81,14 @@ protected:
|
|||
* @brief Return importer meta information.
|
||||
* See #BaseImporter::GetInfo for the details
|
||||
*/
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
const aiImporterDesc* GetInfo () const override;
|
||||
|
||||
/**
|
||||
* @brief Imports the given file into the given scene structure.
|
||||
* See BaseImporter::InternReadFile() for details
|
||||
*/
|
||||
void InternReadFile( const std::string& pFile, aiScene* pScene,
|
||||
IOSystem* pIOHandler);
|
||||
IOSystem* pIOHandler) override;
|
||||
|
||||
/**
|
||||
* @brief Loads a binary .stl file
|
||||
|
|
|
@ -69,11 +69,15 @@ static const aiImporterDesc desc = {
|
|||
// ------------------------------------------------------------------------------------------------
|
||||
// Constructor to be privately used by Importer
|
||||
TerragenImporter::TerragenImporter() :
|
||||
configComputeUVs(false) {}
|
||||
configComputeUVs(false) {
|
||||
// empty
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// Destructor, private as well
|
||||
TerragenImporter::~TerragenImporter() {}
|
||||
TerragenImporter::~TerragenImporter() {
|
||||
// empty
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// Returns whether the class can handle the format of the given file.
|
||||
|
|
|
@ -42,10 +42,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
/** @file TerragenLoader.h
|
||||
* @brief Declaration of the .ter importer class.
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef INCLUDED_AI_TERRAGEN_TERRAIN_LOADER_H
|
||||
#define INCLUDED_AI_TERRAGEN_TERRAIN_LOADER_H
|
||||
|
||||
#include <assimp/BaseImporter.h>
|
||||
|
||||
namespace Assimp {
|
||||
|
||||
// Magic strings
|
||||
|
@ -71,23 +73,22 @@ namespace Assimp {
|
|||
class TerragenImporter : public BaseImporter {
|
||||
public:
|
||||
TerragenImporter();
|
||||
~TerragenImporter();
|
||||
~TerragenImporter() override;
|
||||
|
||||
public:
|
||||
// -------------------------------------------------------------------
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
// -------------------------------------------------------------------
|
||||
const aiImporterDesc *GetInfo() const;
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene,
|
||||
IOSystem *pIOHandler);
|
||||
IOSystem *pIOHandler) override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
void SetupProperties(const Importer *pImp);
|
||||
void SetupProperties(const Importer *pImp) override;
|
||||
|
||||
private:
|
||||
bool configComputeUVs;
|
||||
|
|
|
@ -60,7 +60,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#include <assimp/IOSystem.hpp>
|
||||
#include <assimp/Importer.hpp>
|
||||
|
||||
#include <stdint.h>
|
||||
#include <cstdint>
|
||||
#include <memory>
|
||||
|
||||
using namespace Assimp;
|
||||
|
|
|
@ -50,8 +50,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
namespace Assimp {
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
/** @brief Importer class to load UNREAL files (*.3d)
|
||||
*/
|
||||
/**
|
||||
* @brief Importer class to load UNREAL files (*.3d)
|
||||
*/
|
||||
class UnrealImporter : public BaseImporter {
|
||||
public:
|
||||
UnrealImporter();
|
||||
|
@ -62,23 +63,22 @@ public:
|
|||
*
|
||||
* See BaseImporter::CanRead() for details.
|
||||
**/
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
// -------------------------------------------------------------------
|
||||
/** @brief Called by Importer::GetExtensionList()
|
||||
*
|
||||
* See #BaseImporter::GetInfo for the details
|
||||
* @see #BaseImporter::GetInfo for the details
|
||||
*/
|
||||
const aiImporterDesc *GetInfo() const;
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** @brief Setup properties for the importer
|
||||
*
|
||||
* See BaseImporter::SetupProperties() for details
|
||||
*/
|
||||
void SetupProperties(const Importer *pImp);
|
||||
void SetupProperties(const Importer *pImp) override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** @brief Imports the given file into the given scene structure.
|
||||
|
@ -86,7 +86,7 @@ protected:
|
|||
* See BaseImporter::InternReadFile() for details
|
||||
*/
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene,
|
||||
IOSystem *pIOHandler);
|
||||
IOSystem *pIOHandler) override;
|
||||
|
||||
private:
|
||||
//! frame to be loaded
|
||||
|
|
|
@ -40,20 +40,18 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
/** @file Defines the helper data structures for importing XFiles */
|
||||
#ifndef AI_XFILEHELPER_H_INC
|
||||
#define AI_XFILEHELPER_H_INC
|
||||
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <stdint.h>
|
||||
|
||||
#include <assimp/types.h>
|
||||
#include <assimp/quaternion.h>
|
||||
#include <assimp/mesh.h>
|
||||
#include <assimp/anim.h>
|
||||
#include <assimp/Defines.h>
|
||||
#include <assimp/mesh.h>
|
||||
#include <assimp/quaternion.h>
|
||||
#include <assimp/types.h>
|
||||
|
||||
namespace Assimp {
|
||||
namespace XFile {
|
||||
|
@ -68,14 +66,13 @@ struct TexEntry {
|
|||
std::string mName;
|
||||
bool mIsNormalMap; // true if the texname was specified in a NormalmapFilename tag
|
||||
|
||||
TexEntry() AI_NO_EXCEPT
|
||||
: mName()
|
||||
, mIsNormalMap(false) {
|
||||
TexEntry() AI_NO_EXCEPT :
|
||||
mName(),
|
||||
mIsNormalMap(false) {
|
||||
// empty
|
||||
}
|
||||
TexEntry(const std::string& pName, bool pIsNormalMap = false)
|
||||
: mName(pName)
|
||||
, mIsNormalMap(pIsNormalMap) {
|
||||
TexEntry(const std::string &pName, bool pIsNormalMap = false) :
|
||||
mName(pName), mIsNormalMap(pIsNormalMap) {
|
||||
// empty
|
||||
}
|
||||
};
|
||||
|
@ -91,10 +88,10 @@ struct Material {
|
|||
std::vector<TexEntry> mTextures;
|
||||
size_t sceneIndex; ///< the index under which it was stored in the scene's material list
|
||||
|
||||
Material() AI_NO_EXCEPT
|
||||
: mIsReference(false)
|
||||
, mSpecularExponent()
|
||||
, sceneIndex(SIZE_MAX) {
|
||||
Material() AI_NO_EXCEPT :
|
||||
mIsReference(false),
|
||||
mSpecularExponent(),
|
||||
sceneIndex(SIZE_MAX) {
|
||||
// empty
|
||||
}
|
||||
};
|
||||
|
@ -106,8 +103,7 @@ struct BoneWeight {
|
|||
};
|
||||
|
||||
/** Helper structure to represent a bone in a mesh */
|
||||
struct Bone
|
||||
{
|
||||
struct Bone {
|
||||
std::string mName;
|
||||
std::vector<BoneWeight> mWeights;
|
||||
aiMatrix4x4 mOffsetMatrix;
|
||||
|
@ -131,18 +127,18 @@ struct Mesh {
|
|||
std::vector<Bone> mBones;
|
||||
|
||||
explicit Mesh(const std::string &pName = std::string()) AI_NO_EXCEPT
|
||||
: mName( pName )
|
||||
, mPositions()
|
||||
, mPosFaces()
|
||||
, mNormals()
|
||||
, mNormFaces()
|
||||
, mNumTextures(0)
|
||||
, mTexCoords{}
|
||||
, mNumColorSets(0)
|
||||
, mColors{}
|
||||
, mFaceMaterials()
|
||||
, mMaterials()
|
||||
, mBones() {
|
||||
: mName(pName),
|
||||
mPositions(),
|
||||
mPosFaces(),
|
||||
mNormals(),
|
||||
mNormFaces(),
|
||||
mNumTextures(0),
|
||||
mTexCoords{},
|
||||
mNumColorSets(0),
|
||||
mColors{},
|
||||
mFaceMaterials(),
|
||||
mMaterials(),
|
||||
mBones() {
|
||||
// empty
|
||||
}
|
||||
};
|
||||
|
@ -151,29 +147,25 @@ struct Mesh {
|
|||
struct Node {
|
||||
std::string mName;
|
||||
aiMatrix4x4 mTrafoMatrix;
|
||||
Node* mParent;
|
||||
std::vector<Node*> mChildren;
|
||||
std::vector<Mesh*> mMeshes;
|
||||
Node *mParent;
|
||||
std::vector<Node *> mChildren;
|
||||
std::vector<Mesh *> mMeshes;
|
||||
|
||||
Node() AI_NO_EXCEPT
|
||||
: mName()
|
||||
, mTrafoMatrix()
|
||||
, mParent(nullptr)
|
||||
, mChildren()
|
||||
, mMeshes() {
|
||||
: mName(),
|
||||
mTrafoMatrix(),
|
||||
mParent(nullptr),
|
||||
mChildren(),
|
||||
mMeshes() {
|
||||
// empty
|
||||
}
|
||||
explicit Node( Node* pParent)
|
||||
: mName()
|
||||
, mTrafoMatrix()
|
||||
, mParent(pParent)
|
||||
, mChildren()
|
||||
, mMeshes() {
|
||||
explicit Node(Node *pParent) :
|
||||
mName(), mTrafoMatrix(), mParent(pParent), mChildren(), mMeshes() {
|
||||
// empty
|
||||
}
|
||||
|
||||
~Node() {
|
||||
for (unsigned int a = 0; a < mChildren.size(); ++a ) {
|
||||
for (unsigned int a = 0; a < mChildren.size(); ++a) {
|
||||
delete mChildren[a];
|
||||
}
|
||||
for (unsigned int a = 0; a < mMeshes.size(); ++a) {
|
||||
|
@ -190,50 +182,47 @@ struct MatrixKey {
|
|||
/** Helper structure representing a single animated bone in a XFile */
|
||||
struct AnimBone {
|
||||
std::string mBoneName;
|
||||
std::vector<aiVectorKey> mPosKeys; // either three separate key sequences for position, rotation, scaling
|
||||
std::vector<aiVectorKey> mPosKeys; // either three separate key sequences for position, rotation, scaling
|
||||
std::vector<aiQuatKey> mRotKeys;
|
||||
std::vector<aiVectorKey> mScaleKeys;
|
||||
std::vector<MatrixKey> mTrafoKeys; // or a combined key sequence of transformation matrices.
|
||||
};
|
||||
|
||||
/** Helper structure to represent an animation set in a XFile */
|
||||
struct Animation
|
||||
{
|
||||
struct Animation {
|
||||
std::string mName;
|
||||
std::vector<AnimBone*> mAnims;
|
||||
std::vector<AnimBone *> mAnims;
|
||||
|
||||
~Animation()
|
||||
{
|
||||
for( unsigned int a = 0; a < mAnims.size(); a++)
|
||||
~Animation() {
|
||||
for (unsigned int a = 0; a < mAnims.size(); a++)
|
||||
delete mAnims[a];
|
||||
}
|
||||
};
|
||||
|
||||
/** Helper structure analogue to aiScene */
|
||||
struct Scene
|
||||
{
|
||||
Node* mRootNode;
|
||||
struct Scene {
|
||||
Node *mRootNode;
|
||||
|
||||
std::vector<Mesh*> mGlobalMeshes; // global meshes found outside of any frames
|
||||
std::vector<Mesh *> mGlobalMeshes; // global meshes found outside of any frames
|
||||
std::vector<Material> mGlobalMaterials; // global materials found outside of any meshes.
|
||||
|
||||
std::vector<Animation*> mAnims;
|
||||
std::vector<Animation *> mAnims;
|
||||
unsigned int mAnimTicksPerSecond;
|
||||
|
||||
Scene() AI_NO_EXCEPT
|
||||
: mRootNode(nullptr)
|
||||
, mGlobalMeshes()
|
||||
, mGlobalMaterials()
|
||||
, mAnimTicksPerSecond(0) {
|
||||
: mRootNode(nullptr),
|
||||
mGlobalMeshes(),
|
||||
mGlobalMaterials(),
|
||||
mAnimTicksPerSecond(0) {
|
||||
// empty
|
||||
}
|
||||
~Scene() {
|
||||
delete mRootNode;
|
||||
mRootNode = nullptr;
|
||||
for (unsigned int a = 0; a < mGlobalMeshes.size(); ++a ) {
|
||||
for (unsigned int a = 0; a < mGlobalMeshes.size(); ++a) {
|
||||
delete mGlobalMeshes[a];
|
||||
}
|
||||
for (unsigned int a = 0; a < mAnims.size(); ++a ) {
|
||||
for (unsigned int a = 0; a < mAnims.size(); ++a) {
|
||||
delete mAnims[a];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,7 +49,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#include "PostProcessing/ConvertToLHProcess.h"
|
||||
|
||||
#include <assimp/TinyFormatter.h>
|
||||
#include <assimp/Defines.h>
|
||||
#include <assimp/IOSystem.hpp>
|
||||
#include <assimp/scene.h>
|
||||
#include <assimp/DefaultLogger.hpp>
|
||||
|
|
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
@ -43,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
/** @file XFileImporter.h
|
||||
* @brief Definition of the XFile importer class.
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef AI_XFILEIMPORTER_H_INC
|
||||
#define AI_XFILEIMPORTER_H_INC
|
||||
|
||||
|
@ -69,28 +69,27 @@ namespace XFile {
|
|||
class XFileImporter : public BaseImporter {
|
||||
public:
|
||||
XFileImporter();
|
||||
~XFileImporter();
|
||||
~XFileImporter() override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Returns whether the class can handle the format of the given file.
|
||||
* See BaseImporter::CanRead() for details. */
|
||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
|
||||
bool CheckSig) const;
|
||||
bool CheckSig) const override;
|
||||
|
||||
protected:
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Return importer meta information.
|
||||
* See #BaseImporter::GetInfo for the details
|
||||
*/
|
||||
const aiImporterDesc* GetInfo () const;
|
||||
const aiImporterDesc* GetInfo () const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Imports the given file into the given scene structure.
|
||||
* See BaseImporter::InternReadFile() for details
|
||||
*/
|
||||
void InternReadFile( const std::string& pFile, aiScene* pScene,
|
||||
IOSystem* pIOHandler);
|
||||
IOSystem* pIOHandler) override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Constructs the return data structure out of the imported data.
|
||||
|
@ -140,7 +139,7 @@ protected:
|
|||
void ConvertMaterials( aiScene* pScene, std::vector<XFile::Material>& pMaterials);
|
||||
|
||||
protected:
|
||||
/** Buffer to hold the loaded file */
|
||||
/// Buffer to hold the loaded file
|
||||
std::vector<char> mBuffer;
|
||||
};
|
||||
|
||||
|
|
|
@ -115,13 +115,15 @@ bool XGLImporter::CanRead(const std::string &pFile, IOSystem *pIOHandler, bool c
|
|||
|
||||
if (extension == "xgl" || extension == "zgl") {
|
||||
return true;
|
||||
} else if (extension == "xml" || checkSig) {
|
||||
ai_assert(pIOHandler != NULL);
|
||||
}
|
||||
|
||||
if (extension == "xml" || checkSig) {
|
||||
ai_assert(pIOHandler != nullptr);
|
||||
const char *tokens[] = { "<world>", "<World>", "<WORLD>" };
|
||||
return SearchFileHeaderForToken(pIOHandler, pFile, tokens, 3);
|
||||
}
|
||||
return false;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
|
@ -454,12 +456,12 @@ aiMesh *XGLImporter::ToOutputMesh(const TempMaterialMesh &m) {
|
|||
mesh->mVertices = new aiVector3D[mesh->mNumVertices];
|
||||
std::copy(m.positions.begin(), m.positions.end(), mesh->mVertices);
|
||||
|
||||
if (m.normals.size()) {
|
||||
if (!m.normals.empty()) {
|
||||
mesh->mNormals = new aiVector3D[mesh->mNumVertices];
|
||||
std::copy(m.normals.begin(), m.normals.end(), mesh->mNormals);
|
||||
}
|
||||
|
||||
if (m.uvs.size()) {
|
||||
if (!m.uvs.empty()) {
|
||||
mesh->mNumUVComponents[0] = 2;
|
||||
mesh->mTextureCoords[0] = new aiVector3D[mesh->mNumVertices];
|
||||
|
||||
|
@ -595,7 +597,7 @@ bool XGLImporter::ReadMesh(XmlNode &node, TempScope &scope) {
|
|||
}
|
||||
|
||||
// finally extract output meshes and add them to the scope
|
||||
typedef std::pair<const unsigned int, TempMaterialMesh> pairt;
|
||||
using pairt = std::pair<const unsigned int, TempMaterialMesh>;
|
||||
for (const pairt &p : bymat) {
|
||||
aiMesh *const m = ToOutputMesh(p.second);
|
||||
scope.meshes_linear.push_back(m);
|
||||
|
@ -620,7 +622,7 @@ unsigned int XGLImporter::ResolveMaterialRef(XmlNode &node, TempScope &scope) {
|
|||
|
||||
const int id = ReadIndexFromText(node);
|
||||
|
||||
std::map<unsigned int, aiMaterial *>::iterator it = scope.materials.find(id), end = scope.materials.end();
|
||||
auto it = scope.materials.find(id), end = scope.materials.end();
|
||||
if (it == end) {
|
||||
ThrowException("<matref> index out of range");
|
||||
}
|
||||
|
@ -644,7 +646,7 @@ unsigned int XGLImporter::ResolveMaterialRef(XmlNode &node, TempScope &scope) {
|
|||
void XGLImporter::ReadMaterial(XmlNode &node, TempScope &scope) {
|
||||
const unsigned int mat_id = ReadIDAttr(node);
|
||||
|
||||
aiMaterial *mat(new aiMaterial);
|
||||
auto *mat(new aiMaterial);
|
||||
for (XmlNode &child : node.children()) {
|
||||
const std::string &s = ai_stdStrToLower(child.name());
|
||||
if (s == "amb") {
|
||||
|
|
|
@ -70,25 +70,25 @@ namespace Assimp {
|
|||
class XGLImporter : public BaseImporter, public LogFunctions<XGLImporter> {
|
||||
public:
|
||||
XGLImporter();
|
||||
~XGLImporter();
|
||||
~XGLImporter() override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Returns whether the class can handle the format of the given file.
|
||||
* See BaseImporter::CanRead() for details. */
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
|
||||
bool checkSig) const;
|
||||
bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
// -------------------------------------------------------------------
|
||||
/** Return importer meta information.
|
||||
* See #BaseImporter::GetInfo for the details */
|
||||
const aiImporterDesc *GetInfo() const;
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Imports the given file into the given scene structure.
|
||||
* See BaseImporter::InternReadFile() for details */
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene,
|
||||
IOSystem *pIOHandler);
|
||||
IOSystem *pIOHandler) override;
|
||||
|
||||
private:
|
||||
struct TempScope {
|
||||
|
|
|
@ -101,8 +101,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
#include "AssetLib/glTF/glTFCommon.h"
|
||||
|
||||
namespace glTF
|
||||
{
|
||||
namespace glTF {
|
||||
using glTFCommon::shared_ptr;
|
||||
using glTFCommon::IOSystem;
|
||||
using glTFCommon::IOStream;
|
||||
|
@ -131,8 +130,7 @@ namespace glTF
|
|||
|
||||
//! For the KHR_binary_glTF extension (binary .glb file)
|
||||
//! 20-byte header (+ the JSON + a "body" data section)
|
||||
struct GLB_Header
|
||||
{
|
||||
struct GLB_Header {
|
||||
uint8_t magic[4]; //!< Magic number: "glTF"
|
||||
uint32_t version; //!< Version number (always 1 as of the last update)
|
||||
uint32_t length; //!< Total length of the Binary glTF, including header, scene, and body, in bytes
|
||||
|
@ -146,14 +144,12 @@ namespace glTF
|
|||
|
||||
|
||||
//! Values for the GLB_Header::sceneFormat field
|
||||
enum SceneFormat
|
||||
{
|
||||
enum SceneFormat {
|
||||
SceneFormat_JSON = 0
|
||||
};
|
||||
|
||||
//! Values for the mesh primitive modes
|
||||
enum PrimitiveMode
|
||||
{
|
||||
enum PrimitiveMode {
|
||||
PrimitiveMode_POINTS = 0,
|
||||
PrimitiveMode_LINES = 1,
|
||||
PrimitiveMode_LINE_LOOP = 2,
|
||||
|
@ -164,8 +160,7 @@ namespace glTF
|
|||
};
|
||||
|
||||
//! Values for the Accessor::componentType field
|
||||
enum ComponentType
|
||||
{
|
||||
enum ComponentType {
|
||||
ComponentType_BYTE = 5120,
|
||||
ComponentType_UNSIGNED_BYTE = 5121,
|
||||
ComponentType_SHORT = 5122,
|
||||
|
@ -174,8 +169,7 @@ namespace glTF
|
|||
ComponentType_FLOAT = 5126
|
||||
};
|
||||
|
||||
inline unsigned int ComponentTypeSize(ComponentType t)
|
||||
{
|
||||
inline unsigned int ComponentTypeSize(ComponentType t) {
|
||||
switch (t) {
|
||||
case ComponentType_SHORT:
|
||||
case ComponentType_UNSIGNED_SHORT:
|
||||
|
@ -196,23 +190,20 @@ namespace glTF
|
|||
}
|
||||
|
||||
//! Values for the BufferView::target field
|
||||
enum BufferViewTarget
|
||||
{
|
||||
enum BufferViewTarget {
|
||||
BufferViewTarget_NONE = 0,
|
||||
BufferViewTarget_ARRAY_BUFFER = 34962,
|
||||
BufferViewTarget_ELEMENT_ARRAY_BUFFER = 34963
|
||||
};
|
||||
|
||||
//! Values for the Sampler::magFilter field
|
||||
enum SamplerMagFilter
|
||||
{
|
||||
enum SamplerMagFilter {
|
||||
SamplerMagFilter_Nearest = 9728,
|
||||
SamplerMagFilter_Linear = 9729
|
||||
};
|
||||
|
||||
//! Values for the Sampler::minFilter field
|
||||
enum SamplerMinFilter
|
||||
{
|
||||
enum SamplerMinFilter {
|
||||
SamplerMinFilter_Nearest = 9728,
|
||||
SamplerMinFilter_Linear = 9729,
|
||||
SamplerMinFilter_Nearest_Mipmap_Nearest = 9984,
|
||||
|
@ -222,8 +213,7 @@ namespace glTF
|
|||
};
|
||||
|
||||
//! Values for the Sampler::wrapS and Sampler::wrapT field
|
||||
enum SamplerWrap
|
||||
{
|
||||
enum SamplerWrap {
|
||||
SamplerWrap_Clamp_To_Edge = 33071,
|
||||
SamplerWrap_Mirrored_Repeat = 33648,
|
||||
SamplerWrap_Repeat = 10497
|
||||
|
|
|
@ -39,6 +39,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
----------------------------------------------------------------------
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef AI_GLTFIMPORTER_H_INC
|
||||
#define AI_GLTFIMPORTER_H_INC
|
||||
|
||||
|
@ -47,10 +48,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
struct aiNode;
|
||||
|
||||
namespace glTF {
|
||||
class Asset;
|
||||
|
||||
namespace glTF
|
||||
{
|
||||
class Asset;
|
||||
}
|
||||
|
||||
namespace Assimp {
|
||||
|
@ -59,34 +59,31 @@ namespace Assimp {
|
|||
* Load the glTF format.
|
||||
* https://github.com/KhronosGroup/glTF/tree/master/specification
|
||||
*/
|
||||
class glTFImporter : public BaseImporter{
|
||||
class glTFImporter : public BaseImporter {
|
||||
public:
|
||||
glTFImporter();
|
||||
virtual ~glTFImporter();
|
||||
virtual bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig ) const;
|
||||
~glTFImporter() override;
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
virtual const aiImporterDesc* GetInfo() const;
|
||||
virtual void InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler );
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) override;
|
||||
|
||||
private:
|
||||
void ImportEmbeddedTextures(glTF::Asset &a);
|
||||
void ImportMaterials(glTF::Asset &a);
|
||||
void ImportMeshes(glTF::Asset &a);
|
||||
void ImportCameras(glTF::Asset &a);
|
||||
void ImportLights(glTF::Asset &a);
|
||||
void ImportNodes(glTF::Asset &a);
|
||||
void ImportCommonMetadata(glTF::Asset &a);
|
||||
|
||||
private:
|
||||
std::vector<unsigned int> meshOffsets;
|
||||
|
||||
std::vector<int> embeddedTexIdxs;
|
||||
|
||||
aiScene* mScene;
|
||||
|
||||
void ImportEmbeddedTextures(glTF::Asset& a);
|
||||
void ImportMaterials(glTF::Asset& a);
|
||||
void ImportMeshes(glTF::Asset& a);
|
||||
void ImportCameras(glTF::Asset& a);
|
||||
void ImportLights(glTF::Asset& a);
|
||||
void ImportNodes(glTF::Asset& a);
|
||||
void ImportCommonMetadata(glTF::Asset& a);
|
||||
aiScene *mScene;
|
||||
};
|
||||
|
||||
} // Namespace assimp
|
||||
} // namespace Assimp
|
||||
|
||||
#endif // AI_GLTFIMPORTER_H_INC
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -141,19 +141,23 @@ static aiTextureMapMode ConvertWrappingMode(SamplerWrap gltfWrapMode) {
|
|||
}
|
||||
}
|
||||
|
||||
inline void SetMaterialColorProperty(Asset & /*r*/, vec4 &prop, aiMaterial *mat, const char *pKey, unsigned int type, unsigned int idx) {
|
||||
inline void SetMaterialColorProperty(Asset & /*r*/, vec4 &prop, aiMaterial *mat,
|
||||
const char *pKey, unsigned int type, unsigned int idx) {
|
||||
aiColor4D col;
|
||||
CopyValue(prop, col);
|
||||
mat->AddProperty(&col, 1, pKey, type, idx);
|
||||
}
|
||||
|
||||
inline void SetMaterialColorProperty(Asset & /*r*/, vec3 &prop, aiMaterial *mat, const char *pKey, unsigned int type, unsigned int idx) {
|
||||
inline void SetMaterialColorProperty(Asset & /*r*/, vec3 &prop, aiMaterial *mat,
|
||||
const char *pKey, unsigned int type, unsigned int idx) {
|
||||
aiColor4D col;
|
||||
glTFCommon::CopyValue(prop, col);
|
||||
mat->AddProperty(&col, 1, pKey, type, idx);
|
||||
}
|
||||
|
||||
inline void SetMaterialTextureProperty(std::vector<int> &embeddedTexIdxs, Asset & /*r*/, glTF2::TextureInfo prop, aiMaterial *mat, aiTextureType texType, unsigned int texSlot = 0) {
|
||||
inline void SetMaterialTextureProperty(std::vector<int> &embeddedTexIdxs, Asset & /*r*/,
|
||||
glTF2::TextureInfo prop, aiMaterial *mat, aiTextureType texType,
|
||||
unsigned int texSlot = 0) {
|
||||
if (prop.texture && prop.texture->source) {
|
||||
aiString uri(prop.texture->source->uri);
|
||||
|
||||
|
@ -218,7 +222,9 @@ inline void SetMaterialTextureProperty(std::vector<int> &embeddedTexIdxs, Asset
|
|||
}
|
||||
}
|
||||
|
||||
inline void SetMaterialTextureProperty(std::vector<int> &embeddedTexIdxs, Asset &r, glTF2::NormalTextureInfo &prop, aiMaterial *mat, aiTextureType texType, unsigned int texSlot = 0) {
|
||||
inline void SetMaterialTextureProperty(std::vector<int> &embeddedTexIdxs, Asset &r,
|
||||
NormalTextureInfo &prop, aiMaterial *mat, aiTextureType texType,
|
||||
unsigned int texSlot = 0) {
|
||||
SetMaterialTextureProperty(embeddedTexIdxs, r, (glTF2::TextureInfo)prop, mat, texType, texSlot);
|
||||
|
||||
if (prop.texture && prop.texture->source) {
|
||||
|
@ -226,7 +232,9 @@ inline void SetMaterialTextureProperty(std::vector<int> &embeddedTexIdxs, Asset
|
|||
}
|
||||
}
|
||||
|
||||
inline void SetMaterialTextureProperty(std::vector<int> &embeddedTexIdxs, Asset &r, glTF2::OcclusionTextureInfo &prop, aiMaterial *mat, aiTextureType texType, unsigned int texSlot = 0) {
|
||||
inline void SetMaterialTextureProperty(std::vector<int> &embeddedTexIdxs, Asset &r,
|
||||
OcclusionTextureInfo &prop, aiMaterial *mat, aiTextureType texType,
|
||||
unsigned int texSlot = 0) {
|
||||
SetMaterialTextureProperty(embeddedTexIdxs, r, (glTF2::TextureInfo)prop, mat, texType, texSlot);
|
||||
|
||||
if (prop.texture && prop.texture->source) {
|
||||
|
@ -338,7 +346,7 @@ static aiMaterial *ImportMaterial(std::vector<int> &embeddedTexIdxs, Asset &r, M
|
|||
}
|
||||
}
|
||||
|
||||
void glTF2Importer::ImportMaterials(glTF2::Asset &r) {
|
||||
void glTF2Importer::ImportMaterials(Asset &r) {
|
||||
const unsigned int numImportedMaterials = unsigned(r.materials.Size());
|
||||
ASSIMP_LOG_DEBUG("Importing ", numImportedMaterials, " materials");
|
||||
Material defaultMaterial;
|
||||
|
@ -363,7 +371,8 @@ static inline void SetFaceAndAdvance1(aiFace*& face, unsigned int numVertices, u
|
|||
++face;
|
||||
}
|
||||
|
||||
static inline void SetFaceAndAdvance2(aiFace*& face, unsigned int numVertices, unsigned int a, unsigned int b) {
|
||||
static inline void SetFaceAndAdvance2(aiFace*& face, unsigned int numVertices,
|
||||
unsigned int a, unsigned int b) {
|
||||
if ((a >= numVertices) || (b >= numVertices)) {
|
||||
return;
|
||||
}
|
||||
|
@ -374,7 +383,8 @@ static inline void SetFaceAndAdvance2(aiFace*& face, unsigned int numVertices, u
|
|||
++face;
|
||||
}
|
||||
|
||||
static inline void SetFaceAndAdvance3(aiFace*& face, unsigned int numVertices, unsigned int a, unsigned int b, unsigned int c) {
|
||||
static inline void SetFaceAndAdvance3(aiFace*& face, unsigned int numVertices, unsigned int a,
|
||||
unsigned int b, unsigned int c) {
|
||||
if ((a >= numVertices) || (b >= numVertices) || (c >= numVertices)) {
|
||||
return;
|
||||
}
|
||||
|
@ -401,8 +411,8 @@ static inline bool CheckValidFacesIndices(aiFace *faces, unsigned nFaces, unsign
|
|||
#endif // ASSIMP_BUILD_DEBUG
|
||||
|
||||
template<typename T>
|
||||
aiColor4D* GetVertexColorsForType(glTF2::Ref<glTF2::Accessor> input) {
|
||||
float max = std::numeric_limits<T>::max();
|
||||
aiColor4D* GetVertexColorsForType(Ref<Accessor> input) {
|
||||
constexpr float max = std::numeric_limits<T>::max();
|
||||
aiColor4t<T>* colors;
|
||||
input->ExtractData(colors);
|
||||
auto output = new aiColor4D[input->count];
|
||||
|
@ -463,19 +473,19 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) {
|
|||
|
||||
Mesh::Primitive::Attributes &attr = prim.attributes;
|
||||
|
||||
if (attr.position.size() > 0 && attr.position[0]) {
|
||||
if (!attr.position.empty() && attr.position[0]) {
|
||||
aim->mNumVertices = static_cast<unsigned int>(attr.position[0]->count);
|
||||
attr.position[0]->ExtractData(aim->mVertices);
|
||||
}
|
||||
|
||||
if (attr.normal.size() > 0 && attr.normal[0]) {
|
||||
if (!attr.normal.empty() && attr.normal[0]) {
|
||||
if (attr.normal[0]->count != aim->mNumVertices) {
|
||||
DefaultLogger::get()->warn("Normal count in mesh \"", mesh.name, "\" does not match the vertex count, normals ignored.");
|
||||
} else {
|
||||
attr.normal[0]->ExtractData(aim->mNormals);
|
||||
|
||||
// only extract tangents if normals are present
|
||||
if (attr.tangent.size() > 0 && attr.tangent[0]) {
|
||||
if (!attr.tangent.empty() && attr.tangent[0]) {
|
||||
if (attr.tangent[0]->count != aim->mNumVertices) {
|
||||
DefaultLogger::get()->warn("Tangent count in mesh \"", mesh.name, "\" does not match the vertex count, tangents ignored.");
|
||||
} else {
|
||||
|
@ -538,7 +548,7 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) {
|
|||
}
|
||||
|
||||
std::vector<Mesh::Primitive::Target> &targets = prim.targets;
|
||||
if (targets.size() > 0) {
|
||||
if (!targets.empty()) {
|
||||
aim->mNumAnimMeshes = (unsigned int)targets.size();
|
||||
aim->mAnimMeshes = new aiAnimMesh *[aim->mNumAnimMeshes];
|
||||
std::fill(aim->mAnimMeshes, aim->mAnimMeshes + aim->mNumAnimMeshes, nullptr);
|
||||
|
@ -797,7 +807,9 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) {
|
|||
}
|
||||
|
||||
void glTF2Importer::ImportCameras(glTF2::Asset &r) {
|
||||
if (!r.cameras.Size()) return;
|
||||
if (!r.cameras.Size()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const unsigned int numCameras = r.cameras.Size();
|
||||
ASSIMP_LOG_DEBUG("Importing ", numCameras, " cameras");
|
||||
|
@ -897,28 +909,29 @@ void glTF2Importer::ImportLights(glTF2::Asset &r) {
|
|||
static void GetNodeTransform(aiMatrix4x4 &matrix, const glTF2::Node &node) {
|
||||
if (node.matrix.isPresent) {
|
||||
CopyValue(node.matrix.value, matrix);
|
||||
} else {
|
||||
if (node.translation.isPresent) {
|
||||
aiVector3D trans;
|
||||
CopyValue(node.translation.value, trans);
|
||||
aiMatrix4x4 t;
|
||||
aiMatrix4x4::Translation(trans, t);
|
||||
matrix = matrix * t;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (node.rotation.isPresent) {
|
||||
aiQuaternion rot;
|
||||
CopyValue(node.rotation.value, rot);
|
||||
matrix = matrix * aiMatrix4x4(rot.GetMatrix());
|
||||
}
|
||||
if (node.translation.isPresent) {
|
||||
aiVector3D trans;
|
||||
CopyValue(node.translation.value, trans);
|
||||
aiMatrix4x4 t;
|
||||
aiMatrix4x4::Translation(trans, t);
|
||||
matrix = matrix * t;
|
||||
}
|
||||
|
||||
if (node.scale.isPresent) {
|
||||
aiVector3D scal(1.f);
|
||||
CopyValue(node.scale.value, scal);
|
||||
aiMatrix4x4 s;
|
||||
aiMatrix4x4::Scaling(scal, s);
|
||||
matrix = matrix * s;
|
||||
}
|
||||
if (node.rotation.isPresent) {
|
||||
aiQuaternion rot;
|
||||
CopyValue(node.rotation.value, rot);
|
||||
matrix = matrix * aiMatrix4x4(rot.GetMatrix());
|
||||
}
|
||||
|
||||
if (node.scale.isPresent) {
|
||||
aiVector3D scal(1.f);
|
||||
CopyValue(node.scale.value, scal);
|
||||
aiMatrix4x4 s;
|
||||
aiMatrix4x4::Scaling(scal, s);
|
||||
matrix = matrix * s;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -981,21 +994,21 @@ static std::string GetNodeName(const Node &node) {
|
|||
|
||||
void ParseExtensions(aiMetadata *metadata, const CustomExtension &extension) {
|
||||
if (extension.mStringValue.isPresent) {
|
||||
metadata->Add(extension.name.c_str(), aiString(extension.mStringValue.value));
|
||||
metadata->Add(extension.name, aiString(extension.mStringValue.value));
|
||||
} else if (extension.mDoubleValue.isPresent) {
|
||||
metadata->Add(extension.name.c_str(), extension.mDoubleValue.value);
|
||||
metadata->Add(extension.name, extension.mDoubleValue.value);
|
||||
} else if (extension.mUint64Value.isPresent) {
|
||||
metadata->Add(extension.name.c_str(), extension.mUint64Value.value);
|
||||
metadata->Add(extension.name, extension.mUint64Value.value);
|
||||
} else if (extension.mInt64Value.isPresent) {
|
||||
metadata->Add(extension.name.c_str(), static_cast<int32_t>(extension.mInt64Value.value));
|
||||
metadata->Add(extension.name, static_cast<int32_t>(extension.mInt64Value.value));
|
||||
} else if (extension.mBoolValue.isPresent) {
|
||||
metadata->Add(extension.name.c_str(), extension.mBoolValue.value);
|
||||
metadata->Add(extension.name, extension.mBoolValue.value);
|
||||
} else if (extension.mValues.isPresent) {
|
||||
aiMetadata val;
|
||||
for (auto const & subExtension : extension.mValues.value) {
|
||||
ParseExtensions(&val, subExtension);
|
||||
}
|
||||
metadata->Add(extension.name.c_str(), val);
|
||||
metadata->Add(extension.name, val);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1041,7 +1054,9 @@ aiNode *ImportNode(aiScene *pScene, glTF2::Asset &r, std::vector<unsigned int> &
|
|||
// GLTF files contain at most 1 mesh per node.
|
||||
if (node.meshes.size() > 1)
|
||||
{
|
||||
throw DeadlyImportError("GLTF: Invalid input, found ", node.meshes.size(), " meshes in ", getContextForErrorMessages(node.id, node.name), ", but only 1 mesh per node allowed.");
|
||||
throw DeadlyImportError("GLTF: Invalid input, found ", node.meshes.size(),
|
||||
" meshes in ", getContextForErrorMessages(node.id, node.name),
|
||||
", but only 1 mesh per node allowed.");
|
||||
}
|
||||
int mesh_idx = node.meshes[0].GetIndex();
|
||||
int count = meshOffsets[mesh_idx + 1] - meshOffsets[mesh_idx];
|
||||
|
@ -1284,7 +1299,7 @@ aiNodeAnim *CreateNodeAnim(glTF2::Asset&, Node &node, AnimationSamplers &sampler
|
|||
}
|
||||
|
||||
aiMeshMorphAnim *CreateMeshMorphAnim(glTF2::Asset&, Node &node, AnimationSamplers &samplers) {
|
||||
aiMeshMorphAnim *anim = new aiMeshMorphAnim();
|
||||
auto *anim = new aiMeshMorphAnim();
|
||||
|
||||
try {
|
||||
anim->mName = GetNodeName(node);
|
||||
|
@ -1432,7 +1447,7 @@ void glTF2Importer::ImportAnimations(glTF2::Asset &r) {
|
|||
}
|
||||
}
|
||||
|
||||
// Use the latest keyframe for the duration of the animation
|
||||
// Use the latest key-frame for the duration of the animation
|
||||
double maxDuration = 0;
|
||||
unsigned int maxNumberOfKeys = 0;
|
||||
for (unsigned int j = 0; j < ai_anim->mNumChannels; ++j) {
|
||||
|
@ -1563,7 +1578,6 @@ void glTF2Importer::ImportCommonMetadata(glTF2::Asset& a) {
|
|||
}
|
||||
|
||||
void glTF2Importer::InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) {
|
||||
|
||||
ASSIMP_LOG_DEBUG("Reading GLTF2 file");
|
||||
|
||||
// clean all member arrays
|
||||
|
@ -1579,10 +1593,7 @@ void glTF2Importer::InternReadFile(const std::string &pFile, aiScene *pScene, IO
|
|||
pScene->mName = asset.scene->name;
|
||||
}
|
||||
|
||||
//
|
||||
// Copy the data out
|
||||
//
|
||||
|
||||
ImportEmbeddedTextures(asset);
|
||||
ImportMaterials(asset);
|
||||
|
||||
|
|
|
@ -47,10 +47,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
struct aiNode;
|
||||
|
||||
|
||||
namespace glTF2
|
||||
{
|
||||
class Asset;
|
||||
namespace glTF2 {
|
||||
class Asset;
|
||||
}
|
||||
|
||||
namespace Assimp {
|
||||
|
@ -59,35 +57,32 @@ namespace Assimp {
|
|||
* Load the glTF2 format.
|
||||
* https://github.com/KhronosGroup/glTF/tree/master/specification
|
||||
*/
|
||||
class glTF2Importer : public BaseImporter{
|
||||
class glTF2Importer : public BaseImporter {
|
||||
public:
|
||||
glTF2Importer();
|
||||
virtual ~glTF2Importer();
|
||||
virtual bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig ) const;
|
||||
~glTF2Importer() override;
|
||||
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const override;
|
||||
|
||||
protected:
|
||||
virtual const aiImporterDesc* GetInfo() const;
|
||||
virtual void InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler );
|
||||
const aiImporterDesc *GetInfo() const override;
|
||||
void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) override;
|
||||
|
||||
private:
|
||||
void ImportEmbeddedTextures(glTF2::Asset &a);
|
||||
void ImportMaterials(glTF2::Asset &a);
|
||||
void ImportMeshes(glTF2::Asset &a);
|
||||
void ImportCameras(glTF2::Asset &a);
|
||||
void ImportLights(glTF2::Asset &a);
|
||||
void ImportNodes(glTF2::Asset &a);
|
||||
void ImportAnimations(glTF2::Asset &a);
|
||||
void ImportCommonMetadata(glTF2::Asset &a);
|
||||
|
||||
private:
|
||||
std::vector<unsigned int> meshOffsets;
|
||||
|
||||
std::vector<int> embeddedTexIdxs;
|
||||
|
||||
aiScene* mScene;
|
||||
|
||||
void ImportEmbeddedTextures(glTF2::Asset& a);
|
||||
void ImportMaterials(glTF2::Asset& a);
|
||||
void ImportMeshes(glTF2::Asset& a);
|
||||
void ImportCameras(glTF2::Asset& a);
|
||||
void ImportLights(glTF2::Asset& a);
|
||||
void ImportNodes(glTF2::Asset& a);
|
||||
void ImportAnimations(glTF2::Asset& a);
|
||||
void ImportCommonMetadata(glTF2::Asset& a);
|
||||
aiScene *mScene;
|
||||
};
|
||||
|
||||
} // Namespace assimp
|
||||
} // namespace Assimp
|
||||
|
||||
#endif // AI_GLTF2IMPORTER_H_INC
|
||||
|
||||
|
|
|
@ -69,7 +69,6 @@ SET( PUBLIC_HEADERS
|
|||
${HEADER_PATH}/ColladaMetaData.h
|
||||
${HEADER_PATH}/commonMetaData.h
|
||||
${HEADER_PATH}/defs.h
|
||||
${HEADER_PATH}/Defines.h
|
||||
${HEADER_PATH}/cfileio.h
|
||||
${HEADER_PATH}/light.h
|
||||
${HEADER_PATH}/material.h
|
||||
|
|
|
@ -47,7 +47,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
*/
|
||||
|
||||
#include <assimp/StandardShapes.h>
|
||||
#include <assimp/Defines.h>
|
||||
#include <assimp/StringComparison.h>
|
||||
#include <assimp/mesh.h>
|
||||
|
||||
|
|
|
@ -46,6 +46,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#ifndef AI_BLOBIOSYSTEM_H_INCLUDED
|
||||
#define AI_BLOBIOSYSTEM_H_INCLUDED
|
||||
|
||||
#ifdef __GNUC__
|
||||
#pragma GCC system_header
|
||||
#endif
|
||||
|
||||
#include <assimp/cexport.h>
|
||||
#include <assimp/DefaultLogger.hpp>
|
||||
#include <assimp/IOStream.hpp>
|
||||
|
|
|
@ -46,6 +46,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#ifndef AI_COLLADAMETADATA_H_INC
|
||||
#define AI_COLLADAMETADATA_H_INC
|
||||
|
||||
#ifdef __GNUC__
|
||||
#pragma GCC system_header
|
||||
#endif
|
||||
|
||||
#define AI_METADATA_COLLADA_ID "Collada_id"
|
||||
#define AI_METADATA_COLLADA_SID "Collada_sid"
|
||||
|
||||
|
|
|
@ -39,7 +39,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/** @file Default file I/O using fXXX()-family of functions */
|
||||
/**
|
||||
* @file
|
||||
* @brief Default file I/O using fXXX()-family of functions
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef AI_DEFAULTIOSTREAM_H_INC
|
||||
#define AI_DEFAULTIOSTREAM_H_INC
|
||||
|
@ -48,10 +51,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
# pragma GCC system_header
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <cstdio>
|
||||
#include <assimp/IOStream.hpp>
|
||||
#include <assimp/importerdesc.h>
|
||||
#include <assimp/Defines.h>
|
||||
|
||||
namespace Assimp {
|
||||
|
||||
|
@ -72,7 +74,12 @@ class ASSIMP_API DefaultIOStream : public IOStream {
|
|||
#endif // __ANDROID__
|
||||
|
||||
protected:
|
||||
/// @brief
|
||||
DefaultIOStream() AI_NO_EXCEPT;
|
||||
|
||||
/// @brief The class constructor with the file name and the stream.
|
||||
/// @param pFile The file-streaam
|
||||
/// @param strFilename The file name
|
||||
DefaultIOStream(FILE* pFile, const std::string &strFilename);
|
||||
|
||||
public:
|
||||
|
|
|
@ -39,7 +39,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/** @file Default implementation of IOSystem using the standard C file functions */
|
||||
/**
|
||||
* @file Default implementation of IOSystem using the standard C file functions
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef AI_DEFAULTIOSYSTEM_H_INC
|
||||
#define AI_DEFAULTIOSYSTEM_H_INC
|
||||
|
|
|
@ -38,15 +38,17 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
----------------------------------------------------------------------
|
||||
*/
|
||||
/** @file DefaultLogger.hpp
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file DefaultLogger.hpp
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#ifndef INCLUDED_AI_DEFAULTLOGGER
|
||||
#define INCLUDED_AI_DEFAULTLOGGER
|
||||
|
||||
#ifdef __GNUC__
|
||||
#pragma GCC system_header
|
||||
# pragma GCC system_header
|
||||
#endif
|
||||
|
||||
#include "LogStream.hpp"
|
||||
|
|
|
@ -1,58 +0,0 @@
|
|||
/*
|
||||
Open Asset Import Library (assimp)
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
with or without modification, are permitted provided that the
|
||||
following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above
|
||||
copyright notice, this list of conditions and the
|
||||
following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the
|
||||
following disclaimer in the documentation and/or other
|
||||
materials provided with the distribution.
|
||||
|
||||
* Neither the name of the assimp team, nor the names of its
|
||||
contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior
|
||||
written permission of the assimp team.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#ifndef AI_DEFINES_H_INC
|
||||
#define AI_DEFINES_H_INC
|
||||
|
||||
#ifdef __GNUC__
|
||||
# pragma GCC system_header
|
||||
#endif
|
||||
|
||||
// We need those constants, workaround for any platforms where nobody defined them yet
|
||||
#if (!defined SIZE_MAX)
|
||||
# define SIZE_MAX (~((size_t)0))
|
||||
#endif
|
||||
|
||||
#if (!defined UINT_MAX)
|
||||
# define UINT_MAX (~((unsigned int)0))
|
||||
#endif
|
||||
|
||||
#endif // AI_DEINES_H_INC
|
|
@ -5,8 +5,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
|
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
@ -45,12 +44,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#define AI_IOSTREAMBUFFER_H_INC
|
||||
|
||||
#ifdef __GNUC__
|
||||
# pragma GCC system_header
|
||||
#pragma GCC system_header
|
||||
#endif
|
||||
|
||||
#include <assimp/ParsingUtils.h>
|
||||
#include <assimp/types.h>
|
||||
#include <assimp/IOStream.hpp>
|
||||
#include <assimp/ParsingUtils.h>
|
||||
|
||||
#include <vector>
|
||||
|
||||
|
@ -60,11 +59,11 @@ namespace Assimp {
|
|||
/**
|
||||
* Implementation of a cached stream buffer.
|
||||
*/
|
||||
template<class T>
|
||||
template <class T>
|
||||
class IOStreamBuffer {
|
||||
public:
|
||||
/// @brief The class constructor.
|
||||
IOStreamBuffer( size_t cache = 4096 * 4096 );
|
||||
IOStreamBuffer(size_t cache = 4096 * 4096);
|
||||
|
||||
/// @brief The class destructor.
|
||||
~IOStreamBuffer();
|
||||
|
@ -72,7 +71,7 @@ public:
|
|||
/// @brief Will open the cached access for a given stream.
|
||||
/// @param stream The stream to cache.
|
||||
/// @return true if successful.
|
||||
bool open( IOStream *stream );
|
||||
bool open(IOStream *stream);
|
||||
|
||||
/// @brief Will close the cached access.
|
||||
/// @return true if successful.
|
||||
|
@ -105,7 +104,7 @@ public:
|
|||
/// @brief Will read the next line.
|
||||
/// @param buffer The buffer for the next line.
|
||||
/// @return true if successful.
|
||||
bool getNextDataLine( std::vector<T> &buffer, T continuationToken );
|
||||
bool getNextDataLine(std::vector<T> &buffer, T continuationToken);
|
||||
|
||||
/// @brief Will read the next line ascii or binary end line char.
|
||||
/// @param buffer The buffer for the next line.
|
||||
|
@ -115,7 +114,7 @@ public:
|
|||
/// @brief Will read the next block.
|
||||
/// @param buffer The buffer for the next block.
|
||||
/// @return true if successful.
|
||||
bool getNextBlock( std::vector<T> &buffer );
|
||||
bool getNextBlock(std::vector<T> &buffer);
|
||||
|
||||
private:
|
||||
IOStream *m_stream;
|
||||
|
@ -128,95 +127,92 @@ private:
|
|||
size_t m_filePos;
|
||||
};
|
||||
|
||||
template<class T>
|
||||
AI_FORCE_INLINE
|
||||
IOStreamBuffer<T>::IOStreamBuffer( size_t cache )
|
||||
: m_stream( nullptr )
|
||||
, m_filesize( 0 )
|
||||
, m_cacheSize( cache )
|
||||
, m_numBlocks( 0 )
|
||||
, m_blockIdx( 0 )
|
||||
, m_cachePos( 0 )
|
||||
, m_filePos( 0 ) {
|
||||
m_cache.resize( cache );
|
||||
std::fill( m_cache.begin(), m_cache.end(), '\n' );
|
||||
template <class T>
|
||||
AI_FORCE_INLINE IOStreamBuffer<T>::IOStreamBuffer(size_t cache) :
|
||||
m_stream(nullptr),
|
||||
m_filesize(0),
|
||||
m_cacheSize(cache),
|
||||
m_numBlocks(0),
|
||||
m_blockIdx(0),
|
||||
m_cachePos(0),
|
||||
m_filePos(0) {
|
||||
m_cache.resize(cache);
|
||||
std::fill(m_cache.begin(), m_cache.end(), '\n');
|
||||
}
|
||||
|
||||
template<class T>
|
||||
AI_FORCE_INLINE
|
||||
IOStreamBuffer<T>::~IOStreamBuffer() {
|
||||
template <class T>
|
||||
AI_FORCE_INLINE IOStreamBuffer<T>::~IOStreamBuffer() {
|
||||
// empty
|
||||
}
|
||||
|
||||
template<class T>
|
||||
AI_FORCE_INLINE
|
||||
bool IOStreamBuffer<T>::open( IOStream *stream ) {
|
||||
template <class T>
|
||||
AI_FORCE_INLINE bool IOStreamBuffer<T>::open(IOStream *stream) {
|
||||
// file still opened!
|
||||
if ( nullptr != m_stream ) {
|
||||
if (nullptr != m_stream) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Invalid stream pointer
|
||||
if ( nullptr == stream ) {
|
||||
if (nullptr == stream) {
|
||||
return false;
|
||||
}
|
||||
|
||||
m_stream = stream;
|
||||
m_filesize = m_stream->FileSize();
|
||||
if ( m_filesize == 0 ) {
|
||||
if (m_filesize == 0) {
|
||||
return false;
|
||||
}
|
||||
if ( m_filesize < m_cacheSize ) {
|
||||
if (m_filesize < m_cacheSize) {
|
||||
m_cacheSize = m_filesize;
|
||||
}
|
||||
|
||||
m_numBlocks = m_filesize / m_cacheSize;
|
||||
if ( ( m_filesize % m_cacheSize ) > 0 ) {
|
||||
if ((m_filesize % m_cacheSize) > 0) {
|
||||
m_numBlocks++;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
template<class T>
|
||||
AI_FORCE_INLINE
|
||||
bool IOStreamBuffer<T>::close() {
|
||||
if ( nullptr == m_stream ) {
|
||||
template <class T>
|
||||
AI_FORCE_INLINE bool IOStreamBuffer<T>::close() {
|
||||
if (nullptr == m_stream) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// init counters and state vars
|
||||
m_stream = nullptr;
|
||||
m_filesize = 0;
|
||||
m_stream = nullptr;
|
||||
m_filesize = 0;
|
||||
m_numBlocks = 0;
|
||||
m_blockIdx = 0;
|
||||
m_cachePos = 0;
|
||||
m_filePos = 0;
|
||||
m_blockIdx = 0;
|
||||
m_cachePos = 0;
|
||||
m_filePos = 0;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
template<class T>
|
||||
template <class T>
|
||||
AI_FORCE_INLINE
|
||||
size_t IOStreamBuffer<T>::size() const {
|
||||
size_t
|
||||
IOStreamBuffer<T>::size() const {
|
||||
return m_filesize;
|
||||
}
|
||||
|
||||
template<class T>
|
||||
template <class T>
|
||||
AI_FORCE_INLINE
|
||||
size_t IOStreamBuffer<T>::cacheSize() const {
|
||||
size_t
|
||||
IOStreamBuffer<T>::cacheSize() const {
|
||||
return m_cacheSize;
|
||||
}
|
||||
|
||||
template<class T>
|
||||
AI_FORCE_INLINE
|
||||
bool IOStreamBuffer<T>::readNextBlock() {
|
||||
m_stream->Seek( m_filePos, aiOrigin_SET );
|
||||
size_t readLen = m_stream->Read( &m_cache[ 0 ], sizeof( T ), m_cacheSize );
|
||||
if ( readLen == 0 ) {
|
||||
template <class T>
|
||||
AI_FORCE_INLINE bool IOStreamBuffer<T>::readNextBlock() {
|
||||
m_stream->Seek(m_filePos, aiOrigin_SET);
|
||||
size_t readLen = m_stream->Read(&m_cache[0], sizeof(T), m_cacheSize);
|
||||
if (readLen == 0) {
|
||||
return false;
|
||||
}
|
||||
if ( readLen < m_cacheSize ) {
|
||||
if (readLen < m_cacheSize) {
|
||||
m_cacheSize = readLen;
|
||||
}
|
||||
m_filePos += m_cacheSize;
|
||||
|
@ -226,79 +222,73 @@ bool IOStreamBuffer<T>::readNextBlock() {
|
|||
return true;
|
||||
}
|
||||
|
||||
template<class T>
|
||||
AI_FORCE_INLINE
|
||||
size_t IOStreamBuffer<T>::getNumBlocks() const {
|
||||
template <class T>
|
||||
AI_FORCE_INLINE size_t IOStreamBuffer<T>::getNumBlocks() const {
|
||||
return m_numBlocks;
|
||||
}
|
||||
|
||||
template<class T>
|
||||
AI_FORCE_INLINE
|
||||
size_t IOStreamBuffer<T>::getCurrentBlockIndex() const {
|
||||
template <class T>
|
||||
AI_FORCE_INLINE size_t IOStreamBuffer<T>::getCurrentBlockIndex() const {
|
||||
return m_blockIdx;
|
||||
}
|
||||
|
||||
template<class T>
|
||||
AI_FORCE_INLINE
|
||||
size_t IOStreamBuffer<T>::getFilePos() const {
|
||||
template <class T>
|
||||
AI_FORCE_INLINE size_t IOStreamBuffer<T>::getFilePos() const {
|
||||
return m_filePos;
|
||||
}
|
||||
|
||||
template<class T>
|
||||
AI_FORCE_INLINE
|
||||
bool IOStreamBuffer<T>::getNextDataLine( std::vector<T> &buffer, T continuationToken ) {
|
||||
buffer.resize( m_cacheSize );
|
||||
if ( m_cachePos >= m_cacheSize || 0 == m_filePos ) {
|
||||
if ( !readNextBlock() ) {
|
||||
template <class T>
|
||||
AI_FORCE_INLINE bool IOStreamBuffer<T>::getNextDataLine(std::vector<T> &buffer, T continuationToken) {
|
||||
buffer.resize(m_cacheSize);
|
||||
if (m_cachePos >= m_cacheSize || 0 == m_filePos) {
|
||||
if (!readNextBlock()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
size_t i = 0;
|
||||
for( ;; ) {
|
||||
if ( continuationToken == m_cache[ m_cachePos ] && IsLineEnd( m_cache[ m_cachePos + 1 ] ) ) {
|
||||
for (;;) {
|
||||
if (continuationToken == m_cache[m_cachePos] && IsLineEnd(m_cache[m_cachePos + 1])) {
|
||||
++m_cachePos;
|
||||
while ( m_cache[ m_cachePos ] != '\n' ) {
|
||||
while (m_cache[m_cachePos] != '\n') {
|
||||
++m_cachePos;
|
||||
}
|
||||
++m_cachePos;
|
||||
} else if ( IsLineEnd ( m_cache[ m_cachePos ] ) ) {
|
||||
} else if (IsLineEnd(m_cache[m_cachePos])) {
|
||||
break;
|
||||
}
|
||||
|
||||
buffer[ i ] = m_cache[ m_cachePos ];
|
||||
buffer[i] = m_cache[m_cachePos];
|
||||
++m_cachePos;
|
||||
++i;
|
||||
if (m_cachePos >= size()) {
|
||||
break;
|
||||
}
|
||||
if ( m_cachePos >= m_cacheSize ) {
|
||||
if ( !readNextBlock() ) {
|
||||
if (m_cachePos >= m_cacheSize) {
|
||||
if (!readNextBlock()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
buffer[ i ] = '\n';
|
||||
buffer[i] = '\n';
|
||||
++m_cachePos;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static AI_FORCE_INLINE
|
||||
bool isEndOfCache( size_t pos, size_t cacheSize ) {
|
||||
return ( pos == cacheSize );
|
||||
static AI_FORCE_INLINE bool isEndOfCache(size_t pos, size_t cacheSize) {
|
||||
return (pos == cacheSize);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
AI_FORCE_INLINE
|
||||
bool IOStreamBuffer<T>::getNextLine(std::vector<T> &buffer) {
|
||||
template <class T>
|
||||
AI_FORCE_INLINE bool IOStreamBuffer<T>::getNextLine(std::vector<T> &buffer) {
|
||||
buffer.resize(m_cacheSize);
|
||||
if ( isEndOfCache( m_cachePos, m_cacheSize ) || 0 == m_filePos) {
|
||||
if (!readNextBlock()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (isEndOfCache(m_cachePos, m_cacheSize) || 0 == m_filePos) {
|
||||
if (!readNextBlock()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (IsLineEnd(m_cache[m_cachePos])) {
|
||||
// skip line end
|
||||
|
@ -306,16 +296,16 @@ bool IOStreamBuffer<T>::getNextLine(std::vector<T> &buffer) {
|
|||
++m_cachePos;
|
||||
}
|
||||
++m_cachePos;
|
||||
if ( isEndOfCache( m_cachePos, m_cacheSize ) ) {
|
||||
if ( !readNextBlock() ) {
|
||||
if (isEndOfCache(m_cachePos, m_cacheSize)) {
|
||||
if (!readNextBlock()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
size_t i( 0 );
|
||||
while (!IsLineEnd(m_cache[ m_cachePos ])) {
|
||||
buffer[i] = m_cache[ m_cachePos ];
|
||||
size_t i(0);
|
||||
while (!IsLineEnd(m_cache[m_cachePos])) {
|
||||
buffer[i] = m_cache[m_cachePos];
|
||||
++m_cachePos;
|
||||
++i;
|
||||
if (m_cachePos >= m_cacheSize) {
|
||||
|
@ -330,15 +320,14 @@ bool IOStreamBuffer<T>::getNextLine(std::vector<T> &buffer) {
|
|||
return true;
|
||||
}
|
||||
|
||||
template<class T>
|
||||
AI_FORCE_INLINE
|
||||
bool IOStreamBuffer<T>::getNextBlock( std::vector<T> &buffer) {
|
||||
template <class T>
|
||||
AI_FORCE_INLINE bool IOStreamBuffer<T>::getNextBlock(std::vector<T> &buffer) {
|
||||
// Return the last block-value if getNextLine was used before
|
||||
if ( 0 != m_cachePos ) {
|
||||
buffer = std::vector<T>( m_cache.begin() + m_cachePos, m_cache.end() );
|
||||
if (0 != m_cachePos) {
|
||||
buffer = std::vector<T>(m_cache.begin() + m_cachePos, m_cache.end());
|
||||
m_cachePos = 0;
|
||||
} else {
|
||||
if ( !readNextBlock() ) {
|
||||
if (!readNextBlock()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -348,6 +337,6 @@ bool IOStreamBuffer<T>::getNextBlock( std::vector<T> &buffer) {
|
|||
return true;
|
||||
}
|
||||
|
||||
} // !ns Assimp
|
||||
} // namespace Assimp
|
||||
|
||||
#endif // AI_IOSTREAMBUFFER_H_INC
|
||||
|
|
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
|||
|
||||
Copyright (c) 2006-2021, assimp team
|
||||
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use of this software in source and binary forms,
|
||||
|
@ -57,6 +56,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
namespace Assimp {
|
||||
|
||||
/// @brief Logger class, which will exten the class by log-functions.
|
||||
/// @tparam TDeriving
|
||||
template<class TDeriving>
|
||||
class LogFunctions {
|
||||
public:
|
||||
|
@ -109,8 +110,8 @@ public:
|
|||
|
||||
private:
|
||||
static const char* Prefix();
|
||||
|
||||
};
|
||||
|
||||
} // ! Assimp
|
||||
|
||||
#endif
|
||||
#endif // INCLUDED_AI_LOGAUX_H
|
||||
|
|
|
@ -51,12 +51,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#pragma GCC system_header
|
||||
#endif
|
||||
|
||||
#include <assimp/Defines.h>
|
||||
#include <assimp/ai_assert.h>
|
||||
#include <assimp/types.h>
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
#include <list>
|
||||
#include <set>
|
||||
#include <vector>
|
||||
|
|
|
@ -47,11 +47,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#define AI_STREAMREADER_H_INCLUDED
|
||||
|
||||
#ifdef __GNUC__
|
||||
#pragma GCC system_header
|
||||
# pragma GCC system_header
|
||||
#endif
|
||||
|
||||
#include <assimp/ByteSwapper.h>
|
||||
#include <assimp/Defines.h>
|
||||
#include <assimp/Exceptional.h>
|
||||
#include <assimp/IOStream.hpp>
|
||||
|
||||
|
|
|
@ -46,6 +46,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#ifndef AI_COMMONMETADATA_H_INC
|
||||
#define AI_COMMONMETADATA_H_INC
|
||||
|
||||
#ifdef __GNUC__
|
||||
#pragma GCC system_header
|
||||
#endif
|
||||
|
||||
/// Scene metadata holding the name of the importer which loaded the source asset.
|
||||
/// This is always present if the scene was created from an imported asset.
|
||||
#define AI_METADATA_SOURCE_FORMAT "SourceAsset_Format"
|
||||
|
|
|
@ -93,6 +93,15 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#define ASSIMP_BUILD_NEED_UNZIP
|
||||
#endif
|
||||
|
||||
// We need those constants, workaround for any platforms where nobody defined them yet
|
||||
#if (!defined SIZE_MAX)
|
||||
#define SIZE_MAX (~((size_t)0))
|
||||
#endif
|
||||
|
||||
/*#if (!defined UINT_MAX)
|
||||
#define UINT_MAX (~((unsigned int)0))
|
||||
#endif*/
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
/* Define ASSIMP_BUILD_NO_XX_PROCESS to disable a specific
|
||||
* post processing step. This is the current list of process names ('XX'):
|
||||
|
@ -156,33 +165,33 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#endif // _WIN32
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(disable : 4521 4512 4714 4127 4351 4510)
|
||||
#ifdef ASSIMP_BUILD_DLL_EXPORT
|
||||
#pragma warning(disable : 4251)
|
||||
#endif
|
||||
/* Force the compiler to inline a function, if possible */
|
||||
#define AI_FORCE_INLINE inline
|
||||
#pragma warning(disable : 4521 4512 4714 4127 4351 4510)
|
||||
#ifdef ASSIMP_BUILD_DLL_EXPORT
|
||||
#pragma warning(disable : 4251)
|
||||
#endif
|
||||
/* Force the compiler to inline a function, if possible */
|
||||
#define AI_FORCE_INLINE inline
|
||||
|
||||
/* Tells the compiler that a function never returns. Used in code analysis
|
||||
* to skip dead paths (e.g. after an assertion evaluated to false). */
|
||||
#define AI_WONT_RETURN __declspec(noreturn)
|
||||
/* Tells the compiler that a function never returns. Used in code analysis
|
||||
* to skip dead paths (e.g. after an assertion evaluated to false). */
|
||||
#define AI_WONT_RETURN __declspec(noreturn)
|
||||
#elif defined(SWIG)
|
||||
/* Do nothing, the relevant defines are all in AssimpSwigPort.i */
|
||||
#else
|
||||
#define AI_WONT_RETURN
|
||||
#define AI_FORCE_INLINE inline
|
||||
#define AI_WONT_RETURN
|
||||
#define AI_FORCE_INLINE inline
|
||||
#endif // (defined _MSC_VER)
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define AI_WONT_RETURN_SUFFIX __attribute__((noreturn))
|
||||
# define AI_WONT_RETURN_SUFFIX __attribute__((noreturn))
|
||||
#else
|
||||
#define AI_WONT_RETURN_SUFFIX
|
||||
# define AI_WONT_RETURN_SUFFIX
|
||||
#endif // (defined __clang__)
|
||||
|
||||
#ifdef __cplusplus
|
||||
/* No explicit 'struct' and 'enum' tags for C++, this keeps showing up
|
||||
* in doxydocs.
|
||||
*/
|
||||
* in doxydocs.
|
||||
*/
|
||||
#define C_STRUCT
|
||||
#define C_ENUM
|
||||
#else
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue