00001
00002
00004
00005
00006
00007
00009
00010
00011
00012
00013
00014
00016
00017 #ifndef glm_gtx_matx
00018 #define glm_gtx_matx
00019
00020
00021 #include "../glm.hpp"
00022 #include "../gtx/vecx.hpp"
00023
00024 namespace glm{
00025 namespace detail{
00026
00027 template <int N, typename T = float>
00028 class _xmatxGTX
00029 {
00030 private:
00031
00032 _xvecxGTX<N, T> value[N];
00033
00034 public:
00035 _xmatxGTX<N, T> _inverse() const;
00036
00037 public:
00038 typedef T value_type;
00039 typedef int size_type;
00040 static const size_type value_size;
00041
00042
00043 _xmatxGTX();
00044 explicit _xmatxGTX(const T x);
00045
00046
00047 _xvecxGTX<N, T>& operator[](int i) {return value[i];}
00048 const _xvecxGTX<N, T> & operator[](int i) const {return value[i];}
00049 operator T*() {return &value[0][0];}
00050 operator const T*() const {return &value[0][0];}
00051
00052
00053 _xmatxGTX<N, T>& operator= (const _xmatxGTX<N, T>& m);
00054 _xmatxGTX<N, T>& operator+= (const T s);
00055 _xmatxGTX<N, T>& operator+= (const _xmatxGTX<N, T>& m);
00056 _xmatxGTX<N, T>& operator-= (const T s);
00057 _xmatxGTX<N, T>& operator-= (const _xmatxGTX<N, T>& m);
00058 _xmatxGTX<N, T>& operator*= (const T s);
00059 _xmatxGTX<N, T>& operator*= (const _xmatxGTX<N, T>& m);
00060 _xmatxGTX<N, T>& operator/= (const T s);
00061 _xmatxGTX<N, T>& operator/= (const _xmatxGTX<N, T>& m);
00062 _xmatxGTX<N, T>& operator++ ();
00063 _xmatxGTX<N, T>& operator-- ();
00064 };
00065
00066
00067 template <int N, typename T>
00068 _xmatxGTX<N, T> operator+ (const _xmatxGTX<N, T>& m, const T s);
00069
00070 template <int N, typename T>
00071 _xmatxGTX<N, T> operator+ (const T s, const _xmatxGTX<N, T>& m);
00072
00073 template <int N, typename T>
00074 _xvecxGTX<N, T> operator+ (const _xmatxGTX<N, T>& m, const _xvecxGTX<N, T>& v);
00075
00076 template <int N, typename T>
00077 _xvecxGTX<N, T> operator+ (const _xvecxGTX<N, T>& v, const _xmatxGTX<N, T>& m);
00078
00079 template <int N, typename T>
00080 _xmatxGTX<N, T> operator+ (const _xmatxGTX<N, T>& m1, const _xmatxGTX<N, T>& m2);
00081
00082 template <int N, typename T>
00083 _xmatxGTX<N, T> operator- (const _xmatxGTX<N, T>& m, const T s);
00084
00085 template <int N, typename T>
00086 _xmatxGTX<N, T> operator- (const T s, const _xmatxGTX<N, T>& m);
00087
00088 template <int N, typename T>
00089 _xvecxGTX<N, T> operator- (const _xmatxGTX<N, T>& m, const _xvecxGTX<N, T>& v);
00090
00091 template <int N, typename T>
00092 _xvecxGTX<N, T> operator- (const _xvecxGTX<N, T>& v, const _xmatxGTX<N, T>& m);
00093
00094 template <int N, typename T>
00095 _xmatxGTX<N, T> operator- (const _xmatxGTX<N, T>& m1, const _xmatxGTX<N, T>& m2);
00096
00097 template <int N, typename T>
00098 _xmatxGTX<N, T> operator* (const _xmatxGTX<N, T>& m, const T s);
00099
00100 template <int N, typename T>
00101 _xmatxGTX<N, T> operator* (const T s, const _xmatxGTX<N, T>& m);
00102
00103 template <int N, typename T>
00104 _xvecxGTX<N, T> operator* (const _xmatxGTX<N, T>& m, const _xvecxGTX<N, T>& v);
00105
00106 template <int N, typename T>
00107 _xvecxGTX<N, T> operator* (const _xvecxGTX<N, T>& v, const _xmatxGTX<N, T>& m);
00108
00109 template <int N, typename T>
00110 _xmatxGTX<N, T> operator* (const _xmatxGTX<N, T>& m1, const _xmatxGTX<N, T>& m2);
00111
00112 template <int N, typename T>
00113 _xmatxGTX<N, T> operator/ (const _xmatxGTX<N, T>& m, const T s);
00114
00115 template <int N, typename T>
00116 _xmatxGTX<N, T> operator/ (const T s, const _xmatxGTX<N, T>& m);
00117
00118 template <int N, typename T>
00119 _xvecxGTX<N, T> operator/ (const _xmatxGTX<N, T>& m, const _xvecxGTX<N, T>& v);
00120
00121 template <int N, typename T>
00122 _xvecxGTX<N, T> operator/ (const _xvecxGTX<N, T>& v, const _xmatxGTX<N, T>& m);
00123
00124 template <int N, typename T>
00125 _xmatxGTX<N, T> operator/ (const _xmatxGTX<N, T>& m1, const _xmatxGTX<N, T>& m2);
00126
00127
00128 template <int N, typename T>
00129 const _xmatxGTX<N, T> operator- (const _xmatxGTX<N, T>& m);
00130
00131 template <int N, typename T>
00132 const _xmatxGTX<N, T> operator-- (const _xmatxGTX<N, T>& m, int);
00133
00134 template <int N, typename T>
00135 const _xmatxGTX<N, T> operator++ (const _xmatxGTX<N, T>& m, int);
00136
00137 }
00138
00139
00140 template <int N, typename T> detail::_xmatxGTX<N, T> matrixCompMultGTX(const detail::_xmatxGTX<N, T>& x, const detail::_xmatxGTX<N, T>& y);
00141 template <int N, typename T> detail::_xmatxGTX<N, T> outerProductGTX(const detail::_xvecxGTX<N, T>& c, const detail::_xvecxGTX<N, T>& r);
00142 template <int N, typename T> detail::_xmatxGTX<N, T> transposeGTX(const detail::_xmatxGTX<N, T>& x);
00143
00144 template <int N, typename T> T determinantGTX(const detail::_xmatxGTX<N, T>& m);
00145 template <int N, typename T> detail::_xmatxGTX<N, T> inverseTransposeGTX(const detail::_xmatxGTX<N, T> & m);
00146
00147 template <int N, typename T> void columnGTX(detail::_xmatxGTX<N, T>& m, int ColIndex, const detail::_xvecxGTX<N, T>& v);
00148 template <int N, typename T> void rowGTX(detail::_xmatxGTX<N, T>& m, int RowIndex, const detail::_xvecxGTX<N, T>& v);
00149
00150 template <int N, typename T> detail::_xvecxGTX<N, T> columnGTX(const detail::_xmatxGTX<N, T>& m, int ColIndex);
00151 template <int N, typename T> detail::_xvecxGTX<N, T> rowGTX(const detail::_xmatxGTX<N, T>& m, int RowIndex);
00152
00153 namespace gtx
00154 {
00156 namespace matx
00157 {
00158
00159 template <int N, typename T> inline detail::_xmatxGTX<N, T> matrixCompMult(const detail::_xmatxGTX<N, T>& x, const detail::_xmatxGTX<N, T>& y){return matrixCompMult(x, y);}
00160 template <int N, typename T> inline detail::_xmatxGTX<N, T> outerProduct(const detail::_xvecxGTX<N, T>& c, const detail::_xvecxGTX<N, T>& r){return outerProductGTX(c, r);}
00161 template <int N, typename T> inline detail::_xmatxGTX<N, T> transpose(const detail::_xmatxGTX<N, T>& x){return transposeGTX(x);}
00162
00163 template <int N, typename T> inline T determinant(const detail::_xmatxGTX<N, T>& m){return determinantGTX(m);}
00164 template <int N, typename T> inline detail::_xmatxGTX<N, T> inverseTranspose(const detail::_xmatxGTX<N, T>& m){return inverseTransposeGTX(m);}
00165
00166 template <int N, typename T> inline void column(detail::_xmatxGTX<N, T>& m, int ColIndex, const detail::_xvecxGTX<N, T>& v){setColumnGTX(m, v);}
00167 template <int N, typename T> inline void row(detail::_xmatxGTX<N, T>& m, int RowIndex, const detail::_xvecxGTX<N, T>& v){setRowGTX(m, v);}
00168
00169 template <int N, typename T> inline detail::_xvecxGTX<N, T> column(const detail::_xmatxGTX<N, T>& m, int ColIndex){return column(m, ColIndex);}
00170 template <int N, typename T> inline detail::_xvecxGTX<N, T> row(const detail::_xmatxGTX<N, T>& m, int RowIndex){return row(m, RowIndex);}
00171 }
00172 }
00173 }
00174
00175 #define GLM_GTX_matx namespace gtx::matx
00176 #ifndef GLM_GTX_GLOBAL
00177 namespace glm {using GLM_GTX_matx;}
00178 #endif//GLM_GTX_GLOBAL
00179
00180 #include "matx.inl"
00181
00182 #endif//glm_gtx_matx