aurora-rendering-engine/include/scene/light.h

115 lines
2.3 KiB
C++

#ifndef ARE_INCLUDE_SCENE_LIGHT_H
#define ARE_INCLUDE_SCENE_LIGHT_H
#include "basic/types.h"
namespace are {
/// @brief Light type enumeration
enum class LightType {
DIRECTIONAL = 0,
POINT = 1,
SPOT = 2
};
/// @brief Light source
class Light {
public:
/// @brief Constructor
Light();
/// @brief Destructor
~Light();
/// @brief Set light type
/// @param type Light type
void set_type(LightType type);
/// @brief Set light position (for point and spot lights)
/// @param position Light position
void set_position(const Vec3 &position);
/// @brief Set light direction (for directional and spot lights)
/// @param direction Light direction
void set_direction(const Vec3 &direction);
/// @brief Set light color
/// @param color Light color
void set_color(const Vec3 &color);
/// @brief Set light intensity
/// @param intensity Light intensity
void set_intensity(float intensity);
/// @brief Set light range (for point and spot lights)
/// @param range Light range
void set_range(float range);
/// @brief Set spot light angles
/// @param inner_angle Inner cone angle in degrees
/// @param outer_angle Outer cone angle in degrees
void set_spot_angles(float inner_angle, float outer_angle);
/// @brief Get light type
/// @return Light type
LightType get_type() const {
return type_;
}
/// @brief Get light position
/// @return Light position
const Vec3 &get_position() const {
return position_;
}
/// @brief Get light direction
/// @return Light direction
const Vec3 &get_direction() const {
return direction_;
}
/// @brief Get light color
/// @return Light color
const Vec3 &get_color() const {
return color_;
}
/// @brief Get light intensity
/// @return Light intensity
float get_intensity() const {
return intensity_;
}
/// @brief Get light range
/// @return Light range
float get_range() const {
return range_;
}
/// @brief Get spot light inner angle
/// @return Inner angle in radians
float get_inner_angle() const {
return inner_angle_;
}
/// @brief Get spot light outer angle
/// @return Outer angle in radians
float get_outer_angle() const {
return outer_angle_;
}
private:
LightType type_;
Vec3 position_;
Vec3 direction_;
Vec3 color_;
float intensity_;
float range_;
float inner_angle_;
float outer_angle_;
};
} // namespace are
#endif // ARE_INCLUDE_SCENE_LIGHT_H