The small3d library
Math.hpp
Go to the documentation of this file.
1 
10 #pragma once
11 
12 namespace small3d {
13 
19  struct Vec3 {
20  float x = 0.0f;
21  float y = 0.0f;
22  float z = 0.0f;
23  Vec3();
24  Vec3(float x, float y, float z);
25  Vec3(float v);
26  Vec3& operator+=(const Vec3& other);
27  Vec3 operator+(const Vec3& other);
28  Vec3 operator*(const Vec3& other) const;
29  Vec3 operator*(const float v) const;
30  Vec3 operator/(const float v) const;
31  Vec3& operator=(const Vec3& other);
32  template <class Archive>
33  void serialize(Archive& archive) {
34  archive(x, y, z);
35  }
36  };
37 
43  struct Vec3i {
44  int x = 0;
45  int y = 0;
46  int z = 0;
47  Vec3i();
48  Vec3i(int x, int y, int z);
49  };
50 
56  struct Vec4 {
57  float x = 0.0f;
58  float y = 0.0f;
59  float z = 0.0f;
60  float w = 0.0f;
61  Vec4();
62  Vec4(float x, float y, float z, float w);
63  Vec4(const Vec3& vec3, float w);
64 
65  Vec4& operator+=(const Vec4& other);
66  Vec4 operator+(const Vec4& other);
67  Vec4 operator-(const Vec4& other);
68  Vec4 operator*(const float v) const;
69  Vec4 operator*(const Vec4& other) const;
70  Vec4& operator/=(const float div);
71  float& operator[](int idx);
72  Vec4& operator=(const Vec4& other);
73  template <class Archive>
74  void serialize(Archive& archive) {
75  archive(x, y, z, w);
76  }
77  };
78 
84  struct Vec4i {
85  int x = 0;
86  int y = 0;
87  int z = 0;
88  int w = 0;
89  Vec4i();
90  Vec4i(int x, int y, int z, int w);
91  Vec4i(const Vec3i& vec3i, float w);
92  };
93 
99  struct Mat4 {
100  Vec4 data[4];
101  Mat4();
102  Mat4(float v);
103  Mat4(Vec4 r0, Vec4 r1, Vec4 r2, Vec4 r3);
104  Mat4(float r0x, float r0y, float r0z, float r0w,
105  float r1x, float r1y, float r1z, float r1w,
106  float r2x, float r2y, float r2z, float r2w,
107  float r3x, float r3y, float r3z, float r3w );
108  Vec4& operator[](int idx);
109  Mat4 operator-(const Mat4& other) const;
110  Mat4 operator*(const Mat4& other) const;
111  Vec4 operator*(const Vec4& vec) const;
112  Mat4& operator*=(const Mat4& other);
113  Mat4& operator/=(const float div);
114  Mat4& operator=(const Mat4& other);
115  template <class Archive>
116  void serialize(Archive& archive) {
117  archive(data);
118  }
119  };
120 
126  struct Quat {
127 
128 
129  float x;
130  float y;
131  float z;
132  float w;
133 
134  Mat4 toMatrix() const;
135  Quat operator*(const Quat& other);
136  template <class Archive>
137  void serialize(Archive& archive) {
138  archive(w, x, y, z);
139  }
140  };
141 
142  Mat4 translate(const Mat4& mat, const Vec3& vec);
143 
144  Mat4 scale(const Mat4& mat, const Vec3& vec);
145 
146  Mat4 rotate(const Mat4& mat, const float angle, const Vec3& vec);
147 
148  Mat4 ortho(float left, float right, float bottom, float top, float zNear, float zFar);
149 
150  Mat4 perspective(float fovy, float aspect, float zNear, float zFar);
151 
152  Mat4 inverse(const Mat4 mat);
153 
154  float* Value_ptr(Mat4& mat);
155 
156  float* Value_ptr(Vec3& vec);
157 
158  float* Value_ptr(Vec4& vec);
159 
160 }
small3d::Vec4
4 component vector
Definition: Math.hpp:56
small3d::Vec4i
4 component integer vector
Definition: Math.hpp:84
small3d::Quat
Definition: Math.hpp:126
small3d
Definition: BinaryFile.hpp:15
small3d::Vec3i
3 component integer vector
Definition: Math.hpp:43
small3d::Vec3
3 component float vector
Definition: Math.hpp:19
small3d::Mat4
4x4 float matrix
Definition: Math.hpp:99