A 3D game engine from scratch.
1// (c) 2020 Vlad-Stefan Harbuz <vlad@vladh.net>
2
3#include "logs.hpp"
4#include "util.hpp"
5
6
7f64
8util::random(f64 min, f64 max)
9{
10 u32 r = rand();
11 f64 r_normalized = (f64)r / (f64)RAND_MAX;
12 return min + ((r_normalized) * (max - min));
13}
14
15
16v3
17util::aiVector3D_to_glm(aiVector3D *vec)
18{
19 return v3(vec->x, vec->y, vec->z);
20}
21
22
23quat
24util::aiQuaternion_to_glm(aiQuaternion *rotation)
25{
26 return quat(rotation->w, rotation->x, rotation->y, rotation->z);
27}
28
29
30m4
31util::aimatrix4x4_to_glm(aiMatrix4x4 *from)
32{
33 m4 to;
34
35 to[0][0] = (GLfloat)from->a1;
36 to[0][1] = (GLfloat)from->b1;
37 to[0][2] = (GLfloat)from->c1;
38 to[0][3] = (GLfloat)from->d1;
39
40 to[1][0] = (GLfloat)from->a2;
41 to[1][1] = (GLfloat)from->b2;
42 to[1][2] = (GLfloat)from->c2;
43 to[1][3] = (GLfloat)from->d2;
44
45 to[2][0] = (GLfloat)from->a3;
46 to[2][1] = (GLfloat)from->b3;
47 to[2][2] = (GLfloat)from->c3;
48 to[2][3] = (GLfloat)from->d3;
49
50 to[3][0] = (GLfloat)from->a4;
51 to[3][1] = (GLfloat)from->b4;
52 to[3][2] = (GLfloat)from->c4;
53 to[3][3] = (GLfloat)from->d4;
54
55 return to;
56}
57
58
59f32
60util::round_to_nearest_multiple(f32 n, f32 multiple_of)
61{
62 return (floor((n) / multiple_of) * multiple_of) + multiple_of;
63}
64
65
66f64
67util::get_us_from_duration(chrono::duration<f64> duration)
68{
69 return chrono::duration_cast<chrono::duration<f64>>(duration).count();
70}
71
72
73v3
74util::get_orthogonal_vector(v3 *v)
75{
76 if (v->z < v->x) {
77 return v3(v->y, -v->x, 0.0f);
78 } else {
79 return v3(0.0f, -v->z, v->y);
80 }
81}
82
83
84u32 util::kb_to_b(u32 value) { return value * 1024; }
85u32 util::mb_to_b(u32 value) { return kb_to_b(value) * 1024; }
86u32 util::gb_to_b(u32 value) { return mb_to_b(value) * 1024; }
87u32 util::tb_to_b(u32 value) { return gb_to_b(value) * 1024; }
88f32 util::b_to_kb(u32 value) { return value / 1024.0f; }
89f32 util::b_to_mb(u32 value) { return b_to_kb(value) / 1024.0f; }
90f32 util::b_to_gb(u32 value) { return b_to_mb(value) / 1024.0f; }
91f32 util::b_to_tb(u32 value) { return b_to_gb(value) / 1024.0f; }