// Copyright (C) 2015 Jérôme Leclercq // This file is part of the "Nazara Engine - Utility module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_FORMATS_OBJPARSER_HPP #define NAZARA_FORMATS_OBJPARSER_HPP #include #include #include #include #include #include #include class NAZARA_UTILITY_API NzOBJParser { public: struct FaceVertex { int normal; int position; int texCoord; }; struct Face { std::vector vertices; }; struct Mesh { std::vector faces; NzString name; unsigned int material; }; NzOBJParser(NzInputStream& stream$); ~NzOBJParser(); const NzString* GetMaterials() const; unsigned int GetMaterialCount() const; const Mesh* GetMeshes() const; unsigned int GetMeshCount() const; const NzString& GetMtlLib() const; const NzVector3f* GetNormals() const; unsigned int GetNormalCount() const; const NzVector4f* GetPositions() const; unsigned int GetPositionCount() const; const NzVector3f* GetTexCoords() const; unsigned int GetTexCoordCount() const; bool Parse(); private: bool Advance(bool required = true); void Error(const NzString& message); void Warning(const NzString& message); void UnrecognizedLine(bool error = false); std::vector m_meshes; std::vector m_materials; std::vector m_normals; std::vector m_positions; std::vector m_texCoords; NzInputStream& m_stream; NzString m_currentLine; NzString m_mtlLib; bool m_keepLastLine; unsigned int m_lineCount; unsigned int m_streamFlags; }; #endif // NAZARA_FORMATS_OBJPARSER_HPP