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:
Christophe Riccio 2011-05-27 20:21:27 +01:00
commit 5d2350f7c8
8 changed files with 88 additions and 31 deletions

View File

@ -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

View File

@ -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
# #

View File

@ -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

View File

@ -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.

View File

@ -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*
( (

View File

@ -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>

View File

@ -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;
} }

View File

@ -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;
} }