Skip to content
Snippets Groups Projects
FRMatrix.h 1.72 KiB
Newer Older
  • Learn to ignore specific revisions
  • Whitney Armstrong's avatar
    Whitney Armstrong committed
    #ifndef FR_MATRIX_H
    #define FR_MATRIX_H
    
    #include "FRVector3.h"
    
    /********************************************************************
     * FRMatrix
     * comment : FRGLMatrix float --> double 
     ********************************************************************/
    class FRMatrix {
    public:
    	/* Default construction is ZERO matrix.
    	 *
    	 */
    	FRMatrix();
    
    	double operator () (int i, int j) const;
    	double& operator () (int i, int j);
    
    	void invert() { }
    
    	void setTranslate(const FRVector3 &t);
    	void getTranslate(FRVector3 &t) const;
    
    	void setUnitVectors(
    			const FRVector3 &e1,
    			const FRVector3 &e2,
    			const FRVector3 &e3);
    	void getUnitVectors(
    			FRVector3 &e1,
    			FRVector3 &e2,
    			FRVector3 &e3) const;
    
    	void inverse(const FRVector3 &in, FRVector3 &out) const;
    	void transform(const FRVector3 &in, FRVector3 &out) const;
    //	void multiply(const FRMatrix &);
    
    	/* These operators are useful to give 'm' to
    	 * glLoadMatrix(), glMultMatrix().
    	 */
    	operator const double * () const;
    	operator double * ();
    
    	friend FRMatrix zeroMatrix();
    	friend FRMatrix identityMatrix();
    	/*
    	friend FRMatrix translateMatrix(const FRVector3 &);
    	friend FRMatrix rotationXMatrix(double);
    	friend FRMatrix rotationYMatrix(double);
    	friend FRMatrix rotationZMatrix(double);
    	*/
    
    protected:
    	double m[16];
    };
    
    /********************************************************************
     inline function for FRMatrix
     ********************************************************************/
    inline double FRMatrix::operator () (int i, int j) const
    {	return m[i + (j * 4)];
    }
    inline double& FRMatrix::operator () (int i, int j)
    {	return m[i + (j * 4)];
    }
    inline FRMatrix::operator const double * () const
    {	return m;
    }
    inline FRMatrix::operator double * ()
    {	return m;
    }
    
    #endif //FR_MATRIX_H