# GLM: matx.hpp Source File

- Main Page
- Namespaces
- Files

- File List

# matx.hpp

    00001
    00002 // OpenGL Mathematics Copyright (c) 2005 - 2009 G-Truc Creation (www.g-truc.net)
    00004 // Created : 2007-02-21
    00005 // Updated : 2007-03-01
    00006 // Licence : This source is under MIT License
    00007 // File    : glm/gtx/matx.h
    00009 // Dependency:
    00010 // - GLM core
    00011 // - GLM_GTX_vecx
    00012 // - GLM_GTX_matrix_selection
    00013 // - GLM_GTX_matrix_access
    00014 // - GLM_GTX_inverse_transpose
    00016
    00017 #ifndef glm_gtx_matx
    00018 #define glm_gtx_matx
    00019
    00020 // Dependency:
    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         // Data
    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         // Constructors
    00043         _xmatxGTX();
    00044         explicit _xmatxGTX(const T x);
    00045
    00046         // Accesses
    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         // Unary updatable operators
    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         // Binary operators
    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         // Unary constant operators
    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 }//namespace detail
    00138
    00139         // Extension functions
    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                 // Matrix Functions
    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