diff options
author | Lizzy Fleckenstein <eliasfleckenstein@web.de> | 2023-04-13 08:40:18 +0200 |
---|---|---|
committer | Lizzy Fleckenstein <eliasfleckenstein@web.de> | 2023-04-13 18:01:09 +0200 |
commit | bf90df100e120e272c14c7975a22ed01bf3ad215 (patch) | |
tree | 073f4cf268a7f9407e5ad4a313ae76a619ff1dcc /source/Irrlicht/SLight.h | |
parent | 7a3fc62ada4001d5bb6c97ed26ec19a4e7c9d9ac (diff) | |
download | irrlicht-bf90df100e120e272c14c7975a22ed01bf3ad215.tar.xz |
Add back lighting system
Code is taken from latest irrlicht trunk; this is relevant because there have been fixes to stencil shadows since 1.8.5 (irrlicht SVN revision 5933).
Diffstat (limited to 'source/Irrlicht/SLight.h')
-rw-r--r-- | source/Irrlicht/SLight.h | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/source/Irrlicht/SLight.h b/source/Irrlicht/SLight.h new file mode 100644 index 0000000..f23b375 --- /dev/null +++ b/source/Irrlicht/SLight.h @@ -0,0 +1,101 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt
+// This file is part of the "Irrlicht Engine".
+// For conditions of distribution and use, see copyright notice in irrlicht.h
+
+#ifndef S_LIGHT_H_INCLUDED
+#define S_LIGHT_H_INCLUDED
+
+#include "SColor.h"
+#include "vector3d.h"
+
+namespace irr
+{
+namespace video
+{
+
+//! Enumeration for different types of lights
+enum E_LIGHT_TYPE
+{
+ //! point light, it has a position in space and radiates light in all directions
+ ELT_POINT,
+ //! spot light, it has a position in space, a direction, and a limited cone of influence
+ ELT_SPOT,
+ //! directional light, coming from a direction from an infinite distance
+ ELT_DIRECTIONAL,
+
+ //! Only used for counting the elements of this enum
+ ELT_COUNT
+};
+
+//! Names for light types
+const c8* const LightTypeNames[] =
+{
+ "Point",
+ "Spot",
+ "Directional",
+ 0
+};
+
+//! structure for holding data describing a dynamic point light.
+/** Irrlicht supports point lights, spot lights, and directional lights.
+*/
+struct SLight
+{
+ SLight() : AmbientColor(0.f,0.f,0.f), DiffuseColor(1.f,1.f,1.f),
+ SpecularColor(1.f,1.f,1.f), Attenuation(1.f,0.f,0.f),
+ OuterCone(45.f), InnerCone(0.f), Falloff(2.f),
+ Position(0.f,0.f,0.f), Direction(0.f,0.f,1.f),
+ Radius(100.f), Type(ELT_POINT), CastShadows(true)
+ {}
+
+ //! Ambient color emitted by the light
+ SColorf AmbientColor;
+
+ //! Diffuse color emitted by the light.
+ /** This is the primary color you want to set. */
+ SColorf DiffuseColor;
+
+ //! Specular color emitted by the light.
+ /** For details how to use specular highlights, see SMaterial::Shininess */
+ SColorf SpecularColor;
+
+ //! Attenuation factors (constant, linear, quadratic)
+ /** Changes the light strength fading over distance.
+ Can also be altered by setting the radius, Attenuation will change to
+ (0,1.f/radius,0). Can be overridden after radius was set. */
+ core::vector3df Attenuation;
+
+ //! The angle of the spot's outer cone. Ignored for other lights.
+ f32 OuterCone;
+
+ //! The angle of the spot's inner cone. Ignored for other lights.
+ f32 InnerCone;
+
+ //! The light strength's decrease between Outer and Inner cone. Only for spot lights
+ f32 Falloff;
+
+ //! Read-ONLY! Position of the light.
+ /** If Type is ELT_DIRECTIONAL, it is ignored. Changed via light scene node's position. */
+ core::vector3df Position;
+
+ //! Read-ONLY! Direction of the light.
+ /** If Type is ELT_POINT, it is ignored. Changed via light scene node's rotation. */
+ core::vector3df Direction;
+
+ //! Read-ONLY! Radius of light. Everything within this radius will be lighted.
+ /** On OpenGL light doesn't stop at radius. To get same light as in OpenGL in other drivers
+ do set the radius to a large value like sqrt(FLT_MAX) and then set the Attenuation afterwards.
+ */
+ f32 Radius;
+
+ //! Read-ONLY! Type of the light. Default: ELT_POINT
+ E_LIGHT_TYPE Type;
+
+ //! Read-ONLY! Does the light cast shadows?
+ bool CastShadows:1;
+};
+
+} // end namespace video
+} // end namespace irr
+
+#endif
|