115 lines
2.3 KiB
C++
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
|