1 /* 2 Copyright (c) 2013 yvt 3 4 This file is part of OpenSpades. 5 6 OpenSpades 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 OpenSpades 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. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with OpenSpades. If not, see <http://www.gnu.org/licenses/>. 18 19 */ 20 21 #include "GLDynamicLight.h" 22 23 namespace spades { 24 namespace draw { GLDynamicLight(const client::DynamicLightParam & param)25 GLDynamicLight::GLDynamicLight(const client::DynamicLightParam ¶m) : param(param) { 26 27 if (param.type == client::DynamicLightTypeSpotlight) { 28 float t = tanf(param.spotAngle * .5f) * 2.f; 29 Matrix4 mat; 30 mat = Matrix4::FromAxis(param.spotAxis[0], param.spotAxis[1], param.spotAxis[2], 31 param.origin); 32 mat = mat * Matrix4::Scale(t, t, 1.f); 33 34 projMatrix = mat.InversedFast(); 35 36 Matrix4 m = Matrix4::Identity(); 37 m.m[15] = 0.f; 38 m.m[11] = 1.f; 39 40 m.m[8] += .5f; 41 m.m[9] += .5f; 42 projMatrix = m * projMatrix; 43 } 44 } 45 } 46 } 47