mirror of
https://github.com/g-truc/glm.git
synced 2024-11-23 01:14:34 +00:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
5441bc7a93
@ -508,6 +508,22 @@
|
|||||||
# define GLM_HAS_OPENMP 0
|
# define GLM_HAS_OPENMP 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// nullptr
|
||||||
|
|
||||||
|
//
|
||||||
|
#if GLM_LANG & GLM_LANG_CXX0X_FLAG
|
||||||
|
# define GLM_HAS_NULLPTR 1
|
||||||
|
#else
|
||||||
|
# define GLM_HAS_NULLPTR 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if GLM_HAS_NULLPTR
|
||||||
|
# define GLM_NULLPTR nullptr
|
||||||
|
#else
|
||||||
|
# define GLM_NULLPTR 0
|
||||||
|
#endif
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
// Static assert
|
// Static assert
|
||||||
|
|
||||||
|
@ -142,6 +142,9 @@ namespace glm
|
|||||||
template<typename T, qualifier Q>
|
template<typename T, qualifier Q>
|
||||||
GLM_FUNC_DECL tquat<T, Q> operator+(tquat<T, Q> const& q, tquat<T, Q> const& p);
|
GLM_FUNC_DECL tquat<T, Q> operator+(tquat<T, Q> const& q, tquat<T, Q> const& p);
|
||||||
|
|
||||||
|
template<typename T, qualifier Q>
|
||||||
|
GLM_FUNC_DECL tquat<T, Q> operator-(tquat<T, Q> const& q, tquat<T, Q> const& p);
|
||||||
|
|
||||||
template<typename T, qualifier Q>
|
template<typename T, qualifier Q>
|
||||||
GLM_FUNC_DECL tquat<T, Q> operator*(tquat<T, Q> const& q, tquat<T, Q> const& p);
|
GLM_FUNC_DECL tquat<T, Q> operator*(tquat<T, Q> const& q, tquat<T, Q> const& p);
|
||||||
|
|
||||||
|
@ -200,7 +200,7 @@ namespace detail
|
|||||||
return mat3_cast(*this);
|
return mat3_cast(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T, qualifier Q>
|
template<typename T, qualifier Q>
|
||||||
GLM_FUNC_QUALIFIER tquat<T, Q>::operator mat<4, 4, T, Q>()
|
GLM_FUNC_QUALIFIER tquat<T, Q>::operator mat<4, 4, T, Q>()
|
||||||
{
|
{
|
||||||
return mat4_cast(*this);
|
return mat4_cast(*this);
|
||||||
@ -308,6 +308,12 @@ namespace detail
|
|||||||
return tquat<T, Q>(q) += p;
|
return tquat<T, Q>(q) += p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T, qualifier Q>
|
||||||
|
GLM_FUNC_QUALIFIER tquat<T, Q> operator-(tquat<T, Q> const& q, tquat<T, Q> const& p)
|
||||||
|
{
|
||||||
|
return tquat<T, Q>(q) -= p;
|
||||||
|
}
|
||||||
|
|
||||||
template<typename T, qualifier Q>
|
template<typename T, qualifier Q>
|
||||||
GLM_FUNC_QUALIFIER tquat<T, Q> operator*(tquat<T, Q> const& q, tquat<T, Q> const& p)
|
GLM_FUNC_QUALIFIER tquat<T, Q> operator*(tquat<T, Q> const& q, tquat<T, Q> const& p)
|
||||||
{
|
{
|
||||||
|
@ -340,13 +340,12 @@ namespace detail
|
|||||||
template<typename T>
|
template<typename T>
|
||||||
GLM_FUNC_QUALIFIER vec<3, T, defaultp> sphericalRand(T Radius)
|
GLM_FUNC_QUALIFIER vec<3, T, defaultp> sphericalRand(T Radius)
|
||||||
{
|
{
|
||||||
T z = linearRand(T(-1), T(1));
|
T theta = linearRand(T(0), T(6.283185307179586476925286766559f));
|
||||||
T a = linearRand(T(0), T(6.283185307179586476925286766559f));
|
T phi = std::acos(linearRand(T(-1.0f), T(1.0f)));
|
||||||
|
|
||||||
T r = sqrt(T(1) - z * z);
|
T x = std::sin(phi) * std::cos(theta);
|
||||||
|
T y = std::sin(phi) * std::sin(theta);
|
||||||
T x = r * std::cos(a);
|
T z = std::cos(phi);
|
||||||
T y = r * std::sin(a);
|
|
||||||
|
|
||||||
return vec<3, T, defaultp>(x, y, z) * Radius;
|
return vec<3, T, defaultp>(x, y, z) * Radius;
|
||||||
}
|
}
|
||||||
|
@ -44,13 +44,13 @@ namespace glm
|
|||||||
typename genType::value_type & intersectionDistance);
|
typename genType::value_type & intersectionDistance);
|
||||||
|
|
||||||
//! Compute the intersection of a ray and a triangle.
|
//! Compute the intersection of a ray and a triangle.
|
||||||
/// Based om Tomas Möller implementation http://fileadmin.cs.lth.se/cs/Personal/Tomas_Akenine-Moller/raytri/
|
/// Based om Tomas Möller implementation http://fileadmin.cs.lth.se/cs/Personal/Tomas_Akenine-Moller/raytri/
|
||||||
//! From GLM_GTX_intersect extension.
|
//! From GLM_GTX_intersect extension.
|
||||||
template<typename T, qualifier Q>
|
template<typename T, qualifier Q>
|
||||||
GLM_FUNC_DECL bool intersectRayTriangle(
|
GLM_FUNC_DECL bool intersectRayTriangle(
|
||||||
vec<3, T, Q> const& orig, vec<3, T, Q> const& dir,
|
vec<3, T, Q> const& orig, vec<3, T, Q> const& dir,
|
||||||
vec<3, T, Q> const& v0, vec<3, T, Q> const& v1, vec<3, T, Q> const& v2,
|
vec<3, T, Q> const& v0, vec<3, T, Q> const& v1, vec<3, T, Q> const& v2,
|
||||||
vec<3, T, Q>& baryPosition, T& distance);
|
vec<2, T, Q>& baryPosition, T& distance);
|
||||||
|
|
||||||
//! Compute the intersection of a line and a triangle.
|
//! Compute the intersection of a line and a triangle.
|
||||||
//! From GLM_GTX_intersect extension.
|
//! From GLM_GTX_intersect extension.
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
///
|
///
|
||||||
/// Include <glm/gtx/matrix_interpolation.hpp> to use the features of this extension.
|
/// Include <glm/gtx/matrix_interpolation.hpp> to use the features of this extension.
|
||||||
///
|
///
|
||||||
/// Allows to directly interpolate two exiciting matrices.
|
/// Allows to directly interpolate two matrices.
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ namespace detail
|
|||||||
char text[STRING_BUFFER];
|
char text[STRING_BUFFER];
|
||||||
va_list list;
|
va_list list;
|
||||||
|
|
||||||
if(msg == 0)
|
if(msg == GLM_NULLPTR)
|
||||||
return std::string();
|
return std::string();
|
||||||
|
|
||||||
va_start(list, msg);
|
va_start(list, msg);
|
||||||
|
@ -227,7 +227,8 @@ int test_ctr()
|
|||||||
{0, 0, 1, 0},
|
{0, 0, 1, 0},
|
||||||
{0, 0, 0, 1} };
|
{0, 0, 0, 1} };
|
||||||
|
|
||||||
Error += glm::equal(m4[0][3], 1.0f, 0.0001f) ? 0 : 1;
|
Error += glm::equal(m4[0][0], 1.0f, 0.0001f) ? 0 : 1;
|
||||||
|
Error += glm::equal(m4[3][3], 1.0f, 0.0001f) ? 0 : 1;
|
||||||
|
|
||||||
std::vector<glm::mat4> v1{
|
std::vector<glm::mat4> v1{
|
||||||
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
|
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
|
||||||
|
@ -525,17 +525,17 @@ static int test_inheritance()
|
|||||||
{
|
{
|
||||||
my_vec4()
|
my_vec4()
|
||||||
: glm::vec4(76.f, 75.f, 74.f, 73.f)
|
: glm::vec4(76.f, 75.f, 74.f, 73.f)
|
||||||
, data(82)
|
, member(82)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
int data;
|
int member;
|
||||||
};
|
};
|
||||||
|
|
||||||
int Error = 0;
|
int Error = 0;
|
||||||
|
|
||||||
my_vec4 v;
|
my_vec4 v;
|
||||||
|
|
||||||
Error += v.data == 82 ? 0 : 1;
|
Error += v.member == 82 ? 0 : 1;
|
||||||
Error += glm::epsilonEqual(v.x, 76.f, glm::epsilon<float>()) ? 0 : 1;
|
Error += glm::epsilonEqual(v.x, 76.f, glm::epsilon<float>()) ? 0 : 1;
|
||||||
Error += glm::epsilonEqual(v.y, 75.f, glm::epsilon<float>()) ? 0 : 1;
|
Error += glm::epsilonEqual(v.y, 75.f, glm::epsilon<float>()) ? 0 : 1;
|
||||||
Error += glm::epsilonEqual(v.z, 74.f, glm::epsilon<float>()) ? 0 : 1;
|
Error += glm::epsilonEqual(v.z, 74.f, glm::epsilon<float>()) ? 0 : 1;
|
||||||
|
@ -24,7 +24,7 @@ int test_axisAngle()
|
|||||||
float dltAngle = 0.0f;
|
float dltAngle = 0.0f;
|
||||||
glm::axisAngle(dltRotation, dltAxis, dltAngle);
|
glm::axisAngle(dltRotation, dltAxis, dltAngle);
|
||||||
|
|
||||||
std::cout << "dltAngle: (" << dltAxis.x << ", " << dltAxis.y << ", " << dltAxis.z << "), dltAngle: " << dltAngle << std::endl;
|
std::cout << "dltAxis: (" << dltAxis.x << ", " << dltAxis.y << ", " << dltAxis.z << "), dltAngle: " << dltAngle << std::endl;
|
||||||
|
|
||||||
glm::fquat q = glm::quat_cast(dltRotation);
|
glm::fquat q = glm::quat_cast(dltRotation);
|
||||||
std::cout << "q: (" << q.x << ", " << q.y << ", " << q.z << ", " << q.w << ")" << std::endl;
|
std::cout << "q: (" << q.x << ", " << q.y << ", " << q.z << ", " << q.w << ")" << std::endl;
|
||||||
|
@ -107,6 +107,18 @@ int test_quat_lookAt()
|
|||||||
Error += static_cast<int>(glm::abs(glm::length(test_quat) - 1.0f) > glm::epsilon<float>());
|
Error += static_cast<int>(glm::abs(glm::length(test_quat) - 1.0f) > glm::epsilon<float>());
|
||||||
Error += static_cast<int>(glm::min(glm::length(test_quat + (-test_mat)), glm::length(test_quat + test_mat)) > glm::epsilon<float>());
|
Error += static_cast<int>(glm::min(glm::length(test_quat + (-test_mat)), glm::length(test_quat + test_mat)) > glm::epsilon<float>());
|
||||||
|
|
||||||
|
// Test left-handed implementation
|
||||||
|
glm::quat test_quatLH = glm::quatLookAtLH(glm::normalize(center - eye), up);
|
||||||
|
glm::quat test_matLH = glm::conjugate(glm::quat_cast(glm::lookAtLH(eye, center, up)));
|
||||||
|
Error += static_cast<int>(glm::abs(glm::length(test_quatLH) - 1.0f) > glm::epsilon<float>());
|
||||||
|
Error += static_cast<int>(glm::min(glm::length(test_quatLH - test_matLH), glm::length(test_quatLH + test_matLH)) > glm::epsilon<float>());
|
||||||
|
|
||||||
|
// Test right-handed implementation
|
||||||
|
glm::quat test_quatRH = glm::quatLookAtRH(glm::normalize(center - eye), up);
|
||||||
|
glm::quat test_matRH = glm::conjugate(glm::quat_cast(glm::lookAtRH(eye, center, up)));
|
||||||
|
Error += static_cast<int>(glm::abs(glm::length(test_quatRH) - 1.0f) > glm::epsilon<float>());
|
||||||
|
Error += static_cast<int>(glm::min(glm::length(test_quatRH - test_matRH), glm::length(test_quatRH + test_matRH)) > glm::epsilon<float>());
|
||||||
|
|
||||||
return Error;
|
return Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user