mirror of
https://github.com/barkeser2002/flower.git
synced 2026-09-25 19:36:20 +03:00
99 lines
1.8 KiB
C++
99 lines
1.8 KiB
C++
//
|
|
// Copyright(c) 2016-2017 benikabocha.
|
|
// Distributed under the MIT License (http://opensource.org/licenses/MIT)
|
|
//
|
|
|
|
|
|
#ifndef SABA_MODEL_XFILE_OBJMODEL_H_
|
|
#define SABA_MODEL_XFILE_OBJMODEL_H_
|
|
|
|
#include <vector>
|
|
#include <memory>
|
|
#include <string>
|
|
|
|
#include <glm/vec2.hpp>
|
|
#include <glm/vec3.hpp>
|
|
#include <glm/vec4.hpp>
|
|
#include <glm/mat4x4.hpp>
|
|
|
|
namespace saba
|
|
{
|
|
class XFileModel
|
|
{
|
|
public:
|
|
struct Material
|
|
{
|
|
glm::vec4 m_diffuse;
|
|
glm::vec3 m_specular;
|
|
float m_speculatPower;
|
|
glm::vec3 m_emissive;
|
|
|
|
std::string m_texture;
|
|
|
|
enum class SpTextureMode
|
|
{
|
|
None,
|
|
Mul,
|
|
Add,
|
|
};
|
|
SpTextureMode m_spTextureMode;
|
|
std::string m_spTexture;
|
|
};
|
|
|
|
struct Face
|
|
{
|
|
int m_position[3];
|
|
int m_normal[3];
|
|
int m_uv[3];
|
|
int m_material;
|
|
};
|
|
|
|
struct Mesh
|
|
{
|
|
std::string m_name;
|
|
std::vector<glm::vec3> m_positions;
|
|
std::vector<glm::vec3> m_normals;
|
|
std::vector<glm::vec2> m_uvs;
|
|
std::vector<Material> m_materials;
|
|
std::vector<Face> m_faces;
|
|
};
|
|
|
|
struct Frame
|
|
{
|
|
std::string m_name;
|
|
glm::mat4 m_local;
|
|
glm::mat4 m_global;
|
|
Mesh* m_mesh;
|
|
|
|
Frame* m_parent;
|
|
Frame* m_child;
|
|
Frame* m_next;
|
|
};
|
|
|
|
public:
|
|
bool Load(const char* filepath);
|
|
void Destroy();
|
|
|
|
size_t GetFrameCount() const { return m_frames.size(); }
|
|
const Frame* GetFrame(size_t i) const { return m_frames[i].get(); }
|
|
|
|
const glm::vec3& GetBBoxMin() const { return m_bboxMin; }
|
|
const glm::vec3& GetBBoxMax() const { return m_bboxMax; }
|
|
|
|
private:
|
|
void UpdateGlobalTransform(Frame* frame);
|
|
|
|
private:
|
|
using MeshUPtr = std::unique_ptr<Mesh>;
|
|
using FrameUPtr = std::unique_ptr<Frame>;
|
|
|
|
std::vector<MeshUPtr> m_meshes;
|
|
std::vector<FrameUPtr> m_frames;
|
|
|
|
glm::vec3 m_bboxMin;
|
|
glm::vec3 m_bboxMax;
|
|
};
|
|
}
|
|
|
|
#endif // !SABA_MODEL_XFILE_OBJMODEL_H_
|