summaryrefslogtreecommitdiff
path: root/common/matrix.h
blob: b90f1247e2daa1a04b9905f868ffb1a53cc48879 (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
// Matrix class
//

#ifndef _MATRIX_H_
#define _MATRIX_H_

class File;

class Matrix
{
public:
	Matrix();
	Matrix(float* floats);
	Matrix(double mat[16]);
	Matrix(float rot[4], float pos[3]);
	~Matrix();

	void WriteToFile (File* F);
	void ReadFromFile (File* F);
	void Multiply (Matrix& m1, Matrix& m2);
	void ConvertToLDraw(float f[12]);
	void ConvertFromLDraw(float f[12]);
	void GetEulerAngles (float rot[3]);
	void LoadIdentity();
	void GetTranslation(float *x, float *y, float *z);
	void SetTranslation(float x, float y, float z);
	void GetTranslation(float pos[3]);
	void SetTranslation(float pos[3]);
	void TransformPoint(float out[], const float in[3]);
	void TransformPoints (float p[], int n);
	void Create (float mx, float my, float mz, float rx, float ry, float rz);
	void CreateOld(float mx, float my, float mz, float rx, float ry, float rz);
	void Rotate(float angle, float x, float y, float z);
	void RotateCenter(float angle, float x, float y, float z, float px, float py, float pz);
	void Translate(float x, float y, float z);
	void FromEuler(float yaw, float pitch, float roll);
	void ToAxisAngle(float rot[4]);
	void FromAxisAngle(float axis[3], float angle);
	void FromFloat(float* mat);
	bool FromInverse(double* src);
	void CreatePerspective (float fovy, float aspect, float nearval, float farval);
	void CreateLookat (float eye[3], float target[3], float up[3]);
	bool Invert ();

	float m[16];
};

#endif //_MATRIX_H_