blob: 04d57961b61d93997fa5fa1bc9403b7c7d25b611 [file] [log] [blame]
Tony-LunarGb0b195d2015-05-13 15:01:06 -06001///////////////////////////////////////////////////////////////////////////////////////////////////
2// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
3///////////////////////////////////////////////////////////////////////////////////////////////////
4// Created : 2005-02-28
5// Updated : 2005-04-23
6// Licence : This source is under MIT License
7// File : glm/gtx/transform2.inl
8///////////////////////////////////////////////////////////////////////////////////////////////////
9
10namespace glm
11{
12 template <typename T, precision P>
13 GLM_FUNC_QUALIFIER detail::tmat3x3<T, P> shearX2D(
14 const detail::tmat3x3<T, P>& m,
15 T s)
16 {
17 detail::tmat3x3<T, P> r(1);
18 r[0][1] = s;
19 return m * r;
20 }
21
22 template <typename T, precision P>
23 GLM_FUNC_QUALIFIER detail::tmat3x3<T, P> shearY2D(
24 const detail::tmat3x3<T, P>& m,
25 T s)
26 {
27 detail::tmat3x3<T, P> r(1);
28 r[1][0] = s;
29 return m * r;
30 }
31
32 template <typename T, precision P>
33 GLM_FUNC_QUALIFIER detail::tmat4x4<T, P> shearX3D(
34 const detail::tmat4x4<T, P>& m,
35 T s,
36 T t)
37 {
38 detail::tmat4x4<T, P> r(1);
39 r[1][0] = s;
40 r[2][0] = t;
41 return m * r;
42 }
43
44 template <typename T, precision P>
45 GLM_FUNC_QUALIFIER detail::tmat4x4<T, P> shearY3D(
46 const detail::tmat4x4<T, P>& m,
47 T s,
48 T t)
49 {
50 detail::tmat4x4<T, P> r(1);
51 r[0][1] = s;
52 r[2][1] = t;
53 return m * r;
54 }
55
56 template <typename T, precision P>
57 GLM_FUNC_QUALIFIER detail::tmat4x4<T, P> shearZ3D(
58 const detail::tmat4x4<T, P>& m,
59 T s,
60 T t)
61 {
62 detail::tmat4x4<T, P> r(1);
63 r[0][2] = s;
64 r[1][2] = t;
65 return m * r;
66 }
67
68 template <typename T, precision P>
69 GLM_FUNC_QUALIFIER detail::tmat3x3<T, P> reflect2D(
70 const detail::tmat3x3<T, P>& m,
71 const detail::tvec3<T, P>& normal)
72 {
73 detail::tmat3x3<T, P> r(1);
74 r[0][0] = 1 - 2 * normal.x * normal.x;
75 r[0][1] = -2 * normal.x * normal.y;
76 r[1][0] = -2 * normal.x * normal.y;
77 r[1][1] = 1 - 2 * normal.y * normal.y;
78 return m * r;
79 }
80
81 template <typename T, precision P>
82 GLM_FUNC_QUALIFIER detail::tmat4x4<T, P> reflect3D(
83 const detail::tmat4x4<T, P>& m,
84 const detail::tvec3<T, P>& normal)
85 {
86 detail::tmat4x4<T, P> r(1);
87 r[0][0] = 1 - 2 * normal.x * normal.x;
88 r[0][1] = -2 * normal.x * normal.y;
89 r[0][2] = -2 * normal.x * normal.z;
90
91 r[1][0] = -2 * normal.x * normal.y;
92 r[1][1] = 1 - 2 * normal.y * normal.y;
93 r[1][2] = -2 * normal.y * normal.z;
94
95 r[2][0] = -2 * normal.x * normal.z;
96 r[2][1] = -2 * normal.y * normal.z;
97 r[2][2] = 1 - 2 * normal.z * normal.z;
98 return m * r;
99 }
100
101 template <typename T, precision P>
102 GLM_FUNC_QUALIFIER detail::tmat3x3<T, P> proj2D(
103 const detail::tmat3x3<T, P>& m,
104 const detail::tvec3<T, P>& normal)
105 {
106 detail::tmat3x3<T, P> r(1);
107 r[0][0] = 1 - normal.x * normal.x;
108 r[0][1] = - normal.x * normal.y;
109 r[1][0] = - normal.x * normal.y;
110 r[1][1] = 1 - normal.y * normal.y;
111 return m * r;
112 }
113
114 template <typename T, precision P>
115 GLM_FUNC_QUALIFIER detail::tmat4x4<T, P> proj3D(
116 const detail::tmat4x4<T, P>& m,
117 const detail::tvec3<T, P>& normal)
118 {
119 detail::tmat4x4<T, P> r(1);
120 r[0][0] = 1 - normal.x * normal.x;
121 r[0][1] = - normal.x * normal.y;
122 r[0][2] = - normal.x * normal.z;
123 r[1][0] = - normal.x * normal.y;
124 r[1][1] = 1 - normal.y * normal.y;
125 r[1][2] = - normal.y * normal.z;
126 r[2][0] = - normal.x * normal.z;
127 r[2][1] = - normal.y * normal.z;
128 r[2][2] = 1 - normal.z * normal.z;
129 return m * r;
130 }
131
132 template <typename T, precision P>
133 GLM_FUNC_QUALIFIER detail::tmat4x4<T, P> scaleBias(
134 T scale,
135 T bias)
136 {
137 detail::tmat4x4<T, P> result;
138 result[3] = detail::tvec4<T, P>(detail::tvec3<T, P>(bias), T(1));
139 result[0][0] = scale;
140 result[1][1] = scale;
141 result[2][2] = scale;
142 return result;
143 }
144
145 template <typename T, precision P>
146 GLM_FUNC_QUALIFIER detail::tmat4x4<T, P> scaleBias(
147 const detail::tmat4x4<T, P>& m,
148 T scale,
149 T bias)
150 {
151 return m * scaleBias(scale, bias);
152 }
153}//namespace glm
154