Fixed non-squared products

master
Christophe Riccio ago%!(EXTRA string=15 years)
parent 1a891b9efb
commit 4a599e1b93
  1. 56
      glm/core/dummy.cpp
  2. 25
      glm/core/type_mat2x3.inl
  3. 12
      glm/core/type_mat2x4.inl
  4. 21
      glm/core/type_mat3x2.inl
  5. 12
      glm/core/type_mat3x4.inl
  6. 16
      glm/core/type_mat4x2.inl
  7. 14
      glm/core/type_mat4x3.inl

@ -3,5 +3,61 @@
int main() int main()
{ {
//glm::mat2x3 m1(1.0f);
//glm::vec3 v1(1.0f);
//glm::vec2 w1 = m1 * v1;
{
glm::mat2x3 m(1.0f);
glm::vec2 u(1.0f);
glm::vec3 v(1.0f);
glm::vec3 a = m * u;
glm::vec2 b = v * m;
}
{
glm::mat2x4 m(1.0f);
glm::vec2 u(1.0f);
glm::vec4 v(1.0f);
glm::vec4 a = m * u;
glm::vec2 b = v * m;
}
{
glm::mat3x2 m(1.0f);
glm::vec3 u(1.0f);
glm::vec2 v(1.0f);
glm::vec2 a = m * u;
glm::vec3 b = v * m;
}
{
glm::mat3x4 m(1.0f);
glm::vec3 u(1.0f);
glm::vec4 v(1.0f);
glm::vec4 a = m * u;
glm::vec3 b = v * m;
}
{
glm::mat4x2 m(1.0f);
glm::vec4 u(1.0f);
glm::vec2 v(1.0f);
glm::vec2 a = m * u;
glm::vec4 b = v * m;
}
{
glm::mat4x3 m(1.0f);
glm::vec4 u(1.0f);
glm::vec3 v(1.0f);
glm::vec3 a = m * u;
glm::vec4 b = v * m;
}
//{
// glm::mat3x4 m(1.0f);
// glm::vec3 v(1.0f);
// glm::vec4 w = m * v;
//}
} }

@ -396,31 +396,28 @@ namespace detail
m[0] * s, m[0] * s,
m[1] * s); m[1] * s);
} }
template <typename T> template <typename T>
inline typename tmat2x3<T>::row_type operator* inline typename tmat2x3<T>::col_type operator*
( (
tmat2x3<T> const & m, tmat2x3<T> const & m,
typename tmat2x3<T>::col_type const & v typename tmat2x3<T>::row_type const & v)
)
{ {
return detail::tvec3<T>( return typename tmat2x3<T>::col_type(
m[0][0] * v.x + m[1][0] * v.y, m[0][0] * v.x + m[1][0] * v.y,
m[0][1] * v.x + m[1][1] * v.y, m[0][1] * v.x + m[1][1] * v.y,
m[0][2] * v.x + m[1][2] * v.y, m[0][2] * v.x + m[1][2] * v.y);
m[0][3] * v.x + m[1][3] * v.y);
} }
template <typename T> template <typename T>
inline typename tmat2x3<T>::col_type operator* inline typename tmat2x3<T>::row_type operator*
( (
typename tmat2x3<T>::row_type const & v, typename tmat2x3<T>::col_type const & v,
tmat2x3<T> const & m tmat2x3<T> const & m)
)
{ {
return detail::tvec2<T>( return typename tmat2x3<T>::row_type(
m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w, v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2],
m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w); v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2]);
} }
template <typename T> template <typename T>

@ -401,13 +401,13 @@ namespace detail
} }
template <typename T> template <typename T>
inline typename tmat2x4<T>::row_type operator* inline typename tmat2x4<T>::col_type operator*
( (
tmat2x4<T> const & m, tmat2x4<T> const & m,
typename tmat2x4<T>::col_type const & v typename tmat2x4<T>::row_type const & v
) )
{ {
return typename tmat2x4<T>::row_type( return typename tmat2x4<T>::col_type(
m[0][0] * v.x + m[1][0] * v.y, m[0][0] * v.x + m[1][0] * v.y,
m[0][1] * v.x + m[1][1] * v.y, m[0][1] * v.x + m[1][1] * v.y,
m[0][2] * v.x + m[1][2] * v.y, m[0][2] * v.x + m[1][2] * v.y,
@ -415,13 +415,13 @@ namespace detail
} }
template <typename T> template <typename T>
inline typename tmat2x4<T>::col_type operator* inline typename tmat2x4<T>::row_type operator*
( (
typename tmat2x4<T>::row_type const & v, typename tmat2x4<T>::col_type const & v,
tmat2x4<T> const & m tmat2x4<T> const & m
) )
{ {
return typename tmat2x4<T>::col_type( return typename tmat2x4<T>::row_type(
m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w, m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w,
m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w); m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w);
} }

@ -412,27 +412,26 @@ namespace detail
} }
template <typename T> template <typename T>
inline detail::tvec2<T> operator* inline typename tmat3x2<T>::col_type operator*
( (
tmat3x2<T> const & m, tmat3x2<T> const & m,
detail::tvec3<T> const & v typename tmat3x2<T>::row_type const & v)
)
{ {
return detail::tvec2<T>( return typename tmat3x2<T>::col_type(
m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z, m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z,
m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z); m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z);
} }
template <typename T> template <typename T>
inline detail::tvec3<T> operator* inline typename tmat3x2<T>::row_type operator*
( (
detail::tvec2<T> const & v, typename tmat3x2<T>::col_type const & v,
tmat3x2<T> const & m tmat3x2<T> const & m)
)
{ {
return detail::tvec3<T>( return typename tmat3x2<T>::row_type(
m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w, v.x * m[0][0] + v.y * m[0][1],
m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w); v.x * m[1][0] + v.y * m[1][1],
v.x * m[2][0] + v.y * m[2][1]);
} }
template <typename T> template <typename T>

