3 #include <kiba/core/types.h>
4 #include <kiba/math/math.h>
22 STATIC_ASSERT(
sizeof(
vec3) ==
sizeof(
float[3]),
"vec3's general layout must be identical to its raw format");
24 static inline vec3 vec3_create(f32 x, f32 y, f32 z) {
60 static inline vec3 vec3_cross_product(
vec3 v1,
vec3 v2) {
62 return vec3_sub(vec3_create(v1.y * v2.z, v1.z * v2.x, v1.x * v2.y),
63 vec3_create(v1.z * v2.y, v1.x * v2.z, v1.y * v2.x));
71 static inline f32 vec3_dot(
vec3 v1,
vec3 v2) {
return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z; }
73 static inline vec3 vec3_add_scalar(
vec3 v, f32 s) {
80 static inline vec3 vec3_sub_scalar(
vec3 v, f32 s) {
87 static inline vec3 vec3_mul_scalar(
vec3 v, f32 s) {
94 static inline vec3 vec3_div_scalar(
vec3 v, f32 s) {
101 static inline f32 vec3_length(
vec3 v) {
return f32_sqrt(v.x * v.x + v.y * v.y + v.z * v.z); }
104 static inline vec3 vec3_normalize(
vec3 v) {
return vec3_div_scalar(v, vec3_length(v)); }
116 f32 _v0, _v1, _v2, _v3;
120 static inline vec4 vec4_create(f32 x, f32 y, f32 z, f32 w) {
129 static inline vec4 vec4_from_vec3(
vec3 v, f32 w) {
return vec4_create(v.x, v.y, v.z, w); }
#define STATIC_ASSERT
Performs a static assert.