mirror of
https://github.com/g-truc/glm.git
synced 2024-11-26 10:14:35 +00:00
Merge branch '0.9.2' of ssh://ogl-math.git.sourceforge.net/gitroot/ogl-math/ogl-math into 0.9.2
This commit is contained in:
commit
5d2350f7c8
@ -452,7 +452,7 @@
|
|||||||
**/
|
**/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\defgroup gtx_vector_access GLM_GTX_vector_angle: Vector access
|
\defgroup gtx_vector_access GLM_GTX_vector_access: Vector access
|
||||||
\ingroup gtx
|
\ingroup gtx
|
||||||
|
|
||||||
\brief Function to set values to vectors
|
\brief Function to set values to vectors
|
||||||
|
@ -135,13 +135,10 @@
|
|||||||
// G++
|
// G++
|
||||||
#elif defined(__GNUC__) || defined(__llvm__) || defined(__clang__)
|
#elif defined(__GNUC__) || defined(__llvm__) || defined(__clang__)
|
||||||
# if defined (__llvm__)
|
# if defined (__llvm__)
|
||||||
# pragma message("LLVM")
|
|
||||||
# define GLM_COMPILER_GCC_EXTRA GLM_COMPILER_GCC_LLVM
|
# define GLM_COMPILER_GCC_EXTRA GLM_COMPILER_GCC_LLVM
|
||||||
# elif defined (__clang__)
|
# elif defined (__clang__)
|
||||||
# pragma message("CLANG")
|
|
||||||
# define GLM_COMPILER_GCC_EXTRA GLM_COMPILER_GCC_CLANG
|
# define GLM_COMPILER_GCC_EXTRA GLM_COMPILER_GCC_CLANG
|
||||||
# else
|
# else
|
||||||
# pragma message("GCC")
|
|
||||||
# define GLM_COMPILER_GCC_EXTRA 0
|
# define GLM_COMPILER_GCC_EXTRA 0
|
||||||
# endif
|
# endif
|
||||||
#
|
#
|
||||||
|
@ -343,7 +343,7 @@ namespace half_float ///< GLM_GTC_half_float extension: Add support for half pre
|
|||||||
/// 2 * 2 matrix of half-precision floating-point numbers.
|
/// 2 * 2 matrix of half-precision floating-point numbers.
|
||||||
/// From GLM_GTC_half_float extension.
|
/// From GLM_GTC_half_float extension.
|
||||||
typedef detail::tmat2x2<detail::thalf> hmat2;
|
typedef detail::tmat2x2<detail::thalf> hmat2;
|
||||||
|
|
||||||
/// 3 * 3 matrix of half-precision floating-point numbers.
|
/// 3 * 3 matrix of half-precision floating-point numbers.
|
||||||
/// From GLM_GTC_half_float extension.
|
/// From GLM_GTC_half_float extension.
|
||||||
typedef detail::tmat3x3<detail::thalf> hmat3;
|
typedef detail::tmat3x3<detail::thalf> hmat3;
|
||||||
@ -352,6 +352,42 @@ namespace half_float ///< GLM_GTC_half_float extension: Add support for half pre
|
|||||||
/// From GLM_GTC_half_float extension.
|
/// From GLM_GTC_half_float extension.
|
||||||
typedef detail::tmat4x4<detail::thalf> hmat4;
|
typedef detail::tmat4x4<detail::thalf> hmat4;
|
||||||
|
|
||||||
|
/// 2 * 2 matrix of half-precision floating-point numbers.
|
||||||
|
/// From GLM_GTC_half_float extension.
|
||||||
|
typedef detail::tmat2x2<detail::thalf> hmat2x2;
|
||||||
|
|
||||||
|
/// 2 * 3 matrix of half-precision floating-point numbers.
|
||||||
|
/// From GLM_GTC_half_float extension.
|
||||||
|
typedef detail::tmat2x3<detail::thalf> hmat2x3;
|
||||||
|
|
||||||
|
/// 2 * 4 matrix of half-precision floating-point numbers.
|
||||||
|
/// From GLM_GTC_half_float extension.
|
||||||
|
typedef detail::tmat2x4<detail::thalf> hmat2x4;
|
||||||
|
|
||||||
|
/// 3 * 2 matrix of half-precision floating-point numbers.
|
||||||
|
/// From GLM_GTC_half_float extension.
|
||||||
|
typedef detail::tmat3x2<detail::thalf> hmat3x2;
|
||||||
|
|
||||||
|
/// 3 * 3 matrix of half-precision floating-point numbers.
|
||||||
|
/// From GLM_GTC_half_float extension.
|
||||||
|
typedef detail::tmat3x3<detail::thalf> hmat3x3;
|
||||||
|
|
||||||
|
/// 3 * 4 matrix of half-precision floating-point numbers.
|
||||||
|
/// From GLM_GTC_half_float extension.
|
||||||
|
typedef detail::tmat3x4<detail::thalf> hmat3x4;
|
||||||
|
|
||||||
|
/// 4 * 2 matrix of half-precision floating-point numbers.
|
||||||
|
/// From GLM_GTC_half_float extension.
|
||||||
|
typedef detail::tmat4x2<detail::thalf> hmat4x2;
|
||||||
|
|
||||||
|
/// 4 * 3 matrix of half-precision floating-point numbers.
|
||||||
|
/// From GLM_GTC_half_float extension.
|
||||||
|
typedef detail::tmat4x3<detail::thalf> hmat4x3;
|
||||||
|
|
||||||
|
/// 4 * 4 matrix of half-precision floating-point numbers.
|
||||||
|
/// From GLM_GTC_half_float extension.
|
||||||
|
typedef detail::tmat4x4<detail::thalf> hmat4x4;
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
|
|
||||||
}// namespace half_float
|
}// namespace half_float
|
||||||
|
@ -74,6 +74,11 @@ namespace detail
|
|||||||
detail::tquat<T> operator- (
|
detail::tquat<T> operator- (
|
||||||
detail::tquat<T> const & q);
|
detail::tquat<T> const & q);
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
detail::tquat<T> operator+ (
|
||||||
|
detail::tquat<T> const & q,
|
||||||
|
detail::tquat<T> const & p);
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
detail::tquat<T> operator* (
|
detail::tquat<T> operator* (
|
||||||
detail::tquat<T> const & q,
|
detail::tquat<T> const & q,
|
||||||
@ -154,7 +159,7 @@ namespace quaternion ///< GLM_GTC_quaternion extension: Quaternion types and fun
|
|||||||
detail::tquat<T> mix(
|
detail::tquat<T> mix(
|
||||||
detail::tquat<T> const & x,
|
detail::tquat<T> const & x,
|
||||||
detail::tquat<T> const & y,
|
detail::tquat<T> const & y,
|
||||||
typename detail::tquat<T>::value_type const & a);
|
T const & a);
|
||||||
|
|
||||||
//! Returns the q conjugate.
|
//! Returns the q conjugate.
|
||||||
//! From GLM_GTC_quaternion extension.
|
//! From GLM_GTC_quaternion extension.
|
||||||
|
@ -147,20 +147,6 @@ namespace detail{
|
|||||||
//////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////
|
||||||
// tquat<valType> external operators
|
// tquat<valType> external operators
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
GLM_FUNC_QUALIFIER detail::tquat<T> operator*
|
|
||||||
(
|
|
||||||
detail::tquat<T> const & q,
|
|
||||||
detail::tquat<T> const & p
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return detail::tquat<T>(
|
|
||||||
q.w + p.w,
|
|
||||||
q.x + p.x,
|
|
||||||
q.y + p.y,
|
|
||||||
q.z + p.z);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
GLM_FUNC_QUALIFIER detail::tquat<T> operator-
|
GLM_FUNC_QUALIFIER detail::tquat<T> operator-
|
||||||
(
|
(
|
||||||
@ -170,6 +156,20 @@ namespace detail{
|
|||||||
return detail::tquat<T>(-q.w, -q.x, -q.y, -q.z);
|
return detail::tquat<T>(-q.w, -q.x, -q.y, -q.z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
GLM_FUNC_QUALIFIER detail::tquat<T> operator+
|
||||||
|
(
|
||||||
|
detail::tquat<T> const & q,
|
||||||
|
detail::tquat<T> const & p
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return detail::tquat<T>(
|
||||||
|
q.w + p.w,
|
||||||
|
q.x + p.x,
|
||||||
|
q.y + p.y,
|
||||||
|
q.z + p.z);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
GLM_FUNC_QUALIFIER detail::tquat<T> operator*
|
GLM_FUNC_QUALIFIER detail::tquat<T> operator*
|
||||||
(
|
(
|
||||||
|
@ -149,7 +149,7 @@ namespace quaternion
|
|||||||
detail::tquat<T> const & x
|
detail::tquat<T> const & x
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return acos(x.w) * T(2);
|
return glm::degrees(acos(x.w) * T(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
@ -23,11 +23,12 @@ int test_quat_slerp()
|
|||||||
{
|
{
|
||||||
int Error = 0;
|
int Error = 0;
|
||||||
|
|
||||||
glm::quat A(0.0f, glm::vec3(0, 0, 1));
|
glm::quat A(glm::vec3(0, 0, 1));
|
||||||
glm::quat B(90.0f, glm::vec3(0, 0, 1));
|
glm::quat B(glm::vec3(0, 1, 0));
|
||||||
glm::quat C = glm::mix(A, B, 0.5f);
|
glm::quat C = glm::mix(A, B, 0.5f);
|
||||||
|
glm::quat D(glm::normalize(glm::vec3(0, 1, 1)));
|
||||||
Error += C != glm::quat(45.f, glm::vec3(0, 0, 1)) ? 0 : 1;
|
|
||||||
|
Error += C == D ? 0 : 1;
|
||||||
|
|
||||||
return Error;
|
return Error;
|
||||||
}
|
}
|
||||||
|
@ -11,31 +11,48 @@
|
|||||||
#include <glm/gtx/quaternion.hpp>
|
#include <glm/gtx/quaternion.hpp>
|
||||||
#include <glm/gtx/epsilon.hpp>
|
#include <glm/gtx/epsilon.hpp>
|
||||||
|
|
||||||
|
int test_quat_angleAxis()
|
||||||
|
{
|
||||||
|
int Error = 0;
|
||||||
|
|
||||||
|
glm::quat A = glm::angleAxis(0.0f, glm::vec3(0, 0, 1));
|
||||||
|
glm::quat B = glm::angleAxis(90.0f, glm::vec3(0, 0, 1));
|
||||||
|
glm::quat C = glm::mix(A, B, 0.5f);
|
||||||
|
glm::quat D = glm::angleAxis(45.0f, glm::vec3(0, 0, 1));
|
||||||
|
|
||||||
|
Error += glm::equalEpsilon(C.x, D.x, 0.01f) ? 0 : 1;
|
||||||
|
Error += glm::equalEpsilon(C.y, D.y, 0.01f) ? 0 : 1;
|
||||||
|
Error += glm::equalEpsilon(C.z, D.z, 0.01f) ? 0 : 1;
|
||||||
|
Error += glm::equalEpsilon(C.w, D.w, 0.01f) ? 0 : 1;
|
||||||
|
|
||||||
|
return Error;
|
||||||
|
}
|
||||||
|
|
||||||
int test_quat_angle()
|
int test_quat_angle()
|
||||||
{
|
{
|
||||||
int Error = 0;
|
int Error = 0;
|
||||||
|
|
||||||
{
|
{
|
||||||
glm::quat Q(45.0f, glm::vec3(0, 0, 1));
|
glm::quat Q = glm::angleAxis(45.0f, glm::vec3(0, 0, 1));
|
||||||
glm::quat N = glm::normalize(Q);
|
glm::quat N = glm::normalize(Q);
|
||||||
float L = glm::length(N);
|
float L = glm::length(N);
|
||||||
Error += L == 1.0f ? 0 : 1;
|
Error += glm::equalEpsilon(L, 1.0f, 0.01f) ? 0 : 1;
|
||||||
float A = glm::angle(N);
|
float A = glm::angle(N);
|
||||||
Error += glm::equalEpsilon(A, 45.0f, 0.01f) ? 0 : 1;
|
Error += glm::equalEpsilon(A, 45.0f, 0.01f) ? 0 : 1;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
glm::quat Q(45.0f, glm::vec3(0, 0, 2));
|
glm::quat Q = glm::angleAxis(45.0f, glm::normalize(glm::vec3(0, 1, 1)));
|
||||||
glm::quat N = glm::normalize(Q);
|
glm::quat N = glm::normalize(Q);
|
||||||
float L = glm::length(N);
|
float L = glm::length(N);
|
||||||
Error += L == 1.0f ? 0 : 1;
|
Error += glm::equalEpsilon(L, 1.0f, 0.01f) ? 0 : 1;
|
||||||
float A = glm::angle(N);
|
float A = glm::angle(N);
|
||||||
Error += glm::equalEpsilon(A, 45.0f, 0.01f) ? 0 : 1;
|
Error += glm::equalEpsilon(A, 45.0f, 0.01f) ? 0 : 1;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
glm::quat Q(45.0f, glm::vec3(1, 2, 3));
|
glm::quat Q = glm::angleAxis(45.0f, glm::normalize(glm::vec3(1, 2, 3)));
|
||||||
glm::quat N = glm::normalize(Q);
|
glm::quat N = glm::normalize(Q);
|
||||||
float L = glm::length(N);
|
float L = glm::length(N);
|
||||||
Error += L == 1.0f ? 0 : 1;
|
Error += glm::equalEpsilon(L, 1.0f, 0.01f) ? 0 : 1;
|
||||||
float A = glm::angle(N);
|
float A = glm::angle(N);
|
||||||
Error += glm::equalEpsilon(A, 45.0f, 0.01f) ? 0 : 1;
|
Error += glm::equalEpsilon(A, 45.0f, 0.01f) ? 0 : 1;
|
||||||
}
|
}
|
||||||
@ -48,6 +65,7 @@ int main()
|
|||||||
int Error = 0;
|
int Error = 0;
|
||||||
|
|
||||||
Error += test_quat_angle();
|
Error += test_quat_angle();
|
||||||
|
Error += test_quat_angleAxis();
|
||||||
|
|
||||||
return Error;
|
return Error;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user