50 lines
1.2 KiB
C++
50 lines
1.2 KiB
C++
#pragma once
|
||
#include "math.hpp"
|
||
#include <vector>
|
||
|
||
namespace basalt::shared::object_loader {
|
||
|
||
class Object {
|
||
public:
|
||
Object(std::vector<math::Vector3>&& vertices, std::vector<math::Triangle>&& 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<math::Vector3> vertices;
|
||
std::vector<math::Triangle> triangles;
|
||
};
|
||
|
||
enum class ObjectLoaderStatus {
|
||
Ready,
|
||
Loaded,
|
||
};
|
||
|
||
/**
|
||
* @brief
|
||
* @details
|
||
* \li 加载的模型的坐标系与Blender一致。
|
||
* \li 加载的模型的顶点顺序为CCW,即右手定则确认法线方向。
|
||
*/
|
||
class IObjectLoader {
|
||
public:
|
||
IObjectLoader();
|
||
virtual ~IObjectLoader();
|
||
|
||
public:
|
||
virtual void load();
|
||
const Object& get_object(size_t index) const;
|
||
size_t get_object_count() const;
|
||
|
||
protected:
|
||
ObjectLoaderStatus status;
|
||
std::vector<Object> objects;
|
||
};
|
||
|
||
} // namespace basalt::shared::object_loader
|