3#include <Core/CoreMacros.hpp>
4#include <Core/Math/Math.hpp>
6#include <Engine/Data/RenderParameters.hpp>
7#include <Engine/RaEngine.hpp>
8#include <Engine/Scene/Light.hpp>
27 void setPosition(
const Eigen::Matrix<Scalar, 3, 1>& position )
override;
28 inline const Eigen::Matrix<Scalar, 3, 1>& getPosition()
const;
30 void setDirection(
const Eigen::Matrix<Scalar, 3, 1>& direction )
override;
31 inline const Eigen::Matrix<Scalar, 3, 1>& getDirection()
const;
33 inline void setInnerAngleInRadians( Scalar angle );
34 inline void setOuterAngleInRadians( Scalar angle );
35 inline void setInnerAngleInDegrees( Scalar angle );
36 inline void setOuterAngleInDegrees( Scalar angle );
38 inline Scalar getInnerAngle()
const;
39 inline Scalar getOuterAngle()
const;
41 inline void setAttenuation(
const Attenuation& attenuation );
42 inline void setAttenuation( Scalar constant, Scalar linear, Scalar quadratic );
48 Eigen::Matrix<Scalar, 3, 1> m_position { 0, 0, 0 };
49 Eigen::Matrix<Scalar, 3, 1> m_direction { 0, -1, 0 };
51 Scalar m_innerAngle { Core::Math::PiDiv4 };
52 Scalar m_outerAngle { Core::Math::PiDiv2 };
61 m_position = position;
65inline const Eigen::Matrix<Scalar, 3, 1>& Scene::SpotLight::getPosition()
const {
70 m_direction = direction.normalized();
74inline const Eigen::Matrix<Scalar, 3, 1>& SpotLight::getDirection()
const {
78inline void SpotLight::setInnerAngleInRadians( Scalar angle ) {
83inline void SpotLight::setOuterAngleInRadians( Scalar angle ) {
88inline void SpotLight::setInnerAngleInDegrees( Scalar angle ) {
89 m_innerAngle = angle * Core::Math::toRad;
92inline void SpotLight::setOuterAngleInDegrees( Scalar angle ) {
93 m_outerAngle = Core::Math::toRad *
angle;
96inline Scalar SpotLight::getInnerAngle()
const {
100inline Scalar SpotLight::getOuterAngle()
const {
104inline void SpotLight::setAttenuation(
const Attenuation& attenuation ) {
105 m_attenuation = attenuation;
109 m_attenuation.quadratic );
112inline void SpotLight::setAttenuation( Scalar constant, Scalar linear, Scalar quadratic ) {
113 setAttenuation( { constant, linear, quadratic } );
116inline const SpotLight::Attenuation& SpotLight::getAttenuation()
const {
117 return m_attenuation;
void setVariable(const std::string &name, RenderParameters &rp)
overload create ref wrapper for RenderParameters variable
An entity is an scene element. It ties together components with a transform.
const Data::RenderParameters & getRenderParameters() const
Gives read-only access to the renderParameters of the light.
void setDirection(const Eigen::Matrix< Scalar, 3, 1 > &direction) override
void setPosition(const Eigen::Matrix< Scalar, 3, 1 > &position) override
Scalar angle(const Vector_ &v1, const Vector_ &v2)
hepler function to manage enum as underlying types in VariableSet