1b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG///////////////////////////////////////////////////////////////////////////////////
2b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// OpenGL Mathematics (glm.g-truc.net)
3b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG///
4b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
5b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// Permission is hereby granted, free of charge, to any person obtaining a copy
6b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// of this software and associated documentation files (the "Software"), to deal
7b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// in the Software without restriction, including without limitation the rights
8b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// copies of the Software, and to permit persons to whom the Software is
10b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// furnished to do so, subject to the following conditions:
11b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG///
12b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// The above copyright notice and this permission notice shall be included in
13b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// all copies or substantial portions of the Software.
14b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG///
15b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// THE SOFTWARE.
22b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG///
23b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// @ref gtx_transform2
24b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// @file glm/gtx/transform2.hpp
25b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// @date 2005-12-21 / 2011-06-07
26b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// @author Christophe Riccio
27b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG///
28b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// @see core (dependence)
29b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// @see gtx_transform (dependence)
30b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG///
31b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// @defgroup gtx_transform2 GLM_GTX_transform2
32b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// @ingroup gtx
33b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG///
34b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// @brief Add extra transformation matrices
35b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG///
36b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// <glm/gtx/transform2.hpp> need to be included to use these functionalities.
37b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG///////////////////////////////////////////////////////////////////////////////////
38b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG
39b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#ifndef GLM_GTX_transform2
40b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#define GLM_GTX_transform2
41b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG
42b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG// Dependency:
43b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#include "../glm.hpp"
44b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#include "../gtx/transform.hpp"
45b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG
46b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
47b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#	pragma message("GLM: GLM_GTX_transform2 extension included")
48b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#endif
49b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG
50b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarGnamespace glm
51b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG{
52b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	/// @addtogroup gtx_transform2
53b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	/// @{
54b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG
55b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	//! Transforms a matrix with a shearing on X axis.
56b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	//! From GLM_GTX_transform2 extension.
57b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	template <typename T, precision P>
58b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	GLM_FUNC_DECL detail::tmat3x3<T, P> shearX2D(
59b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG		detail::tmat3x3<T, P> const & m,
60b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG		T y);
61b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG
62b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	//! Transforms a matrix with a shearing on Y axis.
63b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	//! From GLM_GTX_transform2 extension.
64b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	template <typename T, precision P>
65b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	GLM_FUNC_DECL detail::tmat3x3<T, P> shearY2D(
66b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG		detail::tmat3x3<T, P> const & m,
67b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG		T x);
68b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG
69b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	//! Transforms a matrix with a shearing on X axis
70b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	//! From GLM_GTX_transform2 extension.
71b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	template <typename T, precision P>
72b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	GLM_FUNC_DECL detail::tmat4x4<T, P> shearX3D(
73b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG		const detail::tmat4x4<T, P> & m,
74b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG		T y,
75b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG		T z);
76b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG
77b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	//! Transforms a matrix with a shearing on Y axis.
78b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	//! From GLM_GTX_transform2 extension.
79b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	template <typename T, precision P>
80b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	GLM_FUNC_DECL detail::tmat4x4<T, P> shearY3D(
81b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG		const detail::tmat4x4<T, P> & m,
82b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG		T x,
83b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG		T z);
84b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG
85b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	//! Transforms a matrix with a shearing on Z axis.
86b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	//! From GLM_GTX_transform2 extension.
87b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	template <typename T, precision P>
88b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	GLM_FUNC_DECL detail::tmat4x4<T, P> shearZ3D(
89b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG		const detail::tmat4x4<T, P> & m,
90b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG		T x,
91b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG		T y);
92b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG
93b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	//template <typename T> GLM_FUNC_QUALIFIER detail::tmat4x4<T, P> shear(const detail::tmat4x4<T, P> & m, shearPlane, planePoint, angle)
94b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	// Identity + tan(angle) * cross(Normal, OnPlaneVector)     0
95b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	// - dot(PointOnPlane, normal) * OnPlaneVector              1
96b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG
97b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	// Reflect functions seem to don't work
98b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	//template <typename T> detail::tmat3x3<T, P> reflect2D(const detail::tmat3x3<T, P> & m, const detail::tvec3<T, P>& normal){return reflect2DGTX(m, normal);}									//!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension)
99b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	//template <typename T> detail::tmat4x4<T, P> reflect3D(const detail::tmat4x4<T, P> & m, const detail::tvec3<T, P>& normal){return reflect3DGTX(m, normal);}									//!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension)
100b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG
101b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	//! Build planar projection matrix along normal axis.
102b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	//! From GLM_GTX_transform2 extension.
103b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	template <typename T, precision P>
104b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	GLM_FUNC_DECL detail::tmat3x3<T, P> proj2D(
105b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG		const detail::tmat3x3<T, P> & m,
106b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG		const detail::tvec3<T, P>& normal);
107b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG
108b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	//! Build planar projection matrix along normal axis.
109b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	//! From GLM_GTX_transform2 extension.
110b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	template <typename T, precision P>
111b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	GLM_FUNC_DECL detail::tmat4x4<T, P> proj3D(
112b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG		const detail::tmat4x4<T, P> & m,
113b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG		const detail::tvec3<T, P>& normal);
114b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG
115b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	//! Build a scale bias matrix.
116b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	//! From GLM_GTX_transform2 extension.
117b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	template <typename valType, precision P>
118b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	GLM_FUNC_DECL detail::tmat4x4<valType, P> scaleBias(
119b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG		valType scale,
120b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG		valType bias);
121b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG
122b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	//! Build a scale bias matrix.
123b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	//! From GLM_GTX_transform2 extension.
124b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	template <typename valType, precision P>
125b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	GLM_FUNC_DECL detail::tmat4x4<valType, P> scaleBias(
126b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG		detail::tmat4x4<valType, P> const & m,
127b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG		valType scale,
128b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG		valType bias);
129b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG
130b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG	/// @}
131b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG}// namespace glm
132b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG
133b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#include "transform2.inl"
134b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG
135b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#endif//GLM_GTX_transform2
136