#pragma once #define mat4_t iron_matrix4x4_t #define mat3_t iron_matrix3x3_t #define quat_t iron_quaternion_t #define vec4_t iron_vector4_t #define vec3_t iron_vector3_t #define vec2_t iron_vector2_t #include #include "iron_mat4.h" vec4_t vec4_create(float x, float y, float z, float w); vec4_t vec4_cross(vec4_t a, vec4_t b); vec4_t vec4_add(vec4_t a, vec4_t b); vec4_t vec4_fadd(vec4_t a, float x, float y, float z, float w); vec4_t vec4_norm(vec4_t a); vec4_t vec4_mult(vec4_t v, float f); float vec4_dot(vec4_t a, vec4_t b); vec4_t vec4_clone(vec4_t v); vec4_t vec4_lerp(vec4_t from, vec4_t to, float s); vec4_t vec4_apply_proj(vec4_t a, mat4_t m); vec4_t vec4_apply_mat(vec4_t a, mat4_t m); vec4_t vec4_apply_mat4(vec4_t a, mat4_t m); vec4_t vec4_apply_axis_angle(vec4_t a, vec4_t axis, float angle); vec4_t vec4_apply_quat(vec4_t a, quat_t q); bool vec4_equals(vec4_t a, vec4_t b); bool vec4_almost_equals(vec4_t a, vec4_t b, float prec); float vec4_len(vec4_t a); vec4_t vec4_sub(vec4_t a, vec4_t b); vec4_t vec4_exp(vec4_t a); float vec4_dist(vec4_t v1, vec4_t v2); float vec4_fdist(float v1x, float v1y, float v1z, float v2x, float v2y, float v2z); vec4_t vec4_reflect(vec4_t a, vec4_t n); vec4_t vec4_clamp(vec4_t a, float min, float max); vec4_t vec4_x_axis(); vec4_t vec4_y_axis(); vec4_t vec4_z_axis(); vec4_t vec4_nan(); bool vec4_isnan(vec4_t v);