- Main Page
- Related Pages
- Modules
- Classes
- Files

- File List

quaternion.hpp
Go to the documentation of this file.

    00001
    00002
    00003
    00004
    00005
    00006
    00007
    00008
    00009
    00010
    00011
    00012
    00013
    00014
    00015
    00016
    00017
    00018
    00019
    00020
    00021
    00022
    00023
    00024
    00025
    00026
    00027
    00028
    00029
    00030
    00031
    00032
    00033
    00034
    00035
    00036
    00037
    00038
    00039 #ifndef GLM_GTC_quaternion
    00040 #define GLM_GTC_quaternion GLM_VERSION
    00041
    00042 // Dependency:
    00043 #include "../glm.hpp"
    00044 #include "../gtc/half_float.hpp"
    00045
    00046 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    00047 #       pragma message("GLM: GLM_GTC_quaternion extension included")
    00048 #endif
    00049
    00050 namespace glm{
    00051 namespace detail
    00052 {
    00056         template <typename T>
    00057         struct tquat// : public genType<T, tquat>
    00058         {
    00059         enum ctor{null};
    00060
    00061         typedef T value_type;
    00062         typedef std::size_t size_type;
    00063
    00064         public:
    00065                 value_type x, y, z, w;
    00066
    00067         GLM_FUNC_DECL size_type length() const;
    00068
    00069                 // Constructors
    00070                 tquat();
    00071                 explicit tquat(
    00072                         value_type const & s,
    00073                         glm::detail::tvec3<T> const & v);
    00074                 explicit tquat(
    00075                         value_type const & w,
    00076                         value_type const & x,
    00077                         value_type const & y,
    00078                         value_type const & z);
    00079
    00080                 // Convertions
    00081                 //explicit tquat(valType const & pitch, valType const & yaw, valType const & roll);
    00083                 explicit tquat(
    00084                         tvec3<T> const & eulerAngles);
    00085                 explicit tquat(
    00086                         tmat3x3<T> const & m);
    00087                 explicit tquat(
    00088                         tmat4x4<T> const & m);
    00089
    00090                 // Accesses
    00091                 value_type & operator[](int i);
    00092                 value_type const & operator[](int i) const;
    00093
    00094                 // Operators
    00095                 tquat<T> & operator*=(value_type const & s);
    00096                 tquat<T> & operator/=(value_type const & s);
    00097         };
    00098
    00099         template <typename T>
    00100         detail::tquat<T> operator- (
    00101                 detail::tquat<T> const & q);
    00102
    00103         template <typename T>
    00104         detail::tquat<T> operator+ (
    00105                 detail::tquat<T> const & q,
    00106                 detail::tquat<T> const & p);
    00107
    00108         template <typename T>
    00109         detail::tquat<T> operator* (
    00110                 detail::tquat<T> const & q,
    00111                 detail::tquat<T> const & p);
    00112
    00113         template <typename T>
    00114         detail::tvec3<T> operator* (
    00115                 detail::tquat<T> const & q,
    00116                 detail::tvec3<T> const & v);
    00117
    00118         template <typename T>
    00119         detail::tvec3<T> operator* (
    00120                 detail::tvec3<T> const & v,
    00121                 detail::tquat<T> const & q);
    00122
    00123         template <typename T>
    00124         detail::tvec4<T> operator* (
    00125                 detail::tquat<T> const & q,
    00126                 detail::tvec4<T> const & v);
    00127
    00128         template <typename T>
    00129         detail::tvec4<T> operator* (
    00130                 detail::tvec4<T> const & v,
    00131                 detail::tquat<T> const & q);
    00132
    00133         template <typename T>
    00134         detail::tquat<T> operator* (
    00135                 detail::tquat<T> const & q,
    00136                 typename detail::tquat<T>::value_type const & s);
    00137
    00138         template <typename T>
    00139         detail::tquat<T> operator* (
    00140                 typename detail::tquat<T>::value_type const & s,
    00141                 detail::tquat<T> const & q);
    00142
    00143         template <typename T>
    00144         detail::tquat<T> operator/ (
    00145                 detail::tquat<T> const & q,
    00146                 typename detail::tquat<T>::value_type const & s);
    00147
    00148 } //namespace detail
    00149
    00152
    00156     template <typename T>
    00157     T length(
    00158                 detail::tquat<T> const & q);
    00159
    00163         template <typename T>
    00164         detail::tquat<T> normalize(
    00165                 detail::tquat<T> const & q);
    00166
    00170         template <typename T>
    00171         T dot(
    00172                 detail::tquat<T> const & q1,
    00173                 detail::tquat<T> const & q2);
    00174
    00178         template <typename T>
    00179         detail::tquat<T> mix(
    00180                 detail::tquat<T> const & x,
    00181                 detail::tquat<T> const & y,
    00182                 T const & a);
    00183
    00187     template <typename T>
    00188         detail::tquat<T> conjugate(
    00189                 detail::tquat<T> const & q);
    00190
    00194     template <typename T>
    00195         detail::tquat<T> inverse(
    00196                 detail::tquat<T> const & q);
    00197
    00201         template <typename T>
    00202         detail::tquat<T> rotate(
    00203                 detail::tquat<T> const & q,
    00204                 typename detail::tquat<T>::value_type const & angle,
    00205                 detail::tvec3<T> const & v);
    00206
    00210     template <typename T>
    00211         detail::tmat3x3<T> mat3_cast(
    00212                 detail::tquat<T> const & x);
    00213
    00217         template <typename T>
    00218         detail::tmat4x4<T> mat4_cast(
    00219                 detail::tquat<T> const & x);
    00220
    00224         template <typename T>
    00225         detail::tquat<T> quat_cast(
    00226                 detail::tmat3x3<T> const & x);
    00227
    00231         template <typename T>
    00232         detail::tquat<T> quat_cast(
    00233                 detail::tmat4x4<T> const & x);
    00234
    00238     typedef detail::tquat<float> quat;
    00239
    00243         typedef detail::tquat<detail::half>     hquat;
    00244
    00248         typedef detail::tquat<float>    fquat;
    00249
    00253         typedef detail::tquat<double>   dquat;
    00254
    00258         typedef detail::tquat<lowp_float>               lowp_quat;
    00259
    00263         typedef detail::tquat<mediump_float>    mediump_quat;
    00264
    00268         typedef detail::tquat<highp_float>              highp_quat;
    00269
    00271 } //namespace glm
    00272
    00273 #include "quaternion.inl"
    00274
    00275 #endif//GLM_GTC_quaternion