diff options
Diffstat (limited to 'source/LoG/math/matrix44.h')
-rw-r--r-- | source/LoG/math/matrix44.h | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/source/LoG/math/matrix44.h b/source/LoG/math/matrix44.h new file mode 100644 index 0000000..3639df9 --- /dev/null +++ b/source/LoG/math/matrix44.h @@ -0,0 +1,94 @@ +#ifndef __LOG_MAT44_H__ +#define __LOG_MAT44_H__ + + +// +// 4x4矩阵,不需要转置,直接运用在Opengl中,由于opengl的glUniformMatrix按列填入矩阵,进行 +// 的是和列向量的右乘,为了不需要转置,直接使用按列定义的矩阵。保证矩阵的内存排列和输入opengl +// 的统一 +// +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); + + // + // 饶xyz轴旋转 + // + void Rotate(float r, float x, float y, float z); + + 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; + + // + // + // + void Frustum(float l, float r, float t, float b, float near, float far); + + void Perspective(float fov, float aspect, float near, float far); + +private: + + // + // | e0 e4 e8 e12 | + // | e1 e5 e9 e13 | + // | e2 e6 e10 e14 | + // | e3 e7 e11 e15 | + // + float e[16]; + +}; + + +#endif
\ No newline at end of file |