/////////////////////////////////////////////////////////////////////////////////////////////////// // OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net) /////////////////////////////////////////////////////////////////////////////////////////////////// // Created : 2007-02-21 // Updated : 2007-03-01 // Licence : This source is under MIT License // File : glm/gtx/matx.hpp /////////////////////////////////////////////////////////////////////////////////////////////////// // Dependency: // - GLM core // - GLM_GTX_vecx // - GLM_GTX_matrix_selection // - GLM_GTX_matrix_access // - GLM_GTX_inverse_transpose /////////////////////////////////////////////////////////////////////////////////////////////////// #ifndef glm_gtx_matx #define glm_gtx_matx // Dependency: #include "../glm.hpp" #include "../gtx/vecx.hpp" namespace glm{ namespace detail{ template class _xmatxGTX { private: // Data _xvecxGTX value[N]; public: _xmatxGTX _inverse() const; public: typedef T value_type; typedef int size_type; static const size_type value_size; // Constructors _xmatxGTX(); explicit _xmatxGTX(const T x); // Accesses _xvecxGTX& operator[](int i) {return value[i];} const _xvecxGTX & operator[](int i) const {return value[i];} operator T*() {return &value[0][0];} operator const T*() const {return &value[0][0];} // Unary updatable operators _xmatxGTX& operator= (const _xmatxGTX& m); _xmatxGTX& operator+= (const T s); _xmatxGTX& operator+= (const _xmatxGTX& m); _xmatxGTX& operator-= (const T s); _xmatxGTX& operator-= (const _xmatxGTX& m); _xmatxGTX& operator*= (const T s); _xmatxGTX& operator*= (const _xmatxGTX& m); _xmatxGTX& operator/= (const T s); _xmatxGTX& operator/= (const _xmatxGTX& m); _xmatxGTX& operator++ (); _xmatxGTX& operator-- (); }; // Binary operators template _xmatxGTX operator+ (const _xmatxGTX& m, const T s); template _xmatxGTX operator+ (const T s, const _xmatxGTX& m); template _xvecxGTX operator+ (const _xmatxGTX& m, const _xvecxGTX& v); template _xvecxGTX operator+ (const _xvecxGTX& v, const _xmatxGTX& m); template _xmatxGTX operator+ (const _xmatxGTX& m1, const _xmatxGTX& m2); template _xmatxGTX operator- (const _xmatxGTX& m, const T s); template _xmatxGTX operator- (const T s, const _xmatxGTX& m); template _xvecxGTX operator- (const _xmatxGTX& m, const _xvecxGTX& v); template _xvecxGTX operator- (const _xvecxGTX& v, const _xmatxGTX& m); template _xmatxGTX operator- (const _xmatxGTX& m1, const _xmatxGTX& m2); template _xmatxGTX operator* (const _xmatxGTX& m, const T s); template _xmatxGTX operator* (const T s, const _xmatxGTX& m); template _xvecxGTX operator* (const _xmatxGTX& m, const _xvecxGTX& v); template _xvecxGTX operator* (const _xvecxGTX& v, const _xmatxGTX& m); template _xmatxGTX operator* (const _xmatxGTX& m1, const _xmatxGTX& m2); template _xmatxGTX operator/ (const _xmatxGTX& m, const T s); template _xmatxGTX operator/ (const T s, const _xmatxGTX& m); template _xvecxGTX operator/ (const _xmatxGTX& m, const _xvecxGTX& v); template _xvecxGTX operator/ (const _xvecxGTX& v, const _xmatxGTX& m); template _xmatxGTX operator/ (const _xmatxGTX& m1, const _xmatxGTX& m2); // Unary constant operators template const _xmatxGTX operator- (const _xmatxGTX& m); template const _xmatxGTX operator-- (const _xmatxGTX& m, int); template const _xmatxGTX operator++ (const _xmatxGTX& m, int); }//namespace detail // Extension functions template detail::_xmatxGTX matrixCompMultGTX(const detail::_xmatxGTX& x, const detail::_xmatxGTX& y); template detail::_xmatxGTX outerProductGTX(const detail::_xvecxGTX& c, const detail::_xvecxGTX& r); template detail::_xmatxGTX transposeGTX(const detail::_xmatxGTX& x); template T determinantGTX(const detail::_xmatxGTX& m); template detail::_xmatxGTX inverseTransposeGTX(const detail::_xmatxGTX & m); template void columnGTX(detail::_xmatxGTX& m, int ColIndex, const detail::_xvecxGTX& v); template void rowGTX(detail::_xmatxGTX& m, int RowIndex, const detail::_xvecxGTX& v); template detail::_xvecxGTX columnGTX(const detail::_xmatxGTX& m, int ColIndex); template detail::_xvecxGTX rowGTX(const detail::_xmatxGTX& m, int RowIndex); namespace gtx { //! GLM_GTX_matx extension: - Work in progress - NxN matrix types. namespace matx { // Matrix Functions template inline detail::_xmatxGTX matrixCompMult(const detail::_xmatxGTX& x, const detail::_xmatxGTX& y){return matrixCompMult(x, y);} template inline detail::_xmatxGTX outerProduct(const detail::_xvecxGTX& c, const detail::_xvecxGTX& r){return outerProductGTX(c, r);} template inline detail::_xmatxGTX transpose(const detail::_xmatxGTX& x){return transposeGTX(x);} template inline T determinant(const detail::_xmatxGTX& m){return determinantGTX(m);} template inline detail::_xmatxGTX inverseTranspose(const detail::_xmatxGTX& m){return inverseTransposeGTX(m);} template inline void column(detail::_xmatxGTX& m, int ColIndex, const detail::_xvecxGTX& v){setColumnGTX(m, v);} template inline void row(detail::_xmatxGTX& m, int RowIndex, const detail::_xvecxGTX& v){setRowGTX(m, v);} template inline detail::_xvecxGTX column(const detail::_xmatxGTX& m, int ColIndex){return column(m, ColIndex);} template inline detail::_xvecxGTX row(const detail::_xmatxGTX& m, int RowIndex){return row(m, RowIndex);} } } } #include "matx.inl" namespace glm{using namespace gtx::matx;} #endif//glm_gtx_matx