master
ブランチ master
VulkanExample / dep / include / glm / gtx / transform2.inl
3.9 KB、128行 生 Blame 履歴
1/// @ref gtx_transform2
2
3namespace glm
4{
5 template<typename T, qualifier Q>
6 GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearX2D(mat<3, 3, T, Q> const& m, T s)
7 {
8 mat<3, 3, T, Q> r(1);
9 r[1][0] = s;
10 return m * r;
11 }
12
13 template<typename T, qualifier Q>
14 GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearY2D(mat<3, 3, T, Q> const& m, T s)
15 {
16 mat<3, 3, T, Q> r(1);
17 r[0][1] = s;
18 return m * r;
19 }
20
21 template<typename T, qualifier Q>
22 GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearX3D(mat<4, 4, T, Q> const& m, T s, T t)
23 {
24 mat<4, 4, T, Q> r(1);
25 r[0][1] = s;
26 r[0][2] = t;
27 return m * r;
28 }
29
30 template<typename T, qualifier Q>
31 GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearY3D(mat<4, 4, T, Q> const& m, T s, T t)
32 {
33 mat<4, 4, T, Q> r(1);
34 r[1][0] = s;
35 r[1][2] = t;
36 return m * r;
37 }
38
39 template<typename T, qualifier Q>
40 GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearZ3D(mat<4, 4, T, Q> const& m, T s, T t)
41 {
42 mat<4, 4, T, Q> r(1);
43 r[2][0] = s;
44 r[2][1] = t;
45 return m * r;
46 }
47
48 template<typename T, qualifier Q>
49 GLM_FUNC_QUALIFIER mat<3, 3, T, Q> reflect2D(mat<3, 3, T, Q> const& m, vec<2, T, Q> const& normal, T distance)
50 {
51 mat<3, 3, T, Q> r(static_cast<T>(1));
52 r[0][0] = static_cast<T>(1) - static_cast<T>(2) * normal.x * normal.x;
53 r[0][1] = -static_cast<T>(2) * normal.y * normal.x;
54 r[1][0] = -static_cast<T>(2) * normal.x * normal.y;
55 r[1][1] = static_cast<T>(1) - static_cast<T>(2) * normal.y * normal.y;
56 r[2][0] = -static_cast<T>(2) * normal.x * distance;
57 r[2][1] = -static_cast<T>(2) * normal.y * distance;
58 return m * r;
59 }
60
61 template<typename T, qualifier Q>
62 GLM_FUNC_QUALIFIER mat<4, 4, T, Q> reflect3D(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& normal, T distance)
63 {
64 mat<4, 4, T, Q> r(static_cast<T>(1));
65 r[0][0] = static_cast<T>(1) - static_cast<T>(2) * normal.x * normal.x;
66 r[0][1] = -static_cast<T>(2) * normal.y * normal.x;
67 r[0][2] = -static_cast<T>(2) * normal.z * normal.x;
68 r[1][0] = -static_cast<T>(2) * normal.x * normal.y;
69 r[1][1] = static_cast<T>(1) - static_cast<T>(2) * normal.y * normal.y;
70 r[1][2] = -static_cast<T>(2) * normal.z * normal.y;
71 r[2][0] = -static_cast<T>(2) * normal.x * normal.z;
72 r[2][1] = -static_cast<T>(2) * normal.y * normal.z;
73 r[2][2] = static_cast<T>(1) - static_cast<T>(2) * normal.z * normal.z;
74 r[3][0] = -static_cast<T>(2) * normal.x * distance;
75 r[3][1] = -static_cast<T>(2) * normal.y * distance;
76 r[3][2] = -static_cast<T>(2) * normal.z * distance;
77 return m * r;
78 }
79
80 template<typename T, qualifier Q>
81 GLM_FUNC_QUALIFIER mat<3, 3, T, Q> proj2D(
82 const mat<3, 3, T, Q>& m,
83 const vec<3, T, Q>& normal)
84 {
85 mat<3, 3, T, Q> r(static_cast<T>(1));
86 r[0][0] = static_cast<T>(1) - normal.x * normal.x;
87 r[0][1] = - normal.x * normal.y;
88 r[1][0] = - normal.x * normal.y;
89 r[1][1] = static_cast<T>(1) - normal.y * normal.y;
90 return m * r;
91 }
92
93 template<typename T, qualifier Q>
94 GLM_FUNC_QUALIFIER mat<4, 4, T, Q> proj3D(
95 const mat<4, 4, T, Q>& m,
96 const vec<3, T, Q>& normal)
97 {
98 mat<4, 4, T, Q> r(static_cast<T>(1));
99 r[0][0] = static_cast<T>(1) - normal.x * normal.x;
100 r[0][1] = - normal.x * normal.y;
101 r[0][2] = - normal.x * normal.z;
102 r[1][0] = - normal.x * normal.y;
103 r[1][1] = static_cast<T>(1) - normal.y * normal.y;
104 r[1][2] = - normal.y * normal.z;
105 r[2][0] = - normal.x * normal.z;
106 r[2][1] = - normal.y * normal.z;
107 r[2][2] = static_cast<T>(1) - normal.z * normal.z;
108 return m * r;
109 }
110
111 template<typename T, qualifier Q>
112 GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scaleBias(T scale, T bias)
113 {
114 mat<4, 4, T, Q> result;
115 result[3] = vec<4, T, Q>(vec<3, T, Q>(bias), static_cast<T>(1));
116 result[0][0] = scale;
117 result[1][1] = scale;
118 result[2][2] = scale;
119 return result;
120 }
121
122 template<typename T, qualifier Q>
123 GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scaleBias(mat<4, 4, T, Q> const& m, T scale, T bias)
124 {
125 return m * scaleBias<T, Q>(scale, bias);
126 }
127}//namespace glm
128