1 /* 2 * This file is part of the Colobot: Gold Edition source code 3 * Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam 4 * http://epsitec.ch; http://colobot.info; http://github.com/colobot 5 * 6 * This program is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation, either version 3 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 14 * See the GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program. If not, see http://gnu.org/licenses 18 */ 19 20 /** 21 * \file graphics/core/light.h 22 * \brief Light struct and related enums 23 */ 24 25 #pragma once 26 27 28 #include "graphics/core/color.h" 29 30 #include "math/vector.h" 31 32 33 // Graphics module namespace 34 namespace Gfx 35 { 36 37 /** 38 * \enum LightType 39 * \brief Type of light in 3D scene 40 */ 41 enum LightType 42 { 43 LIGHT_POINT, 44 LIGHT_SPOT, 45 LIGHT_DIRECTIONAL 46 }; 47 48 /** 49 * \struct Light 50 * \brief Properties of light in 3D scene 51 * 52 * This structure was created as analog to DirectX's D3DLIGHT. 53 */ 54 struct Light 55 { 56 //! Type of light source 57 LightType type = LIGHT_POINT; 58 //! Color of ambient light 59 Color ambient = Color(0.4f, 0.4f, 0.4f); 60 //! Color of diffuse light 61 Color diffuse = Color(0.8f, 0.8f, 0.8f); 62 //! Color of specular light 63 Color specular = Color(1.0f, 1.0f, 1.0f); 64 //! Position in world space (for point & spot lights) 65 Math::Vector position = Math::Vector(0.0f, 0.0f, 0.0f); 66 //! Direction in world space (for directional & spot lights) 67 Math::Vector direction = Math::Vector(0.0f, 0.0f, 1.0f); 68 //! Constant attenuation factor 69 float attenuation0 = 1.0f; 70 //! Linear attenuation factor 71 float attenuation1 = 0.0f; 72 //! Quadratic attenuation factor 73 float attenuation2 = 0.0f; 74 //! Angle of spotlight cone (0-PI/2 radians) 75 float spotAngle = Math::PI/2.0f; 76 //! Intensity of spotlight (0 = uniform; 128 = most intense) 77 float spotIntensity = 0.0f; 78 79 //! Loads default values LoadDefaultLight80 void LoadDefault() 81 { 82 *this = Light(); 83 } 84 }; 85 86 87 } // namespace Gfx 88 89