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 &param) : 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