#ifndef ARE_INCLUDE_SCENE_MATERIAL_H #define ARE_INCLUDE_SCENE_MATERIAL_H #include "basic/types.h" #include "resource/texture.h" #include namespace are { /// @brief Material type enumeration enum class MaterialType { DIFFUSE = 0, METAL = 1, DIELECTRIC = 2, EMISSIVE = 3 }; /// @brief Material properties class Material { public: /// @brief Constructor Material(); /// @brief Destructor ~Material(); /// @brief Set albedo color /// @param albedo Albedo color void set_albedo(const Vec3& albedo); /// @brief Set emission color /// @param emission Emission color void set_emission(const Vec3& emission); /// @brief Set metallic value /// @param metallic Metallic (0-1) void set_metallic(float metallic); /// @brief Set roughness value /// @param roughness Roughness (0-1) void set_roughness(float roughness); /// @brief Set index of refraction /// @param ior Index of refraction void set_ior(float ior); /// @brief Set material type /// @param type Material type void set_type(MaterialType type); /// @brief Set albedo texture /// @param texture Albedo texture void set_albedo_texture(std::shared_ptr texture); /// @brief Set normal map /// @param texture Normal map texture void set_normal_texture(std::shared_ptr texture); /// @brief Get albedo color /// @return Albedo color const Vec3& get_albedo() const { return albedo_; } /// @brief Get emission color /// @return Emission color const Vec3& get_emission() const { return emission_; } /// @brief Get metallic value /// @return Metallic float get_metallic() const { return metallic_; } /// @brief Get roughness value /// @return Roughness float get_roughness() const { return roughness_; } /// @brief Get index of refraction /// @return IOR float get_ior() const { return ior_; } /// @brief Get material type /// @return Material type MaterialType get_type() const { return type_; } /// @brief Get albedo texture /// @return Albedo texture (nullptr if none) std::shared_ptr get_albedo_texture() const { return albedo_texture_; } /// @brief Get normal texture /// @return Normal texture (nullptr if none) std::shared_ptr get_normal_texture() const { return normal_texture_; } private: Vec3 albedo_; Vec3 emission_; float metallic_; float roughness_; float ior_; MaterialType type_; std::shared_ptr albedo_texture_; std::shared_ptr normal_texture_; }; } // namespace are #endif // ARE_INCLUDE_SCENE_MATERIAL_H