# GLM: quaternion.hpp Source File

- Main Page
- Namespaces
- Files

- File List

# quaternion.hpp

    00001
    00002 // OpenGL Mathematics Copyright (c) 2005 - 2009 G-Truc Creation (www.g-truc.net)
    00004 // Created : 2009-05-21
    00005 // Updated : 2009-06-04
    00006 // Licence : This source is under MIT License
    00007 // File    : glm/gtc/quaternion.hpp
    00009 // Dependency:
    00010 // - GLM core
    00012 // ToDo:
    00013 // - Study constructors with angles and axis
    00014 // - Study constructors with vec3 that are the imaginary component of quaternion
    00016
    00017 #ifndef glm_gtc_quaternion
    00018 #define glm_gtc_quaternion
    00019
    00020 // Dependency:
    00021 #include "../glm.hpp"
    00022
    00023 namespace glm
    00024 {
    00025         namespace test{
    00026                 bool main_gtc_quaternion();
    00027         }//namespace test
    00028
    00029         namespace detail
    00030         {
    00033                 template <typename valType>
    00034                 class tquat
    00035                 {
    00036                 public:
    00037                         valType x, y, z, w;
    00038
    00039                         // Constructors
    00040                         tquat();
    00041                         explicit tquat(valType const & s, tvec3<valType> const & v);
    00042                         explicit tquat(valType const & w, valType const & x, valType const & y, valType const & z);
    00043
    00044                         // Convertions
    00045                         //explicit tquat(valType const & pitch, valType const & yaw, valType const & roll);
    00047                         explicit tquat(tvec3<valType> const & eulerAngles);
    00048                         explicit tquat(tmat3x3<valType> const & m);
    00049                         explicit tquat(tmat4x4<valType> const & m);
    00050
    00051                         // Accesses
    00052                         valType& operator[](int i);
    00053                         valType operator[](int i) const;
    00054
    00055                         // Operators
    00056                         tquat<valType>& operator*=(valType const & s);
    00057                         tquat<valType>& operator/=(valType const & s);
    00058                 };
    00059
    00060                 template <typename valType>
    00061                 detail::tquat<valType> operator- (
    00062                         detail::tquat<valType> const & q);
    00063
    00064                 template <typename valType>
    00065                 detail::tvec3<valType> operator* (
    00066                         detail::tquat<valType> const & q,
    00067                         detail::tvec3<valType> const & v);
    00068
    00069                 template <typename valType>
    00070                 detail::tvec3<valType> operator* (
    00071                         detail::tvec3<valType> const & v,
    00072                         detail::tquat<valType> const & q);
    00073
    00074                 template <typename valType>
    00075                 detail::tvec4<valType> operator* (
    00076                         detail::tquat<valType> const & q,
    00077                         detail::tvec4<valType> const & v);
    00078
    00079                 template <typename valType>
    00080                 detail::tvec4<valType> operator* (
    00081                         detail::tvec4<valType> const & v,
    00082                         detail::tquat<valType> const & q);
    00083
    00084                 template <typename valType>
    00085                 detail::tquat<valType> operator* (
    00086                         detail::tquat<valType> const & q,
    00087                         valType const & s);
    00088
    00089                 template <typename valType>
    00090                 detail::tquat<valType> operator* (
    00091                         valType const & s,
    00092                         detail::tquat<valType> const & q);
    00093
    00094                 template <typename valType>
    00095                 detail::tquat<valType> operator/ (
    00096                         detail::tquat<valType> const & q,
    00097                         valType const & s);
    00098
    00099         } //namespace detail
    00100
    00101         namespace gtc{
    00103     namespace quaternion
    00104     {
    00107         template <typename valType>
    00108                 valType length(
    00109                         detail::tquat<valType> const & q);
    00110
    00113                 template <typename valType>
    00114                 detail::tquat<valType> normalize(
    00115                         detail::tquat<valType> const & q);
    00116
    00119                 template <typename valType>
    00120                 valType dot(
    00121                         detail::tquat<valType> const & q1,
    00122                         detail::tquat<valType> const & q2);
    00123
    00126                 template <typename valType>
    00127                 detail::tquat<valType> cross(
    00128                         detail::tquat<valType> const & q1,
    00129                         detail::tquat<valType> const & q2);
    00130
    00133                 template <typename valType>
    00134                 detail::tquat<valType> mix(
    00135                         detail::tquat<valType> const & x,
    00136                         detail::tquat<valType> const & y,
    00137                         valType const & a);
    00138
    00141         template <typename valType>
    00142                 detail::tquat<valType> conjugate(
    00143                         detail::tquat<valType> const & q);
    00144
    00147         template <typename valType>
    00148                 detail::tquat<valType> inverse(
    00149                         detail::tquat<valType> const & q);
    00150
    00153                 template <typename valType>
    00154                 detail::tquat<valType> rotate(
    00155                         detail::tquat<valType> const & q,
    00156                         valType const & angle,
    00157                         detail::tvec3<valType> const & v);
    00158
    00161         template <typename valType>
    00162                 detail::tmat3x3<valType> mat3_cast(
    00163                         detail::tquat<valType> const & x);
    00164
    00167                 template <typename valType>
    00168                 detail::tmat4x4<valType> mat4_cast(
    00169                         detail::tquat<valType> const & x);
    00170
    00173                 template <typename valType>
    00174                 detail::tquat<valType> quat_cast(
    00175                         detail::tmat3x3<valType> const & x);
    00176
    00179                 template <typename valType>
    00180                 detail::tquat<valType> quat_cast(
    00181                         detail::tmat4x4<valType> const & x);
    00182
    00185         typedef detail::tquat<float> quat;
    00186
    00187     }//namespace quaternion
    00188     }//namespace gtc
    00189 } //namespace glm
    00190
    00191 #define GLM_GTC_quaternion namespace gtc::quaternion
    00192 #ifndef GLM_GTC_GLOBAL
    00193 namespace glm {using GLM_GTC_quaternion;}
    00194 #endif//GLM_GTC_GLOBAL
    00195
    00196 #include "quaternion.inl"
    00197
    00198 #endif//glm_gtc_quaternion