⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matrix.h

📁 小型的3D游戏引擎
💻 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 + -