11// ------------------------------------------------------------------------------
2- // Copyright (c) 2018-2019 Michele Morrone
2+ // Copyright (c) 2018-2020 Michele Morrone
33// All rights reserved.
44//
55// https://michelemorrone.eu - https://BrutPitt.com
@@ -256,34 +256,34 @@ TEMPLATE_TYPENAME_T class Quat {
256256TEMPLATE_TYPENAME_T class Mat3 {
257257public:
258258 union {
259- struct { VEC3_T v0 , v1 , v2 ; } ;
259+ VEC3_T v[ 3 ] ;
260260 struct { T m00, m01, m02,
261261 m10, m11, m12,
262262 m20, m21, m22; };
263263 };
264264
265265 Mat3 () {}
266- Mat3 (T s) : v0 (s, 0 , 0 ), v1 (0 , s, 0 ), v2 (0 , 0 , s) {}
267- Mat3 (const VEC3_T & v0, const VEC3_T & v1, const VEC3_T & v2) : v0(v0) , v1(v1) , v2(v2) {}
266+ Mat3 (T s) : v { VEC3_T (s, 0 , 0 ), VEC3_T (0 , s, 0 ), VEC3_T (0 , 0 , s) } {}
267+ Mat3 (const VEC3_T & v0, const VEC3_T & v1, const VEC3_T & v2) : v {v0 , v1, v2 } {}
268268 Mat3 (const MAT4_T & m);
269269 Mat3 (T v0x, T v0y, T v0z,
270270 T v1x, T v1y, T v1z,
271- T v2x, T v2y, T v2z) : v0 (v0x, v0y, v0z), v1 (v1x, v1y, v1z), v2 (v2x, v2y, v2z) {}
271+ T v2x, T v2y, T v2z) : v { VEC3_T (v0x, v0y, v0z), VEC3_T (v1x, v1y, v1z), VEC3_T (v2x, v2y, v2z) } {}
272272
273- const VEC3_T & operator [](int i) const { return *(&v0 + i) ; }
274- VEC3_T & operator [](int i) { return *(&v0 + i) ; }
273+ const VEC3_T & operator [](int i) const { return v[i] ; }
274+ VEC3_T & operator [](int i) { return v[i] ; }
275275
276- const Mat3 operator -() const { return Mat3 (-v0 , -v1 , -v2 ); }
276+ const Mat3 operator -() const { return Mat3 (-v[ 0 ] , -v[ 1 ] , -v[ 2 ] ); }
277277
278- Mat3& operator +=(const Mat3& m) { v0 += m.v0 ; v1 += m.v1 ; v2 += m.v2 ; return *this ; }
279- Mat3& operator -=(const Mat3& m) { v0 -= m.v0 ; v1 -= m.v1 ; v2 -= m.v2 ; return *this ; }
278+ Mat3& operator +=(const Mat3& m) { v[0 ] += m.v [0 ]; v[1 ] += m.v [1 ]; v[2 ] += m.v [2 ]; return *this ; }
279+ Mat3& operator -=(const Mat3& m) { v[0 ] -= m.v [0 ]; v[1 ] -= m.v [1 ]; v[2 ] -= m.v [2 ]; return *this ; }
280+ Mat3& operator /=(const Mat3& m) { v[0 ] /= m.v [0 ]; v[1 ] /= m.v [1 ]; v[2 ] /= m.v [2 ]; return *this ; }
281+ Mat3& operator *=(T s) { v[0 ] *= s; v[1 ] *= s; v[2 ] *= s; return *this ; }
282+ Mat3& operator /=(T s) { v[0 ] /= s; v[1 ] /= s; v[2 ] /= s; return *this ; }
280283 Mat3& operator *=(const Mat3& m) { return *this = *this * m; }
281- Mat3& operator /=(const Mat3& m) { v0 /= m.v0 ; v1 /= m.v1 ; v2 /= m.v2 ; return *this ; }
282- Mat3& operator *=(T s) { v0 *= s; v1 *= s; v2 *= s; return *this ; }
283- Mat3& operator /=(T s) { v0 /= s; v1 /= s; v2 /= s; return *this ; }
284284
285- const Mat3 operator +(const Mat3& m) const { return Mat3 (v0 + m.v0 , v1 + m.v1 , v2 + m.v2 ); }
286- const Mat3 operator -(const Mat3& m) const { return Mat3 (v0 - m.v0 , v1 - m.v1 , v2 - m.v2 ); }
285+ const Mat3 operator +(const Mat3& m) const { return Mat3 (v[ 0 ] + m.v [ 0 ], v[ 1 ] + m.v [ 1 ], v[ 2 ] + m.v [ 2 ] ); }
286+ const Mat3 operator -(const Mat3& m) const { return Mat3 (v[ 0 ] - m.v [ 0 ], v[ 1 ] - m.v [ 1 ], v[ 2 ] - m.v [ 2 ] ); }
287287#define M (X,Y ) (m##X * m.m##Y)
288288 const Mat3 operator *(const Mat3& m) const { return Mat3 ( M (00 ,00 ) + M (10 ,01 ) + M (20 ,02 ),
289289 M (01 ,00 ) + M (11 ,01 ) + M (21 ,02 ),
@@ -295,8 +295,8 @@ TEMPLATE_TYPENAME_T class Mat3 {
295295 M (01 ,20 ) + M (11 ,21 ) + M (21 ,22 ),
296296 M (02 ,20 ) + M (12 ,21 ) + M (22 ,22 )); }
297297#undef M
298- const Mat3 operator *(T s) const { return Mat3 (v0 * s , v1 * s , v2 * s ); }
299- const Mat3 operator /(T s) const { return Mat3 (v0 / s , v1 / s , v2 / s ); }
298+ const Mat3 operator *(T s) const { return Mat3 (v[ 0 ] * s, v[ 1 ] * s, v[ 2 ] * s); }
299+ const Mat3 operator /(T s) const { return Mat3 (v[ 0 ] / s, v[ 1 ] / s, v[ 2 ] / s); }
300300
301301 const VEC3_T operator *(const VEC3_T & v) const { return VEC3_T (m00 * v.x + m10 * v.y + m20 * v.z ,
302302 m01 * v.x + m11 * v.y + m21 * v.z ,
@@ -309,38 +309,38 @@ TEMPLATE_TYPENAME_T class Mat3 {
309309TEMPLATE_TYPENAME_T class Mat4 {
310310public:
311311 union {
312- struct { VEC4_T v0 , v1 , v2 , v3 ; } ;
312+ VEC4_T v[ 4 ] ;
313313 struct { T m00, m01, m02, m03,
314314 m10, m11, m12, m13,
315315 m20, m21, m22, m23,
316316 m30, m31, m32, m33; };
317317 };
318318
319319 Mat4 () {}
320- Mat4 (T s) : v0 (s, 0 , 0 , 0 ), v1 (0 , s, 0 , 0 ), v2 (0 , 0 , s, 0 ), v3 (0 , 0 , 0 , s) {}
321- Mat4 (const VEC4_T & v0, const VEC4_T & v1, const VEC4_T & v2, const VEC4_T & v3) : v0(v0) , v1(v1) , v2(v2) , v3(v3) {}
322- Mat4 (const MAT3_T & m) : v0( VEC4_T (m.v0 ,0 )), v1( VEC4_T (m.v1 ,0 )), v2( VEC4_T (m.v2 ,0 )), v3 (0 , 0 , 0 , 1 ) {}
320+ Mat4 (T s) : v { VEC4_T (s, 0 , 0 , 0 ), VEC4_T (0 , s, 0 , 0 ), VEC4_T (0 , 0 , s, 0 ), VEC4_T (0 , 0 , 0 , s)} {}
321+ Mat4 (const VEC4_T & v0, const VEC4_T & v1, const VEC4_T & v2, const VEC4_T & v3) : v {v0 , v1, v2, v3} {}
322+ Mat4 (const MAT3_T & m) : v { VEC4_T (m.v [ 0 ] ,0 ), VEC4_T (m.v [ 1 ] ,0 ), VEC4_T (m.v [ 2 ] ,0 ), VEC4_T (0 , 0 , 0 , 1 )} {}
323323 Mat4 (T v0x, T v0y, T v0z, T v0w,
324324 T v1x, T v1y, T v1z, T v1w,
325325 T v2x, T v2y, T v2z, T v2w,
326- T v3x, T v3y, T v3z, T v3w) : v0 (v0x, v0y, v0z, v0w), v1 (v1x, v1y, v1z, v1w), v2 (v2x, v2y, v2z, v2w), v3 (v3x, v3y, v3z, v3w) {}
326+ T v3x, T v3y, T v3z, T v3w) : v { VEC4_T (v0x, v0y, v0z, v0w), VEC4_T (v1x, v1y, v1z, v1w), VEC4_T (v2x, v2y, v2z, v2w), VEC4_T (v3x, v3y, v3z, v3w) } {}
327327
328- const VEC4_T & operator [](int i) const { return *(&v0 + i) ; }
329- VEC4_T & operator [](int i) { return *(&v0 + i) ; }
328+ const VEC4_T & operator [](int i) const { return v[i] ; }
329+ VEC4_T & operator [](int i) { return v[i] ; }
330330
331- const Mat4 operator -() const { return Mat4 (-v0 , -v1 , -v2 , -v3 ); }
331+ const Mat4 operator -() const { return Mat4 (-v[ 0 ] , -v[ 1 ] , -v[ 2 ] , -v[ 3 ] ); }
332332
333- Mat4& operator +=(const Mat4& m) { v0 += m.v0 ; v1 += m.v1 ; v2 += m.v2 ; v3 += m.v3 ; return *this ; }
334- Mat4& operator -=(const Mat4& m) { v0 -= m.v0 ; v1 -= m.v1 ; v2 -= m.v2 ; v3 -= m.v3 ; return *this ; }
333+ Mat4& operator +=(const Mat4& m) { v[0 ] += m.v [0 ]; v[1 ] += m.v [1 ]; v[2 ] += m.v [2 ]; v[3 ] += m.v [3 ]; return *this ; }
334+ Mat4& operator -=(const Mat4& m) { v[0 ] -= m.v [0 ]; v[1 ] -= m.v [1 ]; v[2 ] -= m.v [2 ]; v[3 ] -= m.v [3 ]; return *this ; }
335+ Mat4& operator /=(const Mat4& m) { v[0 ] /= m.v [0 ]; v[1 ] /= m.v [1 ]; v[2 ] /= m.v [2 ]; v[3 ] /= m.v [3 ]; return *this ; }
336+ Mat4& operator *=(T s) { v[0 ] *= s; v[1 ] *= s; v[2 ] *= s; v[3 ] *= s; return *this ; }
337+ Mat4& operator /=(T s) { v[0 ] /= s; v[1 ] /= s; v[2 ] /= s; v[3 ] /= s; return *this ; }
335338 Mat4& operator *=(const Mat4& m) { return *this = *this * m; }
336- Mat4& operator /=(const Mat4& m) { v0 /= m.v0 ; v1 /= m.v1 ; v2 /= m.v2 ; v3 /= m.v3 ; return *this ; }
337- Mat4& operator *=(T s) { v0 *= s; v1 *= s; v2 *= s; v3 *= s; return *this ; }
338- Mat4& operator /=(T s) { v0 /= s; v1 /= s; v2 /= s; v3 /= s; return *this ; }
339-
340- const Mat4 operator +(const Mat4& m) const { return Mat4 (v0 + m.v0 , v1 + m.v1 , v2 + m.v2 , v3 + m.v3 ); }
341- const Mat4 operator -(const Mat4& m) const { return Mat4 (v0 - m.v0 , v1 - m.v1 , v2 - m.v2 , v3 - m.v3 ); }
342- const Mat4 operator *(T s) const { return Mat4 (v0 * s , v1 * s , v2 * s , v3 * s ); }
343- const Mat4 operator /(T s) const { return Mat4 (v0 / s , v1 / s , v2 / s , v3 / s ); }
339+
340+ const Mat4 operator +(const Mat4& m) const { return Mat4 (v[0 ] + m.v [0 ], v[1 ] + m.v [1 ], v[2 ] + m.v [2 ], v[3 ] + m.v [3 ]); }
341+ const Mat4 operator -(const Mat4& m) const { return Mat4 (v[0 ] - m.v [0 ], v[1 ] - m.v [1 ], v[2 ] - m.v [2 ], v[3 ] - m.v [3 ]); }
342+ const Mat4 operator *(T s) const { return Mat4 (v[0 ] * s , v[1 ] * s , v[2 ] * s , v[3 ] * s ); }
343+ const Mat4 operator /(T s) const { return Mat4 (v[0 ] / s , v[1 ] / s , v[2 ] / s , v[3 ] / s ); }
344344#define M (X,Y ) (m##X * m.m##Y)
345345 const Mat4 operator *(const Mat4& m) const { return Mat4 ( M (00 ,00 ) + M (10 ,01 ) + M (20 ,02 ) + M (30 ,03 ),
346346 M (01 ,00 ) + M (11 ,01 ) + M (21 ,02 ) + M (31 ,03 ),
@@ -369,7 +369,7 @@ TEMPLATE_TYPENAME_T class Mat4 {
369369// cast / conversion
370370// ////////////////////////
371371TEMPLATE_TYPENAME_T inline VEC3_T::Vec3 (const VEC4_T & v) : x(v.x), y(v.y), z(v.z) {}
372- TEMPLATE_TYPENAME_T inline MAT3_T::Mat3 (const MAT4_T & m) : v0(m.v0), v1(m.v1), v2(m.v2) {}
372+ TEMPLATE_TYPENAME_T inline MAT3_T::Mat3 (const MAT4_T & m) : v {m. v [ 0 ], m. v [ 1 ], m. v [ 2 ]} {}
373373TEMPLATE_TYPENAME_T inline MAT3_T mat3_cast (QUAT_T const & q) {
374374 T xx (q.x * q.x ); T yy (q.y * q.y ); T zz (q.z * q.z );
375375 T xz (q.x * q.z ); T xy (q.x * q.y ); T yz (q.y * q.z );
@@ -476,7 +476,7 @@ TEMPLATE_TYPENAME_T inline const MAT4_T inverse(MAT4_T const &m) {
476476 (v0 * f1 - v1 * f3 + v3 * f5) * signV,
477477 (v0 * f2 - v1 * f4 + v2 * f5) * -signV);
478478
479- VEC4_T v0r0 (m.v0 * VEC4_T (inv.m00 , inv.m10 , inv.m20 , inv.m30 ));
479+ VEC4_T v0r0 (m.v [ 0 ] * VEC4_T (inv.m00 , inv.m10 , inv.m20 , inv.m30 ));
480480 return inv * (T (1 ) / (v0r0.x + v0r0.y + v0r0.z + v0r0.w )); }// 1/determinant ==> "operator *" is faster
481481// external operators
482482// ////////////////////////
0 commit comments