Explorar el Código

math: add vecN::axis() factory.

undefined
Sam Hocevar hace 10 años
padre
commit
5e46ec76ba
Se han modificado 1 ficheros con 34 adiciones y 0 borrados
  1. +34
    -0
      src/lol/math/vector.h

+ 34
- 0
src/lol/math/vector.h Ver fichero

@@ -135,6 +135,16 @@ struct vec_t<T, N, FULL_SWIZZLE>
m_data[i] = (T)v[i];
}

/* Factory for base axis vectors, e.g. [1,0,0,…,0] */
static inline vec_t<T, N> axis(int i)
{
ASSERT(i >= 0);
ASSERT(i < N);
vec_t<T, N> ret((T)0);
ret[i] = (T)1;
return ret;
}

/* Constructor for initializer_list. We need these ugly
* loops until C++ lets us initialize m_data directly. */
inline vec_t(std::initializer_list<element> const &list)
@@ -235,6 +245,14 @@ struct vec_t<T,2>
explicit inline constexpr vec_t(T X)
: x(X), y(X) {}

/* Factory for base axis vectors, e.g. [1,0,0,…,0] */
static inline vec_t<T,2> axis(int i)
{
ASSERT(i >= 0);
ASSERT(i < 2);
return vec_t<T,2>((T)(i == 0), (T)(i == 1));
}

LOL_COMMON_MEMBER_OPS(x)

static const vec_t<T,2> zero;
@@ -346,6 +364,14 @@ struct vec_t<T,3>
explicit inline constexpr vec_t(T X, vec_t<T,2> YZ)
: x(X), y(YZ.x), z(YZ.y) {}

/* Factory for base axis vectors, e.g. [1,0,0,…,0] */
static inline vec_t<T,3> axis(int i)
{
ASSERT(i >= 0);
ASSERT(i < 3);
return vec_t<T,3>((T)(i == 0), (T)(i == 1), (T)(i == 2));
}

LOL_COMMON_MEMBER_OPS(x)

static vec_t<T,3> toeuler_xyx(quat_t<T> const &q);
@@ -592,6 +618,14 @@ struct vec_t<T,4>
explicit inline constexpr vec_t(T X, vec_t<T,3> YZW)
: x(X), y(YZW.x), z(YZW.y), w(YZW.z) {}

/* Factory for base axis vectors, e.g. [1,0,0,…,0] */
static inline vec_t<T,4> axis(int i)
{
ASSERT(i >= 0);
ASSERT(i < 4);
return vec_t<T,4>((T)(i == 0), (T)(i == 1), (T)(i == 2), (T)(i == 3));
}

LOL_COMMON_MEMBER_OPS(x)

static const vec_t<T,4> zero;


Cargando…
Cancelar
Guardar