@ -433,13 +433,13 @@ namespace detail
} }
template <typename T> template <typename T>
inline typename tmat3x4<T>::row_type operator* inline typename tmat3x4<T>::col_type operator*
( (
tmat3x4<T> const & m, tmat3x4<T> const & m,
typename tmat3x4<T>::col_type const & v typename tmat3x4<T>::row_type const & v
) )
{ {
return typename tmat3x4<T>::row_type( return typename tmat3x4<T>::col_type(
m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z, m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z,
m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z, m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z,
m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z, m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z,
@ -447,13 +447,13 @@ namespace detail
} }
template <typename T> template <typename T>
inline typename tmat3x4<T>::col_type operator* inline typename tmat3x4<T>::row_type operator*
( (
typename tmat3x4<T>::row_type const & v, typename tmat3x4<T>::col_type const & v,
tmat3x4<T> const & m tmat3x4<T> const & m
) )
{ {
return typename tmat3x4<T>::col_type( return typename tmat3x4<T>::row_type(
m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w, m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w,
m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w, m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w,
m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z + m[3][2] * v.w); m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z + m[3][2] * v.w);

@ -463,15 +463,14 @@ namespace detail
m[2] * s, m[2] * s,
m[3] * s); m[3] * s);
} }
template <typename T> template <typename T>
inline typename tmat4x2<T>::row_type operator* inline typename tmat4x2<T>::col_type operator*
( (
tmat4x2<T> const & m, tmat4x2<T> const & m,
typename tmat4x2<T>::col_type const & v typename tmat4x2<T>::row_type const & v)
)
{ {
return typename tmat4x2<T>::row_type( return typename tmat4x2<T>::col_type(
m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w, m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w,
m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w); m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w);
} }
@ -479,11 +478,10 @@ namespace detail
template <typename T> template <typename T>
inline typename tmat4x2<T>::row_type operator* inline typename tmat4x2<T>::row_type operator*
( (
typename tmat4x2<T>::row_type const & v, typename tmat4x2<T>::col_type const & v,
tmat4x2<T> const & m tmat4x2<T> const & m)
)
{ {
return typename tmat4x2<T>::row_type( return typename tmat4x2<T>::row_type(
v.x * m[0][0] + v.y * m[0][1], v.x * m[0][0] + v.y * m[0][1],
v.x * m[1][0] + v.y * m[1][1], v.x * m[1][0] + v.y * m[1][1],
v.x * m[2][0] + v.y * m[2][1], v.x * m[2][0] + v.y * m[2][1],

@ -455,22 +455,24 @@ namespace detail
} }
template <typename T> template <typename T>
inline typename tmat4x3<T>::row_type operator* ( inline typename tmat4x3<T>::col_type operator*
(
tmat4x3<T> const & m, tmat4x3<T> const & m,
typename tmat4x3<T>::col_type const & v) typename tmat4x3<T>::row_type const & v)
{ {
return row_type( return typename tmat4x3<T>::col_type(
m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w, m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w,
m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w, m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w,
m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z + m[3][2] * v.w); m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z + m[3][2] * v.w);
} }
template <typename T> template <typename T>
inline typename tmat4x3<T>::col_type operator* ( inline typename tmat4x3<T>::row_type operator*
typename tmat4x3<T>::row_type const & v, (
typename tmat4x3<T>::col_type const & v,
tmat4x3<T> const & m) tmat4x3<T> const & m)
{ {
return col_type( return typename tmat4x3<T>::row_type(
v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2], v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2],
v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2], v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2],
v.x * m[2][0] + v.y * m[2][1] + v.z * m[2][2], v.x * m[2][0] + v.y * m[2][1] + v.z * m[2][2],

Loading…
Cancel
Save