feat: add basic format for models
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
#ifndef DESTRUM_MODELFILE_H
|
||||
#define DESTRUM_MODELFILE_H
|
||||
|
||||
#include <cstdint>
|
||||
#include <filesystem>
|
||||
#include <span>
|
||||
#include <string_view>
|
||||
#include <vector>
|
||||
|
||||
#include <destrum/Util/ModelDoc.h>
|
||||
|
||||
namespace ModelFile {
|
||||
inline constexpr std::uint32_t Version = 1;
|
||||
inline constexpr std::string_view Extension = ".dmodel";
|
||||
|
||||
[[nodiscard]] std::vector<std::uint8_t> Write(const ModelDoc::ModelAsset& model);
|
||||
[[nodiscard]] ModelDoc::ModelAsset Read(std::span<const std::uint8_t> bytes);
|
||||
|
||||
void WriteToFile(const ModelDoc::ModelAsset& model, const std::filesystem::path& path);
|
||||
[[nodiscard]] ModelDoc::ModelAsset ReadFromFile(const std::filesystem::path& path);
|
||||
}
|
||||
|
||||
#endif // DESTRUM_MODELFILE_H
|
||||
@@ -0,0 +1,43 @@
|
||||
#ifndef CPUMESH_H
|
||||
#define CPUMESH_H
|
||||
|
||||
#include <cstdint>
|
||||
#include <optional>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <glm/vec3.hpp>
|
||||
#include <glm/vec4.hpp>
|
||||
|
||||
#include <destrum/Graphics/Skeleton.h>
|
||||
#include <destrum/Assets/AssetReference.h>
|
||||
|
||||
// ─── CPU Mesh ─────────────────────────────────────────────────────────────────
|
||||
struct CPUMesh {
|
||||
struct Vertex {
|
||||
glm::vec3 position;
|
||||
float uv_x{};
|
||||
glm::vec3 normal;
|
||||
float uv_y{};
|
||||
glm::vec4 tangent;
|
||||
};
|
||||
|
||||
struct SkinningData {
|
||||
glm::vec<4, std::uint32_t> jointIds;
|
||||
glm::vec4 weights;
|
||||
};
|
||||
|
||||
std::vector<std::uint32_t> indices;
|
||||
std::vector<Vertex> vertices;
|
||||
std::vector<SkinningData> skinningData; // empty if no skeleton
|
||||
|
||||
std::string name;
|
||||
AssetReference assetReference;
|
||||
|
||||
glm::vec3 minPos;
|
||||
glm::vec3 maxPos;
|
||||
|
||||
std::optional<Skeleton> skeleton; // present only for skinned meshes
|
||||
};
|
||||
|
||||
#endif // CPUMESH_H
|
||||
@@ -13,37 +13,8 @@
|
||||
#include <glm/mat4x4.hpp>
|
||||
|
||||
#include <destrum/Graphics/Resources/Buffer.h>
|
||||
#include <destrum/Graphics/Resources/CPUMesh.h>
|
||||
#include <destrum/Graphics/Frustum.h>
|
||||
#include <destrum/Graphics/Skeleton.h>
|
||||
#include <destrum/Assets/AssetReference.h>
|
||||
|
||||
// ─── CPU Mesh ─────────────────────────────────────────────────────────────────
|
||||
struct CPUMesh {
|
||||
struct Vertex {
|
||||
glm::vec3 position;
|
||||
float uv_x{};
|
||||
glm::vec3 normal;
|
||||
float uv_y{};
|
||||
glm::vec4 tangent;
|
||||
};
|
||||
|
||||
struct SkinningData {
|
||||
glm::vec<4, std::uint32_t> jointIds;
|
||||
glm::vec4 weights;
|
||||
};
|
||||
|
||||
std::vector<std::uint32_t> indices;
|
||||
std::vector<Vertex> vertices;
|
||||
std::vector<SkinningData> skinningData; // empty if no skeleton
|
||||
|
||||
std::string name;
|
||||
AssetReference assetReference;
|
||||
|
||||
glm::vec3 minPos;
|
||||
glm::vec3 maxPos;
|
||||
|
||||
std::optional<Skeleton> skeleton; // present only for skinned meshes
|
||||
};
|
||||
|
||||
// ─── GPU Mesh ─────────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
@@ -30,7 +30,9 @@
|
||||
#include <glm/gtc/quaternion.hpp>
|
||||
#include <glm/gtc/type_ptr.hpp>
|
||||
|
||||
#include <destrum/Graphics/Resources/Mesh.h>
|
||||
#include <spdlog/spdlog.h>
|
||||
|
||||
#include <destrum/Graphics/Resources/CPUMesh.h>
|
||||
#include <destrum/Assets/AssetReference.h>
|
||||
#include <destrum/Graphics/SkeletalAnimation.h>
|
||||
#include <destrum/Graphics/Skeleton.h>
|
||||
|
||||
Reference in New Issue
Block a user