Преглед изворни кода

math: add SQT inverse method.

undefined
Sam Hocevar пре 9 година
родитељ
комит
5a15c90fcc
2 измењених фајлова са 31 додато и 0 уклоњено
  1. +18
    -0
      src/lol/math/transform.h
  2. +13
    -0
      src/t/math/sqt.cpp

+ 18
- 0
src/lol/math/transform.h Прегледај датотеку

@@ -460,6 +460,24 @@ static inline quat_t<T> operator /(quat_t<T> const &x, quat_t<T> const &y)
template<typename T> template<typename T>
extern quat_t<T> slerp(quat_t<T> const &qa, quat_t<T> const &qb, T f); extern quat_t<T> slerp(quat_t<T> const &qa, quat_t<T> const &qb, T f);


/*
* SQTs only
*/

template<typename T>
static inline sqt_t<T> inverse(sqt_t<T> const &tr)
{
auto inv_s = T(1) / tr.s;
auto inv_q = re(tr.q);
return sqt_t<T>(inv_s, inv_q, inv_q * tr.t * -inv_s);
}

template<typename T>
static inline sqt_t<T> operator /(sqt_t<T> const &x, sqt_t<T> const &y)
{
return x * inverse(y);
}

#if !LOL_FEATURE_CXX11_CONSTEXPR #if !LOL_FEATURE_CXX11_CONSTEXPR
#undef constexpr #undef constexpr
#endif #endif


+ 13
- 0
src/t/math/sqt.cpp Прегледај датотеку

@@ -72,6 +72,19 @@ lolunit_declare_fixture(sqt_test)
} }
} }


lolunit_declare_test(sqt_inverse)
{
for (vec4 v0 : test_vec4s)
{
vec4 v1 = inverse(test_sqt_1) * (test_sqt_1 * v0);

lolunit_assert_doubles_equal(v0.x, v1.x, 1e-5f);
lolunit_assert_doubles_equal(v0.y, v1.y, 1e-5f);
lolunit_assert_doubles_equal(v0.z, v1.z, 1e-5f);
lolunit_assert_doubles_equal(v0.w, v1.w, 1e-5f);
}
}

lolunit_declare_test(sqt_composition_vec4) lolunit_declare_test(sqt_composition_vec4)
{ {
/* We check that transforming a vec4 with an SQT and a /* We check that transforming a vec4 with an SQT and a


||||||
x
 
000:0
Loading…
Откажи
Сачувај