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