- 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 namespace detail
    00031 {
    00035         template <typename T>
    00036         struct tquat// : public genType<T, tquat>
    00037         {
    00038                 typedef T value_type;
    00039
    00040         public:
    00041                 value_type x, y, z, w;
    00042
    00043                 // Constructors
    00044                 tquat();
    00045                 explicit tquat(
    00046                         value_type const & s,
    00047                         tvec3<T> const & v);
    00048                 explicit tquat(
    00049                         value_type const & w,
    00050                         value_type const & x,
    00051                         value_type const & y,
    00052                         value_type const & z);
    00053
    00054                 // Convertions
    00055                 //explicit tquat(valType const & pitch, valType const & yaw, valType const & roll);
    00057                 explicit tquat(
    00058                         tvec3<T> const & eulerAngles);
    00059                 explicit tquat(
    00060                         tmat3x3<T> const & m);
    00061                 explicit tquat(
    00062                         tmat4x4<T> const & m);
    00063
    00064                 // Accesses
    00065                 value_type & operator[](int i);
    00066                 value_type const & operator[](int i) const;
    00067
    00068                 // Operators
    00069                 tquat<T> & operator*=(value_type const & s);
    00070                 tquat<T> & operator/=(value_type const & s);
    00071         };
    00072
    00073         template <typename T>
    00074         detail::tquat<T> operator- (
    00075                 detail::tquat<T> const & q);
    00076
    00077         template <typename T>
    00078         detail::tquat<T> operator+ (
    00079                 detail::tquat<T> const & q,
    00080                 detail::tquat<T> const & p);
    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{
    00125 namespace quaternion
    00126 {
    00129
    00132     template <typename T>
    00133         typename detail::tquat<T>::value_type length(
    00134                 detail::tquat<T> const & q);
    00135
    00138         template <typename T>
    00139         detail::tquat<T> normalize(
    00140                 detail::tquat<T> const & q);
    00141
    00144         template <typename T>
    00145         typename detail::tquat<T>::value_type dot(
    00146                 detail::tquat<T> const & q1,
    00147                 detail::tquat<T> const & q2);
    00148
    00151         template <typename T>
    00152         GLM_DEPRECATED detail::tquat<T> cross(
    00153                 detail::tquat<T> const & q1,
    00154                 detail::tquat<T> const & q2);
    00155
    00158         template <typename T>
    00159         detail::tquat<T> mix(
    00160                 detail::tquat<T> const & x,
    00161                 detail::tquat<T> const & y,
    00162                 T const & a);
    00163
    00166     template <typename T>
    00167         detail::tquat<T> conjugate(
    00168                 detail::tquat<T> const & q);
    00169
    00172     template <typename T>
    00173         detail::tquat<T> inverse(
    00174                 detail::tquat<T> const & q);
    00175
    00178         template <typename T>
    00179         detail::tquat<T> rotate(
    00180                 detail::tquat<T> const & q,
    00181                 typename detail::tquat<T>::value_type const & angle,
    00182                 detail::tvec3<T> const & v);
    00183
    00186     template <typename T>
    00187         detail::tmat3x3<T> mat3_cast(
    00188                 detail::tquat<T> const & x);
    00189
    00192         template <typename T>
    00193         detail::tmat4x4<T> mat4_cast(
    00194                 detail::tquat<T> const & x);
    00195
    00198         template <typename T>
    00199         detail::tquat<T> quat_cast(
    00200                 detail::tmat3x3<T> const & x);
    00201
    00204         template <typename T>
    00205         detail::tquat<T> quat_cast(
    00206                 detail::tmat4x4<T> const & x);
    00207
    00210     typedef detail::tquat<float> quat;
    00211
    00214         typedef detail::tquat<detail::thalf>    hquat;
    00215
    00218         typedef detail::tquat<float>    fquat;
    00219
    00222         typedef detail::tquat<double>   dquat;
    00223
    00226         typedef detail::tquat<lowp_float>               lowp_quat;
    00227
    00230         typedef detail::tquat<mediump_float>    mediump_quat;
    00231
    00234         typedef detail::tquat<highp_float>              highp_quat;
    00236
    00237 } //namespace quaternion
    00238 } //namespace gtc
    00239 } //namespace glm
    00240
    00241 #include "quaternion.inl"
    00242
    00243 namespace glm{using namespace gtc::quaternion;}
    00244
    00245 #endif//glm_gtc_quaternion