#pragma once #include "Math/Quaternion.h" #include "Utils/DistinctMapper.h" #include #include struct XModelObject { std::string name; int materialIndex; }; struct XModelBone { std::string name; int parentIndex; float scale[3]; float globalOffset[3]; float localOffset[3]; Quaternion32 globalRotation; Quaternion32 localRotation; }; struct XModelBoneWeight { int boneIndex; float weight; }; struct XModelVertexBoneWeightCollection { std::vector weights; }; struct XModelVertexBoneWeights { const XModelBoneWeight* weights; size_t weightCount; }; struct XModelVertex { float coordinates[3]; float normal[3]; float color[4]; float uv[2]; }; struct XModelFace { int vertexIndex[3]; int objectIndex; }; struct XModelMaterial { std::string name; std::string materialTypeName; float color[4]; float transparency[4]; float ambientColor[4]; float incandescence[4]; float coeffs[2]; struct { float x; int y; } glow; struct { int x; float y; } refractive; float specularColor[4]; float reflectiveColor[4]; struct { int x; float y; } reflective; float blinn[2]; float phong; std::string colorMapName; void ApplyDefaults(); }; struct XModelCommon { std::vector m_objects; std::vector m_bones; std::vector m_materials; std::vector m_vertices; std::vector m_vertex_bone_weights; std::vector m_faces; XModelVertexBoneWeightCollection m_bone_weight_data; }; struct VertexMergerPos { float x; float y; float z; const XModelBoneWeight* weights; size_t weightCount; friend bool operator==(const VertexMergerPos& lhs, const VertexMergerPos& rhs); friend bool operator!=(const VertexMergerPos& lhs, const VertexMergerPos& rhs); friend bool operator<(const VertexMergerPos& lhs, const VertexMergerPos& rhs); }; typedef DistinctMapper VertexMerger;