1 // Copyright (C) 2002-2012 Nikolaus Gebhardt
2 // This file is part of the "Irrlicht Engine".
3 // For conditions of distribution and use, see copyright notice in irrlicht.h
4 
5 #ifndef __S_LIGHT_H_INCLUDED__
6 #define __S_LIGHT_H_INCLUDED__
7 
8 #include "SColor.h"
9 
10 namespace irr
11 {
12 namespace video
13 {
14 
15 //! Enumeration for different types of lights
16 enum E_LIGHT_TYPE
17 {
18 	//! point light, it has a position in space and radiates light in all directions
19 	ELT_POINT,
20 	//! spot light, it has a position in space, a direction, and a limited cone of influence
21 	ELT_SPOT,
22 	//! directional light, coming from a direction from an infinite distance
23 	ELT_DIRECTIONAL,
24 
25 	//! Only used for counting the elements of this enum
26 	ELT_COUNT
27 };
28 
29 //! Names for light types
30 const c8* const LightTypeNames[] =
31 {
32 	"Point",
33 	"Spot",
34 	"Directional",
35 	0
36 };
37 
38 //! structure for holding data describing a dynamic point light.
39 /** Irrlicht supports point lights, spot lights, and directional lights.
40 */
41 struct SLight
42 {
SLightSLight43 	SLight() : AmbientColor(0.f,0.f,0.f), DiffuseColor(1.f,1.f,1.f),
44 		SpecularColor(1.f,1.f,1.f), Attenuation(1.f,0.f,0.f),
45 		OuterCone(45.f), InnerCone(0.f), Falloff(2.f),
46 		Position(0.f,0.f,0.f), Direction(0.f,0.f,1.f),
47 		Radius(100.f), Type(ELT_POINT), CastShadows(true)
48 		{}
49 
50 	//! Ambient color emitted by the light
51 	SColorf AmbientColor;
52 
53 	//! Diffuse color emitted by the light.
54 	/** This is the primary color you want to set. */
55 	SColorf DiffuseColor;
56 
57 	//! Specular color emitted by the light.
58 	/** For details how to use specular highlights, see SMaterial::Shininess */
59 	SColorf SpecularColor;
60 
61 	//! Attenuation factors (constant, linear, quadratic)
62 	/** Changes the light strength fading over distance.
63 	Can also be altered by setting the radius, Attenuation will change to
64 	(0,1.f/radius,0). Can be overridden after radius was set. */
65 	core::vector3df Attenuation;
66 
67 	//! The angle of the spot's outer cone. Ignored for other lights.
68 	f32 OuterCone;
69 
70 	//! The angle of the spot's inner cone. Ignored for other lights.
71 	f32 InnerCone;
72 
73 	//! The light strength's decrease between Outer and Inner cone.
74 	f32 Falloff;
75 
76 	//! Read-ONLY! Position of the light.
77 	/** If Type is ELT_DIRECTIONAL, it is ignored. Changed via light scene node's position. */
78 	core::vector3df Position;
79 
80 	//! Read-ONLY! Direction of the light.
81 	/** If Type is ELT_POINT, it is ignored. Changed via light scene node's rotation. */
82 	core::vector3df Direction;
83 
84 	//! Read-ONLY! Radius of light. Everything within this radius will be lighted.
85 	f32 Radius;
86 
87 	//! Read-ONLY! Type of the light. Default: ELT_POINT
88 	E_LIGHT_TYPE Type;
89 
90 	//! Read-ONLY! Does the light cast shadows?
91 	bool CastShadows:1;
92 };
93 
94 } // end namespace video
95 } // end namespace irr
96 
97 #endif
98 
99