📄 matrix.h
字号:
// 4x4 Matrix class
// Handles matrices
#ifndef _MATRIX_H_
#define _MATRIX_H_
#include "math.h"
#include "vector.h"
class GcMatrix4;
class GcMatrix3
{
public:
GcMatrix3();
float & operator[](int i);
GcMatrix3 & operator=(const float * m );
GcMatrix3 & operator=(const GcMatrix4 & m );
GcMatrix3 & operator*=( const GcMatrix3 & m );
GcMatrix3 operator*( const GcMatrix3 & m ) const;
GcVector3 operator*( const GcVector3 & v ) const;
GcVector4 operator*( const GcVector4 & v ) const;
GcMatrix3 operator+( const GcMatrix3 & m );
GcMatrix3 operator-( const GcMatrix3 & m );
operator const float*() const;
operator float*();
GcMatrix3 & BuildFromEuler( const GcVector3 & angles );
GcMatrix3 & BuildFromEuler( const GcVector4 & angles );
int ConvertToEuler( GcVector3 & angles ) const;
int ConvertToEuler( GcVector4 & angles ) const;
GcMatrix3 & Transpose();
GcMatrix3 & SetIdentity();
GcMatrix3 & Translate( const GcVector3 & v );
GcMatrix3 & Translate( const GcVector4 & v );
GcMatrix3 & SetTranslation( const GcVector3 & v );
GcMatrix3 & SetTranslation( const GcVector4 & v );
GcVector3 GetTranslation() const { return GcVector3( array[12], array[13], array[14] ); }
GcVector3 Axis( int i ) const;
GcVector3 XAxis() const { return GcVector3( array[0], array[4], array[8] ); }
GcVector3 YAxis() const { return GcVector3( array[1], array[5], array[9] ); }
GcVector3 ZAxis() const { return GcVector3( array[2], array[6], array[10] ); }
//GcVector4 GetTranslation() { return GcVector4( array[12], array[13], array[14], array[15] ); }
//GcVector4 & Transform( GcVector3 &v ) const;
//GcVector4 & Transform( GcVector4 &v ) const;
//protected:
float m_matrix[9];
union
{
struct
{
float a00, a10, a20,
a01, a11, a21,
a02, a12, a22;
};
float array[9];
};
};
class GcMatrix4
{
public:
GcMatrix4();
float & operator[](int i);
GcMatrix4 & operator=(const float * m );
GcMatrix4 & operator*=( const GcMatrix4 & m );
GcMatrix4 operator*( const GcMatrix4 & m ) const;
GcVector3 operator*( const GcVector3 & v ) const;
GcVector4 operator*( const GcVector4 & v ) const;
GcMatrix4 operator+( const GcMatrix4 & m );
GcMatrix4 operator-( const GcMatrix4 & m );
operator const float*() const;
operator float*();
GcMatrix4 & BuildFromEuler( const GcVector3 & angles );
GcMatrix4 & BuildFromEuler( const GcVector4 & angles );
int ConvertToEuler( GcVector3 & angles ) const;
int ConvertToEuler( GcVector4 & angles ) const;
GcMatrix4 & Transpose();
GcMatrix4 & SetIdentity();
GcMatrix4 & Translate( const GcVector3 & v );
GcMatrix4 & Translate( const GcVector4 & v );
GcMatrix4 & SetTranslation( const GcVector3 & v );
GcMatrix4 & SetTranslation( const GcVector4 & v );
GcVector3 GetTranslation() const { return GcVector3( array[12], array[13], array[14] ); }
GcVector3 Axis( int i ) const;
GcVector3 XAxis() const { return GcVector3( array[0], array[4], array[8] ); }
GcVector3 YAxis() const { return GcVector3( array[1], array[5], array[9] ); }
GcVector3 ZAxis() const { return GcVector3( array[2], array[6], array[10] ); }
//GcVector4 GetTranslation() { return GcVector4( array[12], array[13], array[14], array[15] ); }
//GcVector4 & Transform( GcVector3 &v ) const;
//GcVector4 & Transform( GcVector4 &v ) const;
//protected:
float m_matrix[16];
union
{
struct
{
float a00, a10, a20, a30,
a01, a11, a21, a31,
a02, a12, a22, a32,
a03, a13, a23, a33;
};
float array[16];
};
};
typedef GcMatrix3 Matrix3;
typedef GcMatrix4 Matrix4;
#endif // _MATRIX_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -