quaternion.hpp Source File

- Main Page
- Modules
- Namespaces
- Classes
- Files

- File List

# quaternion.hpp

    00001
    00002 // OpenGL Mathematics Copyright (c) 2005 - 2011 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
    00013 // ToDo:
    00014 // - Study constructors with angles and axis
    00015 // - Study constructors with vec3 that are the imaginary component of quaternion
    00017
    00018 #ifndef glm_gtc_quaternion
    00019 #define glm_gtc_quaternion
    00020
    00021 // Dependency:
    00022 #include "../glm.hpp"
    00023 #include "../gtc/half_float.hpp"
    00024
    00025 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    00026 #       pragma message("GLM: GLM_GTC_quaternion extension included")
    00027 #endif
    00028
    00029 namespace glm
    00030 {
    00031         namespace test{
    00032                 bool main_gtc_quaternion();
    00033         }//namespace test
    00034
    00035         namespace detail
    00036         {
    00040                 template <typename T>
    00041                 struct tquat// : public genType<T, tquat>
    00042                 {
    00043                         typedef T value_type;
    00044
    00045                 public:
    00046                         value_type x, y, z, w;
    00047
    00048                         // Constructors
    00049                         tquat();
    00050                         explicit tquat(
    00051                                 value_type const & s,
    00052                                 tvec3<T> const & v);
    00053                         explicit tquat(
    00054                                 value_type const & w,
    00055                                 value_type const & x,
    00056                                 value_type const & y,
    00057                                 value_type const & z);
    00058
    00059                         // Convertions
    00060                         //explicit tquat(valType const & pitch, valType const & yaw, valType const & roll);
    00062                         explicit tquat(
    00063                                 tvec3<T> const & eulerAngles);
    00064                         explicit tquat(
    00065                                 tmat3x3<T> const & m);
    00066                         explicit tquat(
    00067                                 tmat4x4<T> const & m);
    00068
    00069                         // Accesses
    00070                         value_type & operator[](int i);
    00071                         value_type const & operator[](int i) const;
    00072
    00073                         // Operators
    00074                         tquat<T> & operator*=(value_type const & s);
    00075                         tquat<T> & operator/=(value_type const & s);
    00076                 };
    00077
    00078                 template <typename T>
    00079                 detail::tquat<T> operator- (
    00080                         detail::tquat<T> const & q);
    00081
    00082                 template <typename T>
    00083                 detail::tquat<T> operator* (
    00084                         detail::tquat<T> const & q,
    00085                         detail::tquat<T> const & p);
    00086
    00087                 template <typename T>
    00088                 detail::tvec3<T> operator* (
    00089                         detail::tquat<T> const & q,
    00090                         detail::tvec3<T> const & v);
    00091
    00092                 template <typename T>
    00093                 detail::tvec3<T> operator* (
    00094                         detail::tvec3<T> const & v,
    00095                         detail::tquat<T> const & q);
    00096
    00097                 template <typename T>
    00098                 detail::tvec4<T> operator* (
    00099                         detail::tquat<T> const & q,
    00100                         detail::tvec4<T> const & v);
    00101
    00102                 template <typename T>
    00103                 detail::tvec4<T> operator* (
    00104                         detail::tvec4<T> const & v,
    00105                         detail::tquat<T> const & q);
    00106
    00107                 template <typename T>
    00108                 detail::tquat<T> operator* (
    00109                         detail::tquat<T> const & q,
    00110                         typename detail::tquat<T>::value_type const & s);
    00111
    00112                 template <typename T>
    00113                 detail::tquat<T> operator* (
    00114                         typename detail::tquat<T>::value_type const & s,
    00115                         detail::tquat<T> const & q);
    00116
    00117                 template <typename T>
    00118                 detail::tquat<T> operator/ (
    00119                         detail::tquat<T> const & q,
    00120                         typename detail::tquat<T>::value_type const & s);
    00121
    00122         } //namespace detail
    00123
    00124         namespace gtc{
    00126     namespace quaternion
    00127     {
    00130
    00133         template <typename T>
    00134                 typename detail::tquat<T>::value_type length(
    00135                         detail::tquat<T> const & q);
    00136
    00139                 template <typename T>
    00140                 detail::tquat<T> normalize(
    00141                         detail::tquat<T> const & q);
    00142
    00145                 template <typename T>
    00146                 typename detail::tquat<T>::value_type dot(
    00147                         detail::tquat<T> const & q1,
    00148                         detail::tquat<T> const & q2);
    00149
    00152                 template <typename T>
    00153                 GLM_DEPRECATED detail::tquat<T> cross(
    00154                         detail::tquat<T> const & q1,
    00155                         detail::tquat<T> const & q2);
    00156
    00159                 template <typename T>
    00160                 detail::tquat<T> mix(
    00161                         detail::tquat<T> const & x,
    00162                         detail::tquat<T> const & y,
    00163                         typename detail::tquat<T>::value_type const & a);
    00164
    00167         template <typename T>
    00168                 detail::tquat<T> conjugate(
    00169                         detail::tquat<T> const & q);
    00170
    00173         template <typename T>
    00174                 detail::tquat<T> inverse(
    00175                         detail::tquat<T> const & q);
    00176
    00179                 template <typename T>
    00180                 detail::tquat<T> rotate(
    00181                         detail::tquat<T> const & q,
    00182                         typename detail::tquat<T>::value_type const & angle,
    00183                         detail::tvec3<T> const & v);
    00184
    00187         template <typename T>
    00188                 detail::tmat3x3<T> mat3_cast(
    00189                         detail::tquat<T> const & x);
    00190
    00193                 template <typename T>
    00194                 detail::tmat4x4<T> mat4_cast(
    00195                         detail::tquat<T> const & x);
    00196
    00199                 template <typename T>
    00200                 detail::tquat<T> quat_cast(
    00201                         detail::tmat3x3<T> const & x);
    00202
    00205                 template <typename T>
    00206                 detail::tquat<T> quat_cast(
    00207                         detail::tmat4x4<T> const & x);
    00208
    00211         typedef detail::tquat<float> quat;
    00212
    00215                 typedef detail::tquat<detail::thalf>    hquat;
    00216
    00219                 typedef detail::tquat<float>    fquat;
    00220
    00223                 typedef detail::tquat<double>   dquat;
    00224
    00226
    00227     }//namespace quaternion
    00228     }//namespace gtc
    00229 } //namespace glm
    00230
    00231 #include "quaternion.inl"
    00232
    00233 namespace glm{using namespace gtc::quaternion;}
    00234
    00235 #endif//glm_gtc_quaternion