A 3D game engine from scratch.
at main 91 lines 2.0 kB view raw
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; }