Add custom types for position (#15204)
This commit is contained in:
@@ -40,33 +40,40 @@
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include "../core/types.h"
|
||||
|
||||
class matrix_3x3;
|
||||
|
||||
struct vector_3 {
|
||||
float x, y, z;
|
||||
struct vector_3 : xyz_float_t {
|
||||
|
||||
vector_3();
|
||||
vector_3(float x, float y, float z);
|
||||
vector_3(const float &_x, const float &_y, const float &_z) { set(_x, _y, _z); }
|
||||
vector_3(const xy_float_t &in) { set(in.x, in.y); }
|
||||
vector_3(const xyz_float_t &in) { set(in.x, in.y, in.z); }
|
||||
vector_3(const xyze_float_t &in) { set(in.x, in.y, in.z); }
|
||||
|
||||
// Factory method
|
||||
static vector_3 cross(const vector_3 &a, const vector_3 &b);
|
||||
|
||||
vector_3 operator+(const vector_3 &v);
|
||||
vector_3 operator-(const vector_3 &v);
|
||||
|
||||
vector_3 operator* (const float &v);
|
||||
vector_3& operator*=(const float &v);
|
||||
|
||||
// Modifiers
|
||||
void normalize();
|
||||
void apply_rotation(const matrix_3x3 &matrix);
|
||||
|
||||
// Accessors
|
||||
float get_length() const;
|
||||
vector_3 get_normal() const;
|
||||
|
||||
// Operators
|
||||
FORCE_INLINE vector_3 operator+(const vector_3 &v) const { vector_3 o = *this; o += v; return o; }
|
||||
FORCE_INLINE vector_3 operator-(const vector_3 &v) const { vector_3 o = *this; o -= v; return o; }
|
||||
FORCE_INLINE vector_3 operator*(const float &v) const { vector_3 o = *this; o *= v; return o; }
|
||||
|
||||
void debug(PGM_P const title);
|
||||
void apply_rotation(const matrix_3x3 &matrix);
|
||||
};
|
||||
|
||||
struct matrix_3x3 {
|
||||
float matrix[9];
|
||||
abc_float_t vectors[3];
|
||||
|
||||
// Factory methods
|
||||
static matrix_3x3 create_from_rows(const vector_3 &row_0, const vector_3 &row_1, const vector_3 &row_2);
|
||||
static matrix_3x3 create_look_at(const vector_3 &target);
|
||||
static matrix_3x3 transpose(const matrix_3x3 &original);
|
||||
@@ -76,5 +83,7 @@ struct matrix_3x3 {
|
||||
void debug(PGM_P const title);
|
||||
};
|
||||
|
||||
|
||||
void apply_rotation_xyz(const matrix_3x3 &rotationMatrix, float &x, float &y, float &z);
|
||||
FORCE_INLINE void apply_rotation_xyz(const matrix_3x3 &rotationMatrix, xyz_pos_t &pos) {
|
||||
apply_rotation_xyz(rotationMatrix, pos.x, pos.y, pos.z);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user