GLM Version 0.9.0
|
00001 00002 // OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net) 00004 // Created : 2005-12-21 00005 // Updated : 2009-05-21 00006 // Licence : This source is under MIT License 00007 // File : glm/gtx/quaternion.hpp 00009 // Dependency: 00010 // - GLM core 00012 // ToDo: 00013 // - Study constructors with angles and axis 00014 // - Study constructors with vec3 that are the imaginary component of quaternion 00016 00017 #ifndef glm_gtx_quaternion 00018 #define glm_gtx_quaternion 00019 00020 // Dependency: 00021 #include "../glm.hpp" 00022 #include "../gtc/quaternion.hpp" 00023 00024 namespace glm 00025 { 00026 namespace gtx{ 00028 namespace quaternion 00029 { 00030 using namespace gtc::quaternion; 00031 00034 template <typename valType> 00035 detail::tvec3<valType> cross( 00036 detail::tquat<valType> const & q, 00037 detail::tvec3<valType> const & v); 00038 00041 template <typename valType> 00042 detail::tvec3<valType> cross( 00043 detail::tvec3<valType> const & v, 00044 detail::tquat<valType> const & q); 00045 00049 template <typename valType> 00050 detail::tquat<valType> squad( 00051 detail::tquat<valType> const & q1, 00052 detail::tquat<valType> const & q2, 00053 detail::tquat<valType> const & s1, 00054 detail::tquat<valType> const & s2, 00055 valType const & h); 00056 00059 template <typename valType> 00060 detail::tquat<valType> intermediate( 00061 detail::tquat<valType> const & prev, 00062 detail::tquat<valType> const & curr, 00063 detail::tquat<valType> const & next); 00064 00067 template <typename valType> 00068 detail::tquat<valType> exp( 00069 detail::tquat<valType> const & q, 00070 valType const & exponent); 00071 00074 template <typename valType> 00075 detail::tquat<valType> log( 00076 detail::tquat<valType> const & q); 00077 00080 template <typename valType> 00081 detail::tquat<valType> pow( 00082 detail::tquat<valType> const & x, 00083 valType const & y); 00084 00087 //template <typename valType> 00088 //detail::tquat<valType> sqrt( 00089 // detail::tquat<valType> const & q); 00090 00093 template <typename valType> 00094 detail::tvec3<valType> rotate( 00095 detail::tquat<valType> const & q, 00096 detail::tvec3<valType> const & v); 00097 00100 template <typename valType> 00101 detail::tvec4<valType> rotate( 00102 detail::tquat<valType> const & q, 00103 detail::tvec4<valType> const & v); 00104 00107 template <typename valType> 00108 valType angle( 00109 detail::tquat<valType> const & x); 00110 00113 template <typename valType> 00114 detail::tvec3<valType> axis( 00115 detail::tquat<valType> const & x); 00116 00119 template <typename valType> 00120 detail::tquat<valType> angleAxis( 00121 valType const & angle, 00122 valType const & x, 00123 valType const & y, 00124 valType const & z); 00125 00128 template <typename valType> 00129 detail::tquat<valType> angleAxis( 00130 valType const & angle, 00131 detail::tvec3<valType> const & v); 00132 00135 template <typename valType> 00136 valType extractRealComponent( 00137 detail::tquat<valType> const & q); 00138 00141 template <typename valType> 00142 valType roll( 00143 detail::tquat<valType> const & x); 00144 00147 template <typename valType> 00148 valType pitch( 00149 detail::tquat<valType> const & x); 00150 00153 template <typename valType> 00154 valType yaw( 00155 detail::tquat<valType> const & x); 00156 00159 template <typename valType> 00160 detail::tvec3<valType> eularAngles( 00161 detail::tquat<valType> const & x); 00162 00165 template <typename valType> 00166 detail::tmat3x3<valType> toMat3( 00167 detail::tquat<valType> const & x){return gtc::quaternion::mat3_cast(x);} 00168 00171 template <typename valType> 00172 detail::tmat4x4<valType> toMat4( 00173 detail::tquat<valType> const & x){return gtc::quaternion::mat4_cast(x);} 00174 00177 template <typename valType> 00178 detail::tquat<valType> toQuat( 00179 detail::tmat3x3<valType> const & x){return gtc::quaternion::quat_cast(x);} 00180 00183 template <typename valType> 00184 detail::tquat<valType> toQuat( 00185 detail::tmat4x4<valType> const & x){return gtc::quaternion::quat_cast(x);} 00186 00187 }//namespace quaternion 00188 }//namespace gtx 00189 } //namespace glm 00190 00191 #include "quaternion.inl" 00192 00193 namespace glm{using namespace gtx::quaternion;} 00194 00195 #endif//glm_gtx_quaternion