From 9fbfb8c208b4c48affc27ac81a9631c631655499 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Mon, 7 Feb 2011 14:37:53 +0000 Subject: [PATCH 1/4] Ticket #37: Added pickMatrix function --- glm/gtc/matrix_transform.hpp | 8 ++++++++ glm/gtc/matrix_transform.inl | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/glm/gtc/matrix_transform.hpp b/glm/gtc/matrix_transform.hpp index 477dc2eb..f7d466f8 100644 --- a/glm/gtc/matrix_transform.hpp +++ b/glm/gtc/matrix_transform.hpp @@ -133,6 +133,14 @@ namespace glm detail::tmat4x4 const & proj, detail::tvec4 const & viewport); + //! Define a picking region + //! From GLM_GTC_matrix_transform extension. + template + detail::tmat4x4 pickMatrix( + detail::tvec2 const & center, + detail::tvec2 const & delta, + detail::tvec4 const & viewport); + //! Build a look at view matrix. //! From GLM_GTC_matrix_transform extension. template diff --git a/glm/gtc/matrix_transform.inl b/glm/gtc/matrix_transform.inl index 858fa68c..b8e79ca2 100644 --- a/glm/gtc/matrix_transform.inl +++ b/glm/gtc/matrix_transform.inl @@ -324,6 +324,25 @@ namespace matrix_transform return detail::tvec3(obj); } + template + detail::tmat4x4 pickMatrix + ( + detail::tvec2 const & center, + detail::tvec2 const & delta, + detail::tvec4 const & viewport + ) + { + assert(delta.x > 0.0f && delta.y > 0.0f) + detail::tmat4x4 Result(1.0f); + + if(!(delta.x > 0.0f && delta.y > 0.0f)) + return Result; // Error + + // Translate and scale the picked region to the entire window + Result = translate(Result, (T(viewport[2]) - T(2) * (x - T(viewport[0]))) / delta.x, (T(viewport[3]) - T(2) * (y - T(viewport[1]))) / delta.y, T(0)); + return scale(Result, T(viewport[2]) / delta.x, T(viewport[3]) / delta.y, T(1)); + } + template inline detail::tmat4x4 lookAt( const detail::tvec3& eye, From d77694f8ac08c132afc24c9225af920dc5389c94 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Tue, 8 Feb 2011 10:37:47 +0000 Subject: [PATCH 2/4] Added SIMD sqrt functions support, ticket #2 --- glm/core/intrinsic_common.inl | 2 +- glm/gtx/simd_vec4.hpp | 22 ++++++++++++++++++++++ glm/gtx/simd_vec4.inl | 28 ++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) diff --git a/glm/core/intrinsic_common.inl b/glm/core/intrinsic_common.inl index b11f000d..fd031ef8 100644 --- a/glm/core/intrinsic_common.inl +++ b/glm/core/intrinsic_common.inl @@ -258,7 +258,7 @@ inline __m128 sse_inf_ps(__m128 x) } // SSE scalar reciprocal sqrt using rsqrt op, plus one Newton-Rhaphson iteration -// By Elan Ruskin, +// By Elan Ruskin, http://assemblyrequired.crashworks.org/ inline __m128 sse_sqrt_wip_ss(__m128 const & x) { __m128 recip = _mm_rsqrt_ss(x); // "estimate" opcode diff --git a/glm/gtx/simd_vec4.hpp b/glm/gtx/simd_vec4.hpp index 186fd045..028db5e0 100644 --- a/glm/gtx/simd_vec4.hpp +++ b/glm/gtx/simd_vec4.hpp @@ -401,6 +401,28 @@ namespace glm detail::fvec4SIMD const & I, detail::fvec4SIMD const & N, float const & eta); + + //! Returns the positive square root of x. + //! (From GLM_GTX_simd_vec4 extension, exponential function) + detail::fvec4SIMD simdSqrt( + detail::fvec4SIMD const & x); + + //! Returns the positive square root of x with an accuracy slight lower or equal than simdSqrt but much faster. + //! (From GLM_GTX_simd_vec4 extension, exponential function) + detail::fvec4SIMD simdFastSqrt( + detail::fvec4SIMD const & x); + + //! Returns the reciprocal of the positive square root of x. + //! (From GLM_GTX_simd_vec4 extension, exponential function) + detail::fvec4SIMD simdInversesqrt( + detail::fvec4SIMD const & x); + + //! Returns the reciprocal of the positive square root of x, + //! faster than simdInversesqrt but less accurate. + //! (From GLM_GTX_simd_vec4 extension, exponential function) + detail::fvec4SIMD simdFastInversesqrt( + detail::fvec4SIMD const & x); + }//namespace simd_vec4 }//namespace gtx }//namespace glm diff --git a/glm/gtx/simd_vec4.inl b/glm/gtx/simd_vec4.inl index 510a57e6..f74144b8 100644 --- a/glm/gtx/simd_vec4.inl +++ b/glm/gtx/simd_vec4.inl @@ -634,6 +634,34 @@ namespace glm return detail::sse_rfa_ps(I.Data, N.Data, _mm_set1_ps(eta)); } + inline detail::fvec4SIMD simdSqrt(detail::fvec4SIMD const & x) + { + return _mm_sqrt_ps(x.Data); + } + + inline detail::fvec4SIMD simdFastSqrt(detail::fvec4SIMD const & x) + { + + } + + // SSE scalar reciprocal sqrt using rsqrt op, plus one Newton-Rhaphson iteration + // By Elan Ruskin, http://assemblyrequired.crashworks.org/ + inline detail::fvec4SIMD simdInversesqrt(detail::fvec4SIMD const & x) + { + GLM_ALIGN(4) static const __m128 three = {3, 3, 3, 3}; // aligned consts for fast load + GLM_ALIGN(4) static const __m128 half = {0.5,0.5,0.5,0.5}; + + __m128 recip = _mm_rsqrt_ps(x.Data); // "estimate" opcode + __m128 halfrecip = _mm_mul_ps(half, recip); + __m128 threeminus_xrr = _mm_sub_ps(three, _mm_mul_ps(x.Data, _mm_mul_ps(recip, recip))); + return _mm_mul_ps(halfrecip, threeminus_xrr); + } + + inline detail::fvec4SIMD simdFastInversesqrt(detail::fvec4SIMD const & x) + { + return _mm_rsqrt_ps(x.Data); + } + }//namespace simd_vec4 }//namespace gtx }//namespace glm From b8190d15d90372d1b256379e994c69a533079ffd Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Tue, 8 Feb 2011 11:31:09 +0000 Subject: [PATCH 3/4] Updated readme formatting and added a usage section --- doc/CMakeLists.txt | 4 +- readme.txt | 228 ++++++++++++++++++++++++--------------------- 2 files changed, 125 insertions(+), 107 deletions(-) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 6d9f918b..da40c39e 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -1,10 +1,12 @@ set(NAME glm-doc) +file(GLOB ROOT_TXT doxyfile ../*.txt) file(GLOB ROOT_CPP src/*.cpp) file(GLOB ROOT_XML src/*.xml) file(GLOB ROOT_XSL src/*.xsl) +source_group("TXT Files" FILES ${ROOT_TXT}) source_group("XML Files" FILES ${ROOT_XML}) source_group("XSL Files" FILES ${ROOT_XSL}) -add_executable(${NAME} ${ROOT_CPP} ${ROOT_XML} ${ROOT_XSL}) +add_executable(${NAME} ${ROOT_CPP} ${ROOT_XML} ${ROOT_XSL} ${ROOT_TXT}) diff --git a/readme.txt b/readme.txt index 785b30ac..1402a731 100644 --- a/readme.txt +++ b/readme.txt @@ -1,311 +1,327 @@ -============================= +================================================================================ G-Truc Creation ------------------------------ +-------------------------------------------------------------------------------- www.g-truc.net glm@g-truc.net -============================= +================================================================================ +GLM Usage +-------------------------------------------------------------------------------- +GLM is a header only library, there is nothing to build, just include it. +#include + +More informations in GLM manual: +http://glm.g-truc.net/glm-manual.pdf + +================================================================================ +GLM 0.9.0.7: 2011-01-30 +-------------------------------------------------------------------------------- +- Added GLSL 4.10 packing functions +- Added == and != operators for every types. + +================================================================================ GLM 0.9.0.6: 2010-12-21 ------------------------------ +-------------------------------------------------------------------------------- - Many matrices bugs fixed -============================= +================================================================================ GLM 0.9.0.5: 2010-11-01 ------------------------------ +-------------------------------------------------------------------------------- - Improved Clang support - Fixed bugs -============================= +================================================================================ GLM 0.9.0.4: 2010-10-04 ------------------------------ +-------------------------------------------------------------------------------- - Added autoexp for GLM - Fixed bugs -============================= +================================================================================ GLM 0.9.0.3: 2010-08-26 ------------------------------ +-------------------------------------------------------------------------------- - Fixed non-squared matrix operators -============================= +================================================================================ GLM 0.9.0.2: 2010-07-08 ------------------------------ +-------------------------------------------------------------------------------- - Added GLM_GTX_int_10_10_10_2 - Fixed bugs -============================= +================================================================================ GLM 0.9.0.1: 2010-06-21 ------------------------------ +-------------------------------------------------------------------------------- - Fixed extensions errors -============================= +================================================================================ GLM 0.9.0.0: 2010-05-25 ------------------------------ +-------------------------------------------------------------------------------- - Objective-C support - Fixed warnings - Updated documentation -============================= +================================================================================ GLM 0.9.B.2: 2010-04-30 ------------------------------ +-------------------------------------------------------------------------------- - Git transition - Removed experimental code from releases - Fixed bugs -============================= +================================================================================ GLM 0.9.B.1: 2010-04-03 ------------------------------ +-------------------------------------------------------------------------------- - Based on GLSL 4.00 specification - Added the new core functions - Added some implicit conversion support -============================= +================================================================================ GLM 0.9.A.2: 2010-02-20 ------------------------------ +-------------------------------------------------------------------------------- - Improved some possible errors messages - Improved declarations and definitions match -============================= +================================================================================ GLM 0.9.A.1: 2010-02-09 ------------------------------ +-------------------------------------------------------------------------------- - Removed deprecated features - Internal redesign -============================= +================================================================================ GLM 0.8.4.4 final: 2010-01-25 ------------------------------ +-------------------------------------------------------------------------------- - Fixed warnings -============================= +================================================================================ GLM 0.8.4.3 final: 2009-11-16 ------------------------------ +-------------------------------------------------------------------------------- - Fixed Half float arithmetic - Fixed setup defines -============================= +================================================================================ GLM 0.8.4.2 final: 2009-10-19 ------------------------------ +-------------------------------------------------------------------------------- - Fixed Half float adds -============================= +================================================================================ GLM 0.8.4.1 final: 2009-10-05 ------------------------------ +-------------------------------------------------------------------------------- - Updated documentation - Fixed MacOS X build -============================= +================================================================================ GLM 0.8.4.0 final: 2009-09-16 ------------------------------ +-------------------------------------------------------------------------------- - Added GCC 4.4 and VC2010 support - Added matrix optimizations -============================= +================================================================================ GLM 0.8.3.5 final: 2009-08-11 ------------------------------ +-------------------------------------------------------------------------------- - Fixed bugs -============================= +================================================================================ GLM 0.8.3.4 final: 2009-08-10 ------------------------------ +-------------------------------------------------------------------------------- - Updated GLM according GLSL 1.5 spec - Fixed bugs -============================= +================================================================================ GLM 0.8.3.3 final: 2009-06-25 ------------------------------ +-------------------------------------------------------------------------------- - Fixed bugs -============================= +================================================================================ GLM 0.8.3.2 final: 2009-06-04 ------------------------------ +-------------------------------------------------------------------------------- - Added GLM_GTC_quaternion - Added GLM_GTC_type_precision -============================= +================================================================================ GLM 0.8.3.1 final: 2009-05-21 ------------------------------ +-------------------------------------------------------------------------------- - Fixed old extension system. -============================= +================================================================================ GLM 0.8.3.0 final: 2009-05-06 ------------------------------ +-------------------------------------------------------------------------------- - Added stable extensions. - Added new extension system. -============================= +================================================================================ GLM 0.8.2.3 final: 2009-04-01 ------------------------------ +-------------------------------------------------------------------------------- - Fixed bugs. -============================= +================================================================================ GLM 0.8.2.2 final: 2009-02-24 ------------------------------ +-------------------------------------------------------------------------------- - Fixed bugs. -============================= +================================================================================ GLM 0.8.2.1 final: 2009-02-13 ------------------------------ +-------------------------------------------------------------------------------- - Fixed bugs. -============================= +================================================================================ GLM 0.8.2 final: 2009-01-21 ------------------------------ +-------------------------------------------------------------------------------- - Fixed bugs. -============================= +================================================================================ GLM 0.8.1 final: 2008-10-30 ------------------------------ +-------------------------------------------------------------------------------- - Fixed bugs. -============================= +================================================================================ GLM 0.8.0 final: 2008-10-23 ------------------------------ +-------------------------------------------------------------------------------- - New method to use extension. -============================= +================================================================================ GLM 0.8.0 beta3: 2008-10-10 ------------------------------ +-------------------------------------------------------------------------------- - Added CMake support for GLM tests. -============================= +================================================================================ GLM 0.8.0 beta2: 2008-10-04 ------------------------------ +-------------------------------------------------------------------------------- - Improved half scalars and vectors support. -============================= +================================================================================ GLM 0.8.0 beta1: 2008-09-26 ------------------------------ +-------------------------------------------------------------------------------- - Improved GLSL conformance - Added GLSL 1.30 support - Improved API documentation -============================= +================================================================================ GLM 0.7.6 final: 2008-08-08 ---------------------------- +-------------------------------------------------------------------------------- - Improved C++ standard comformance - Added Static assert for types checking -=========================== +================================================================================ GLM 0.7.5 final: 2008-07-05 ---------------------------- +-------------------------------------------------------------------------------- - Added build message system with Visual Studio - Pedantic build with GCC -=========================== +================================================================================ GLM 0.7.4 final: 2008-06-01 ---------------------------- +-------------------------------------------------------------------------------- - Added external dependencies system. -=========================== +================================================================================ GLM 0.7.3 final: 2008-05-24 ---------------------------- +-------------------------------------------------------------------------------- - Fixed bugs - Added new extension group -=========================== +================================================================================ GLM 0.7.2 final: 2008-04-27 ---------------------------- +-------------------------------------------------------------------------------- - Updated documentation - Added preprocessor options -=========================== +================================================================================ GLM 0.7.1 final: 2008-03-24 ---------------------------- +-------------------------------------------------------------------------------- - Disabled half on GCC - Fixed extensions -=========================== +================================================================================ GLM 0.7.0 final: 2008-03-22 ---------------------------- +-------------------------------------------------------------------------------- - Changed to MIT license - Added new documentation -=========================== +================================================================================ GLM 0.6.4 : 2007-12-10 ---------------------------- +-------------------------------------------------------------------------------- - Fixed swizzle operators -=========================== +================================================================================ GLM 0.6.3 : 2007-11-05 ---------------------------- +-------------------------------------------------------------------------------- - Fixed type data accesses - Fixed 3DSMax sdk conflict -=========================== +================================================================================ GLM 0.6.2 : 2007-10-08 ---------------------------- +-------------------------------------------------------------------------------- - Fixed extension -=========================== +================================================================================ GLM 0.6.1 : 2007-10-07 ---------------------------- +-------------------------------------------------------------------------------- - Fixed a namespace error - Added extensions -=========================== +================================================================================ GLM 0.6.0 : 2007-09-16 ---------------------------- +-------------------------------------------------------------------------------- - Added new extension namespace mecanium - Added Automatic compiler detection -=========================== +================================================================================ GLM 0.5.1 : 2007-02-19 ---------------------------- +-------------------------------------------------------------------------------- - Fixed swizzle operators -=========================== +================================================================================ GLM 0.5.0 : 2007-01-06 ---------------------------- +-------------------------------------------------------------------------------- - Upgrated to GLSL 1.2 - Added swizzle operators - Added setup settings -=========================== +================================================================================ GLM 0.4.1 : 2006-05-22 ---------------------------- +-------------------------------------------------------------------------------- - Added OpenGL examples -=========================== +================================================================================ GLM 0.4.0 : 2006-05-17 ---------------------------- +-------------------------------------------------------------------------------- - Added missing operators to vec* and mat* - Added first GLSL 1.2 features - Fixed windows.h before glm.h when windows.h required -=========================== +================================================================================ GLM 0.3.2 : 2006-04-21 ---------------------------- +-------------------------------------------------------------------------------- - Fixed texcoord components access. - Fixed mat4 and imat4 division operators. -=========================== +================================================================================ GLM 0.3.1 : 2006-03-28 ---------------------------- +-------------------------------------------------------------------------------- - Added GCC 4.0 support under MacOS X. - Added GCC 4.0 and 4.1 support under Linux. - Added code optimisations. -=========================== +================================================================================ GLM 0.3 : 2006-02-19 ---------------------------- +-------------------------------------------------------------------------------- - Improved GLSL type conversion and construction compliance. - Added experimental extensions. - Added Doxygen Documentation. - Added code optimisations. - Fixed bugs. -=========================== +================================================================================ GLM 0.2: 2005-05-05 ---------------------------- +-------------------------------------------------------------------------------- - Improve adaptative from GLSL. - Add experimental extensions based on OpenGL extension process. - Fixe bugs. -=========================== +================================================================================ GLM 0.1: 2005-02-21 ---------------------------- +-------------------------------------------------------------------------------- - Add vec2, vec3, vec4 GLSL types - Add ivec2, ivec3, ivec4 GLSL types - Add bvec2, bvec3, bvec4 GLSL types - Add mat2, mat3, mat4 GLSL types - Add almost all functions +================================================================================ From 75af4af7897af7b04128f459b54091078e3ced31 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Tue, 8 Feb 2011 11:59:00 +0000 Subject: [PATCH 4/4] Added alternative implementation of SLERP --- glm/gtc/quaternion.hpp | 2 +- glm/gtc/quaternion.inl | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/glm/gtc/quaternion.hpp b/glm/gtc/quaternion.hpp index c70b1cde..0875efe9 100644 --- a/glm/gtc/quaternion.hpp +++ b/glm/gtc/quaternion.hpp @@ -148,7 +148,7 @@ namespace glm detail::tquat const & q1, detail::tquat const & q2); - //! Returns a LERP interpolated quaternion of x and y according a. + //! Returns a SLERP interpolated quaternion of x and y according a. //! From GLM_GTC_quaternion extension. template detail::tquat mix( diff --git a/glm/gtc/quaternion.inl b/glm/gtc/quaternion.inl index a445c182..32577b77 100644 --- a/glm/gtc/quaternion.inl +++ b/glm/gtc/quaternion.inl @@ -369,6 +369,43 @@ namespace quaternion{ k0 * x.z + k1 * y2.z); } + template + inline detail::tquat mix2 + ( + detail::tquat const & x, + detail::tquat const & y, + T const & a + ) + { + bool flip = false; + if(a <= T(0)) return x; + if(a >= T(1)) return y; + + T cos_t = dot(x, y); + if(cos_t < T(0)) + { + cos_t = -cos_t; + flip = true; + } + + T alpha(0), beta(0); + + if(T(1) - cos_t < 1e-7) + beta = T(1) - alpha; + else + { + T theta = acos(cos_t); + T sin_t = sin(theta); + beta = sin(theta * (T(1) - alpha)) / sin_t; + alpha = sin(alpha * theta) / sin_t; + } + + if(flip) + alpha = -alpha; + + return normalize(beta * x + alpha * y2); + } + template inline detail::tquat conjugate (