summaryrefslogtreecommitdiffstats
path: root/src/maths.h
blob: d50f285dc53d74715408c98f0ce8a3eebef0764e (plain) (blame)
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
#ifndef VGLTF_MATHS_H
#define VGLTF_MATHS_H

typedef float vgltf_vec_value_type;

constexpr double VGLTF_MATHS_PI = 3.14159265358979323846;
#define VGLTF_MATHS_DEG_TO_RAD(deg) (deg * VGLTF_MATHS_PI / 180.0)
#define VGLTF_MAX(x, y) ((x) > (y) ? (x) : (y))

typedef struct {
  vgltf_vec_value_type x;
  vgltf_vec_value_type y;
} vgltf_vec2;

typedef struct {
  vgltf_vec_value_type x;
  vgltf_vec_value_type y;
  vgltf_vec_value_type z;
} vgltf_vec3;
vgltf_vec3 vgltf_vec3_sub(vgltf_vec3 lhs, vgltf_vec3 rhs);
vgltf_vec3 vgltf_vec3_cross(vgltf_vec3 lhs, vgltf_vec3 rhs);
vgltf_vec_value_type vgltf_vec3_dot(vgltf_vec3 lhs, vgltf_vec3 rhs);

vgltf_vec_value_type vgltf_vec3_length(vgltf_vec3 vec);
vgltf_vec3 vgltf_vec3_normalized(vgltf_vec3 vec);

typedef vgltf_vec_value_type vgltf_mat_value_type;

// row major
typedef vgltf_mat_value_type vgltf_mat4[16];
void vgltf_mat4_multiply(vgltf_mat4 out, vgltf_mat4 lhs, vgltf_mat4 rhs);
void vgltf_mat4_rotate(vgltf_mat4 out, vgltf_mat4 matrix,
                     vgltf_mat_value_type angle_radians, vgltf_vec3 axis);
void vgltf_mat4_look_at(vgltf_mat4 out, vgltf_vec3 eye_position,
                      vgltf_vec3 target_position, vgltf_vec3 up_axis);
void vgltf_mat4_perspective(vgltf_mat4 out, vgltf_mat_value_type fov,
                          vgltf_mat_value_type aspect_ratio,
                          vgltf_mat_value_type near, vgltf_mat_value_type far);

// clang-format off
#define VGLTF_MAT4_IDENTITY { \
  1, 0, 0, 0, \
  0, 1, 0, 0, \
  0, 0, 1, 0, \
  0, 0, 0, 1, \
}
// clang-format on

#endif // VGLTF_MATHS_H
Go back to lisible.xyz