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
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
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
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
00081
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
00091 value_type & operator[](int i);
00092 value_type const & operator[](int i) const;
00093
00094
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 }
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 }
00272
00273 #include "quaternion.inl"
00274
00275 #endif//GLM_GTC_quaternion