• Main Page
  • Namespaces
  • Files
  • File List

quaternion.hpp

00001 
00002 // OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
00004 // Created : 2009-05-21
00005 // Updated : 2010-02-04
00006 // Licence : This source is under MIT License
00007 // File    : glm/gtc/quaternion.hpp
00009 // Dependency:
00010 // - GLM core
00011 // - GLM_GTC_half_float
00012 // - GLM_GTC_double_float
00014 // ToDo:
00015 // - Study constructors with angles and axis
00016 // - Study constructors with vec3 that are the imaginary component of quaternion
00018 
00019 #ifndef glm_gtc_quaternion
00020 #define glm_gtc_quaternion
00021 
00022 // Dependency:
00023 #include "../glm.hpp"
00024 #include "../gtc/half_float.hpp"
00025 #include "../gtc/double_float.hpp"
00026 
00027 namespace glm
00028 {
00029         namespace test{
00030                 bool main_gtc_quaternion();
00031         }//namespace test
00032 
00033         namespace detail
00034         {
00037                 template <typename T> 
00038                 struct tquat// : public genType<T, tquat>
00039                 {
00040                         typedef T value_type;
00041 
00042                 public:
00043                         value_type x, y, z, w;
00044 
00045                         // Constructors
00046                         tquat();
00047                         explicit tquat(
00048                                 value_type const & s, 
00049                                 tvec3<T> const & v);
00050                         explicit tquat(
00051                                 value_type const & w, 
00052                                 value_type const & x, 
00053                                 value_type const & y, 
00054                                 value_type const & z);
00055 
00056                         // Convertions
00057                         //explicit tquat(valType const & pitch, valType const & yaw, valType const & roll);
00059                         explicit tquat(
00060                                 tvec3<T> const & eulerAngles);
00061                         explicit tquat(
00062                                 tmat3x3<T> const & m);
00063                         explicit tquat(
00064                                 tmat4x4<T> const & m);
00065 
00066                         // Accesses
00067                         value_type & operator[](int i);
00068                         value_type const & operator[](int i) const;
00069 
00070                         // Operators
00071                         tquat<T> & operator*=(value_type const & s);
00072                         tquat<T> & operator/=(value_type const & s);
00073                 };
00074 
00075                 template <typename T> 
00076                 detail::tquat<T> operator- (
00077                         detail::tquat<T> const & q);
00078 
00079                 template <typename T> 
00080                 detail::tvec3<T> operator* (
00081                         detail::tquat<T> const & q, 
00082                         detail::tvec3<T> const & v);
00083 
00084                 template <typename T> 
00085                 detail::tvec3<T> operator* (
00086                         detail::tvec3<T> const & v,
00087                         detail::tquat<T> const & q);
00088 
00089                 template <typename T> 
00090                 detail::tvec4<T> operator* (
00091                         detail::tquat<T> const & q, 
00092                         detail::tvec4<T> const & v);
00093 
00094                 template <typename T> 
00095                 detail::tvec4<T> operator* (
00096                         detail::tvec4<T> const & v,
00097                         detail::tquat<T> const & q);
00098 
00099                 template <typename T> 
00100                 detail::tquat<T> operator* (
00101                         detail::tquat<T> const & q, 
00102                         typename detail::tquat<T>::value_type const & s);
00103 
00104                 template <typename T> 
00105                 detail::tquat<T> operator* (
00106                         typename detail::tquat<T>::value_type const & s,
00107                         detail::tquat<T> const & q);
00108 
00109                 template <typename T> 
00110                 detail::tquat<T> operator/ (
00111                         detail::tquat<T> const & q, 
00112                         typename detail::tquat<T>::value_type const & s);
00113 
00114         } //namespace detail
00115 
00116         namespace gtc{
00118     namespace quaternion
00119     {
00122         template <typename T> 
00123                 typename detail::tquat<T>::value_type length(
00124                         detail::tquat<T> const & q);
00125 
00128                 template <typename T> 
00129                 detail::tquat<T> normalize(
00130                         detail::tquat<T> const & q);
00131                 
00134                 template <typename T> 
00135                 typename detail::tquat<T>::value_type dot(
00136                         detail::tquat<T> const & q1, 
00137                         detail::tquat<T> const & q2);
00138 
00141                 template <typename T> 
00142                 detail::tquat<T> cross(
00143                         detail::tquat<T> const & q1, 
00144                         detail::tquat<T> const & q2);
00145                 
00148                 template <typename T> 
00149                 detail::tquat<T> mix(
00150                         detail::tquat<T> const & x, 
00151                         detail::tquat<T> const & y, 
00152                         typename detail::tquat<T>::value_type const & a);
00153                 
00156         template <typename T> 
00157                 detail::tquat<T> conjugate(
00158                         detail::tquat<T> const & q);
00159 
00162         template <typename T> 
00163                 detail::tquat<T> inverse(
00164                         detail::tquat<T> const & q);
00165 
00168                 template <typename T> 
00169                 detail::tquat<T> rotate(
00170                         detail::tquat<T> const & q, 
00171                         typename detail::tquat<T>::value_type const & angle, 
00172                         detail::tvec3<T> const & v);
00173 
00176         template <typename T> 
00177                 detail::tmat3x3<T> mat3_cast(
00178                         detail::tquat<T> const & x);
00179 
00182                 template <typename T> 
00183                 detail::tmat4x4<T> mat4_cast(
00184                         detail::tquat<T> const & x);
00185 
00188                 template <typename T> 
00189                 detail::tquat<T> quat_cast(
00190                         detail::tmat3x3<T> const & x);
00191 
00194                 template <typename T> 
00195                 detail::tquat<T> quat_cast(
00196                         detail::tmat4x4<T> const & x);
00197 
00200         typedef detail::tquat<float> quat;
00201 
00204                 typedef detail::tquat<detail::thalf>    hquat;
00205 
00208                 typedef detail::tquat<float>    fquat;
00209 
00212                 typedef detail::tquat<double>   dquat;
00213 
00214     }//namespace quaternion
00215     }//namespace gtc
00216 } //namespace glm
00217 
00218 #include "quaternion.inl"
00219 
00220 namespace glm{using namespace gtc::quaternion;}
00221 
00222 #endif//glm_gtc_quaternion

Generated by  doxygen 1.7.2