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 90
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 
00155     template <typename T> 
00156     T length(
00157                 detail::tquat<T> const & q);
00158 
00161         template <typename T> 
00162         detail::tquat<T> normalize(
00163                 detail::tquat<T> const & q);
00164                 
00167         template <typename T> 
00168         T dot(
00169                 detail::tquat<T> const & q1, 
00170                 detail::tquat<T> const & q2);
00171 
00174         template <typename T> 
00175         detail::tquat<T> mix(
00176                 detail::tquat<T> const & x, 
00177                 detail::tquat<T> const & y, 
00178                 T const & a);
00179                 
00182     template <typename T> 
00183         detail::tquat<T> conjugate(
00184                 detail::tquat<T> const & q);
00185 
00188     template <typename T> 
00189         detail::tquat<T> inverse(
00190                 detail::tquat<T> const & q);
00191 
00194         template <typename T> 
00195         detail::tquat<T> rotate(
00196                 detail::tquat<T> const & q, 
00197                 typename detail::tquat<T>::value_type const & angle, 
00198                 detail::tvec3<T> const & v);
00199 
00202     template <typename T> 
00203         detail::tmat3x3<T> mat3_cast(
00204                 detail::tquat<T> const & x);
00205 
00208         template <typename T> 
00209         detail::tmat4x4<T> mat4_cast(
00210                 detail::tquat<T> const & x);
00211 
00214         template <typename T> 
00215         detail::tquat<T> quat_cast(
00216                 detail::tmat3x3<T> const & x);
00217 
00220         template <typename T> 
00221         detail::tquat<T> quat_cast(
00222                 detail::tmat4x4<T> const & x);
00223 
00226     typedef detail::tquat<float> quat;
00227 
00230         typedef detail::tquat<detail::thalf>    hquat;
00231 
00234         typedef detail::tquat<float>    fquat;
00235 
00238         typedef detail::tquat<double>   dquat;
00239 
00242         typedef detail::tquat<lowp_float>               lowp_quat;
00243 
00246         typedef detail::tquat<mediump_float>    mediump_quat;
00247 
00250         typedef detail::tquat<highp_float>              highp_quat;
00251     
00253 } //namespace glm
00254 
00255 #include "quaternion.inl"
00256 
00257 #endif//GLM_GTC_quaternion