#pragma once #include #include #include #include namespace iris { struct Mesh { std::string name; std::vector vertices; std::vector normals; std::vector texcoords; // Note: w component is a sign, 1.0 or -1.0 std::vector tangents; std::vector indices; int32_t material_index; // AABB glm::vec3 p_min; glm::vec3 p_max; }; struct Material { std::string name; glm::vec4 base_color; float metallic; float roughness; }; struct Texture { }; struct Camera { enum struct Tag { Perspective, Orthographic, } intrinsic_tag; struct PerspectiveCamera { float fovx; float fovy; float aspect; float znear; float zfar; }; struct OrthographicCamera { float xmag; float ymag; float znear; float zfar; }; union { PerspectiveCamera perspective; OrthographicCamera orthographic; } intrinsic; glm::vec3 position; glm::vec3 direction; glm::vec3 up; }; struct Scene { std::vector meshes; std::vector materials; std::vector textures; Camera camera; }; } // namespace iris