#pragma once #include "math.hpp" #include #include namespace basalt::shared::object_loader { class Object { public: Object(std::vector&& vertices, std::vector&& triangles); ~Object(); public: size_t get_vertices_count() const; const math::Vector3* get_vertices() const; size_t get_triangle_count() const; const math::Triangle* get_triangles() const; private: std::vector vertices; std::vector triangles; }; struct ObjectLoaderConfig { std::string filename; }; enum class ObjectLoaderStatus { Ready, Loaded, }; /** * @brief * @details * \li 加载的模型的坐标系与Blender一致。 * \li 加载的模型的顶点顺序为CCW,即右手定则确认法线方向。 */ class IObjectLoader { public: IObjectLoader(); virtual ~IObjectLoader(); public: virtual void load(ObjectLoaderConfig&& config); const Object& get_object(size_t index) const; size_t get_object_count() const; protected: ObjectLoaderStatus status; ObjectLoaderConfig config; std::vector objects; }; } // namespace basalt::shared::object_loader