00001
00002
00004
00005
00006
00007
00009
00010
00012
00013
00014
00016
00017 #ifndef glm_gtc_quaternion
00018 #define glm_gtc_quaternion
00019
00020
00021 #include "../glm.hpp"
00022
00023 namespace glm
00024 {
00025 namespace test{
00026 bool main_gtc_quaternion();
00027 }
00028
00029 namespace detail
00030 {
00033 template <typename valType>
00034 class tquat
00035 {
00036 public:
00037 valType x, y, z, w;
00038
00039
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
00045
00047 explicit tquat(tvec3<valType> const & eulerAngles);
00048 explicit tquat(tmat3x3<valType> const & m);
00049 explicit tquat(tmat4x4<valType> const & m);
00050
00051
00052 valType& operator[](int i);
00053 valType operator[](int i) const;
00054
00055
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 }
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 }
00188 }
00189 }
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