mirror of
https://github.com/RetroDECK/Supermodel.git
synced 2024-12-11 06:25:39 +00:00
49 lines
1.2 KiB
C
49 lines
1.2 KiB
C
|
#ifndef _MAT4_H_
|
||
|
#define _MAT4_H_
|
||
|
|
||
|
#include <vector>
|
||
|
|
||
|
namespace New3D {
|
||
|
|
||
|
class Mat4
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
Mat4();
|
||
|
|
||
|
void LoadIdentity ();
|
||
|
void Translate (float x, float y, float z);
|
||
|
void Rotate (float angle, float x, float y, float z);
|
||
|
void Scale (float x, float y, float z);
|
||
|
void Frustum (float left, float right, float bottom, float top, float nearVal, float farVal);
|
||
|
void Ortho (float left, float right, float bottom, float top, float nearVal, float farVal);
|
||
|
void Perspective (float fovy, float aspect, float zNear, float zFar);
|
||
|
void MultMatrix (const float *m);
|
||
|
void LoadMatrix (const float *m);
|
||
|
void LoadTransposeMatrix (const float *m);
|
||
|
void MultTransposeMatrix (const float *m);
|
||
|
void PushMatrix ();
|
||
|
void PopMatrix ();
|
||
|
void Release ();
|
||
|
|
||
|
operator const float* () { return currentMatrix; }
|
||
|
|
||
|
float currentMatrix[16];
|
||
|
private:
|
||
|
|
||
|
void MultiMatrices (const float a[16], const float b[16], float r[16]);
|
||
|
void Copy (const float in[16], float out[16]);
|
||
|
void Transpose (float m[16]);
|
||
|
|
||
|
struct Mat4Container {
|
||
|
float mat[16]; // we must wrap the matrix inside a struct otherwise vector doesn't work
|
||
|
};
|
||
|
|
||
|
std::vector<Mat4Container> m_vMat4;
|
||
|
};
|
||
|
|
||
|
} // New3D
|
||
|
|
||
|
#endif
|
||
|
|