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

#ifndef _MATRIX_H_
#define _MATRIX_H_

class File;

class Matrix
{
 public:
  Matrix ();
  Matrix (const float *mat);
  Matrix (const double *matrix);
  Matrix (const float *rot, const float *pos);
  ~Matrix();

  void FileSave (File& file) const;
  void FileLoad (File& file);

  void FromPacked (const float *mat);
  void FromFloat (const float* mat);
  void FromLDraw (const float *f);
  void FromEulerAngles (float yaw, float pitch, float roll);
  void FromAxisAngle (const float *axis, float angle);

  void ToLDraw (float *f) const;
  void ToEulerAngles (float *rot) const;
  void ToAxisAngle (float *rot) const;

  void LoadIdentity ();
  void Translate (float x, float y, float z);
  void Multiply (Matrix& m1, Matrix& m2);
  bool Invert ();



  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);
	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]);

 public:
  float m[16];
};

#endif //_MATRIX_H_