- 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