summaryrefslogtreecommitdiff
path: root/source/modules/asura-utils/Math/Matrix44.h
blob: 503242fe2f744d734d8b7b95f14d73a55dd3edae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#ifndef _ASURA_MATRIX_H_
#define _ASURA_MATRIX_H_

#include <asura-utils/Classes.h>

#include "../Scripting/Portable.hpp"

namespace_begin(AsuraEngine)
namespace_begin(Math)

/// ҪתõOpenGLglm::mat4
/// https://blog.csdn.net/candycat1992/article/details/8830894
class Matrix44
{
public:

	static const Matrix44 Identity;

	Matrix44();

	Matrix44(const Matrix44& m);

	~Matrix44();

	void operator = (const Matrix44& m);

	void SetOrtho(float _left, float _right, float _bottom, float _top, float _near, float _far);

	Matrix44 operator * (const Matrix44 & m) const;

	void operator *= (const Matrix44 & m);

	const float* GetElements() const;

	void SetIdentity();

	void SetTranslation(float x, float y);

	void SetRotation(float r);

	void SetScale(float sx, float sy);

	void SetShear(float kx, float ky);

	void SetTransformation(float x, float y, float angle, float sx, float sy, float ox, float oy);

	void Translate(float x, float y);

	void Rotate(float r);

	void Scale(float sx, float sy);

	void Transform(float x, float y, float angle, float sx, float sy, float ox, float oy);

	/// 
	/// Multiplies this Matrix44 with a shear transformation.
	/// @param kx Shear along the x-axis.
	/// @param ky Shear along the y-axis.
	/// 
	void Shear(float kx, float ky);

	void Ortho(float left, float right, float bottom, float top, float near, float far);

	///// 
	///// Transforms an array of vertices by this Matrix44. The sources and
	///// destination arrays may be the same.
	/////
	///// @param dst Storage for the transformed vertices.
	///// @param src The source vertices.
	///// @param size The number of vertices.
	///// 
	//void transform(Graphics::Vertex* dst, const Graphics::Vertex * src, int size) const;

	///
	/// ʽ
	///
	float Calculate();

private:

	/// 
	/// | e0 e4 e8  e12 |
	/// | e1 e5 e9  e13 |
	/// | e2 e6 e10 e14 |
	/// | e3 e7 e11 e15 |
	///
	float e[16];

};

namespace_end
namespace_end

namespace AEMath = AsuraEngine::Math;

#endif