1 /// @ref gtx_transform2 2 /// @file glm/gtx/transform2.hpp 3 /// 4 /// @see core (dependence) 5 /// @see gtx_transform (dependence) 6 /// 7 /// @defgroup gtx_transform2 GLM_GTX_transform2 8 /// @ingroup gtx 9 /// 10 /// @brief Add extra transformation matrices 11 /// 12 /// <glm/gtx/transform2.hpp> need to be included to use these functionalities. 13 14 #pragma once 15 16 // Dependency: 17 #include "../glm.hpp" 18 #include "../gtx/transform.hpp" 19 20 #if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED) 21 # pragma message("GLM: GLM_GTX_transform2 extension included") 22 #endif 23 24 namespace glm 25 { 26 /// @addtogroup gtx_transform2 27 /// @{ 28 29 //! Transforms a matrix with a shearing on X axis. 30 //! From GLM_GTX_transform2 extension. 31 template <typename T, precision P> 32 GLM_FUNC_DECL tmat3x3<T, P> shearX2D( 33 tmat3x3<T, P> const & m, 34 T y); 35 36 //! Transforms a matrix with a shearing on Y axis. 37 //! From GLM_GTX_transform2 extension. 38 template <typename T, precision P> 39 GLM_FUNC_DECL tmat3x3<T, P> shearY2D( 40 tmat3x3<T, P> const & m, 41 T x); 42 43 //! Transforms a matrix with a shearing on X axis 44 //! From GLM_GTX_transform2 extension. 45 template <typename T, precision P> 46 GLM_FUNC_DECL tmat4x4<T, P> shearX3D( 47 const tmat4x4<T, P> & m, 48 T y, 49 T z); 50 51 //! Transforms a matrix with a shearing on Y axis. 52 //! From GLM_GTX_transform2 extension. 53 template <typename T, precision P> 54 GLM_FUNC_DECL tmat4x4<T, P> shearY3D( 55 const tmat4x4<T, P> & m, 56 T x, 57 T z); 58 59 //! Transforms a matrix with a shearing on Z axis. 60 //! From GLM_GTX_transform2 extension. 61 template <typename T, precision P> 62 GLM_FUNC_DECL tmat4x4<T, P> shearZ3D( 63 const tmat4x4<T, P> & m, 64 T x, 65 T y); 66 67 //template <typename T> GLM_FUNC_QUALIFIER tmat4x4<T, P> shear(const tmat4x4<T, P> & m, shearPlane, planePoint, angle) 68 // Identity + tan(angle) * cross(Normal, OnPlaneVector) 0 69 // - dot(PointOnPlane, normal) * OnPlaneVector 1 70 71 // Reflect functions seem to don't work 72 //template <typename T> tmat3x3<T, P> reflect2D(const tmat3x3<T, P> & m, const tvec3<T, P>& normal){return reflect2DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension) 73 //template <typename T> tmat4x4<T, P> reflect3D(const tmat4x4<T, P> & m, const tvec3<T, P>& normal){return reflect3DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension) 74 75 //! Build planar projection matrix along normal axis. 76 //! From GLM_GTX_transform2 extension. 77 template <typename T, precision P> 78 GLM_FUNC_DECL tmat3x3<T, P> proj2D( 79 const tmat3x3<T, P> & m, 80 const tvec3<T, P>& normal); 81 82 //! Build planar projection matrix along normal axis. 83 //! From GLM_GTX_transform2 extension. 84 template <typename T, precision P> 85 GLM_FUNC_DECL tmat4x4<T, P> proj3D( 86 const tmat4x4<T, P> & m, 87 const tvec3<T, P>& normal); 88 89 //! Build a scale bias matrix. 90 //! From GLM_GTX_transform2 extension. 91 template <typename valType, precision P> 92 GLM_FUNC_DECL tmat4x4<valType, P> scaleBias( 93 valType scale, 94 valType bias); 95 96 //! Build a scale bias matrix. 97 //! From GLM_GTX_transform2 extension. 98 template <typename valType, precision P> 99 GLM_FUNC_DECL tmat4x4<valType, P> scaleBias( 100 tmat4x4<valType, P> const & m, 101 valType scale, 102 valType bias); 103 104 /// @} 105 }// namespace glm 106 107 #include "transform2.inl" 108