void un_m_add2f(f32 *v, f32 *a, f32 *b) { v[0] = a[0] + b[0]; v[1] = a[1] + b[1]; } void un_m_add3f(f32 *v, f32 *a, f32 *b) { v[0] = a[0] + b[0]; v[1] = a[1] + b[1]; v[2] = a[2] + b[2]; } void un_m_add4f(f32 *v, f32 *a, f32 *b) { v[0] = a[0] + b[0]; v[1] = a[1] + b[1]; v[2] = a[2] + b[2]; v[3] = a[3] + b[3]; } void un_m_sub2f(f32 *v, f32 *a, f32 *b) { v[0] = a[0] - b[0]; v[1] = a[1] - b[1]; } void un_m_sub3f(f32 *v, f32 *a, f32 *b) { v[0] = a[0] - b[0]; v[1] = a[1] - b[1]; v[2] = a[2] - b[2]; } void un_m_sub4f(f32 *v, f32 *a, f32 *b) { v[0] = a[0] - b[0]; v[1] = a[1] - b[1]; v[2] = a[2] - b[2]; v[3] = a[3] - b[3]; } void un_m_add_scalar2f(f32 *v, f32 *a, f32 scalar) { v[0] = a[0] + scalar; v[1] = a[1] + scalar; } void un_m_add_scalar3f(f32 *v, f32 *a, f32 scalar) { v[0] = a[0] + scalar; v[1] = a[1] + scalar; v[2] = a[2] + scalar; } void un_m_add_scalar4f(f32 *v, f32 *a, f32 scalar) { v[0] = a[0] + scalar; v[1] = a[1] + scalar; v[2] = a[2] + scalar; v[3] = a[3] + scalar; } void un_m_sub_scalar2f(f32 *v, f32 *a, f32 scalar) { v[0] = a[0] - scalar; v[1] = a[1] - scalar; } void un_m_sub_scalar3f(f32 *v, f32 *a, f32 scalar) { v[0] = a[0] - scalar; v[1] = a[1] - scalar; v[2] = a[2] - scalar; } void un_m_sub_scalar4f(f32 *v, f32 *a, f32 scalar) { v[0] = a[0] - scalar; v[1] = a[1] - scalar; v[2] = a[2] - scalar; v[3] = a[3] - scalar; } void un_m_mul_scalar2f(f32 *v, f32 *a, f32 scalar) { v[0] = a[0] * scalar; v[1] = a[1] * scalar; } void un_m_mul_scalar3f(f32 *v, f32 *a, f32 scalar) { v[0] = a[0] * scalar; v[1] = a[1] * scalar; v[2] = a[2] * scalar; } void un_m_mul_scalar4f(f32 *v, f32 *a, f32 scalar) { v[0] = a[0] * scalar; v[1] = a[1] * scalar; v[2] = a[2] * scalar; v[3] = a[3] * scalar; } void un_m_div_scalar2f(f32 *v, f32 *a, f32 scalar) { v[0] = a[0] / scalar; v[1] = a[1] / scalar; } void un_m_div_scalar3f(f32 *v, f32 *a, f32 scalar) { v[0] = a[0] / scalar; v[1] = a[1] / scalar; v[2] = a[2] / scalar; } void un_m_div_scalar4f(f32 *v, f32 *a, f32 scalar) { v[0] = a[0] / scalar; v[1] = a[1] / scalar; v[2] = a[2] / scalar; v[3] = a[3] / scalar; } void un_m_dot2f(f32 *v, f32 *a, f32 *b) { *v = a[0] * b[0] + a[1] * b[1]; } void un_m_dot3f(f32 *v, f32 *a, f32 *b) { *v = a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; } void un_m_dot4f(f32 *v, f32 *a, f32 *b) { *v = a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]; } void un_m_hadamard2f(f32 *v, f32 *a, f32 *b) { v[0] = a[0] * b[0]; v[1] = a[1] * b[1]; } void un_m_hadamard3f(f32 *v, f32 *a, f32 *b) { v[0] = a[0] * b[0]; v[1] = a[1] * b[1]; v[2] = a[2] * b[2]; } void un_m_hadamard4f(f32 *v, f32 *a, f32 *b) { v[0] = a[0] * b[0]; v[1] = a[1] * b[1]; v[2] = a[2] * b[2]; v[3] = a[3] * b[3]; } void un_m_cross2f(f32 *v, f32 *a) { v[0] = a[1]; v[1] =-a[0]; } void un_m_cross3f(f32 *v, f32 *a, f32 *b) { v[0] = a[1] * b[2] - a[2] * b[1]; v[1] = a[2] * b[0] - a[0] * b[2]; v[2] = a[0] * b[1] - a[1] * b[0]; } void un_m_magnitude2f(f32 *v, f32 *a) { *v = sqrtf(a[0] * a[0] + a[1] * a[1]); } void un_m_magnitude3f(f32 *v, f32 *a) { *v = sqrtf(a[0] * a[0] + a[1] * a[1] + a[2] * a[2]); } void un_m_magnitude4f(f32 *v, f32 *a) { *v = sqrtf(a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3]); } void un_m_magnitude_sqr2f(f32 *v, f32 *a) { *v = a[0] * a[0] + a[1] * a[1]; } void un_m_magnitude_sqr3f(f32 *v, f32 *a) { *v = a[0] * a[0] + a[1] * a[1] + a[2] * a[2]; } void un_m_magnitude_sqr4f(f32 *v, f32 *a) { *v = a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3]; } void un_m_distance2f(f32 *v, f32 *a, f32 *b) { f32 f[2]; un_m_sub2f(f, b, a); *v = sqrtf(f[0] * f[0] + f[1] * f[1]); } void un_m_distance3f(f32 *v, f32 *a, f32 *b) { f32 f[3]; un_m_sub3f(f, b, a); *v = sqrtf(f[0] * f[0] + f[1] * f[1] + f[2] * f[2]); } void un_m_distance4f(f32 *v, f32 *a, f32 *b) { f32 f[4]; un_m_sub4f(f, b, a); *v = sqrtf(f[0] * f[0] + f[1] * f[1] + f[2] * f[2] + f[3] * f[3]); } void un_m_distance_sqr2f(f32 *v, f32 *a, f32 *b) { f32 f[2]; un_m_sub2f(f, b, a); *v = f[0] * f[0] + f[1] * f[1]; } void un_m_distance_sqr3f(f32 *v, f32 *a, f32 *b) { f32 f[3]; un_m_sub3f(f, b, a); *v = f[0] * f[0] + f[1] * f[1] + f[2] * f[2]; } void un_m_distance_sqr4f(f32 *v, f32 *a, f32 *b) { f32 f[4]; un_m_sub4f(f, b, a); *v = f[0] * f[0] + f[1] * f[1] + f[2] * f[2] + f[3] * f[3]; } void un_m_normalize2f(f32 *v, f32 *a) { f32 f; un_m_magnitude2f(&f, a); v[0] = a[0] / f; v[1] = a[1] / f; } void un_m_normalize3f(f32 *v, f32 *a) { f32 f; un_m_magnitude3f(&f, a); v[0] = a[0] / f; v[1] = a[1] / f; v[2] = a[2] / f; } void un_m_normalize4f(f32 *v, f32 *a) { f32 f; un_m_magnitude4f(&f, a); v[0] = a[0] / f; v[1] = a[1] / f; v[2] = a[2] / f; v[3] = a[3] / f; } void un_m_project2f(f32 *v, f32 *a, f32 *onto) { f32 dot, magn, scale; un_m_dot2f(&dot, a, onto); un_m_magnitude_sqr2f(&magn, onto); if (magn < EPSILON) { un_memory_set((void*)v, 0, sizeof(*v) * 2); return; } scale = dot / magn; v[0] = onto[0] * scale; v[1] = onto[1] * scale; } void un_m_project3f(f32 *v, f32 *a, f32 *onto) { f32 dot, magn, scale; un_m_dot3f(&dot, a, onto); un_m_magnitude_sqr3f(&magn, onto); if (magn < EPSILON) { un_memory_set((void*)v, 0, sizeof(*v) * 3); return; } scale = dot / magn; v[0] = onto[0] * scale; v[1] = onto[1] * scale; v[2] = onto[2] * scale; } void un_m_project4f(f32 *v, f32 *a, f32 *onto) { f32 dot, magn, scale; un_m_dot4f(&dot, a, onto); un_m_magnitude_sqr4f(&magn, onto); if (magn < EPSILON) { un_memory_set((void*)v, 0, sizeof(*v) * 4); return; } scale = dot / magn; v[0] = onto[0] * scale; v[1] = onto[1] * scale; v[2] = onto[2] * scale; v[3] = onto[3] * scale; } void un_m_reflect2f(f32 *v, f32 *a, f32 *normal) { f32 dot; un_m_dot2f(&dot, a, normal); un_m_mul_scalar2f(v, normal, 2.0f * dot); un_m_sub2f(v, v, a); } void un_m_reflect3f(f32 *v, f32 *a, f32 *normal) { f32 dot; un_m_dot3f(&dot, a, normal); un_m_mul_scalar3f(v, normal, 2.0f * dot); un_m_sub3f(v, v, a); } void un_m_reflect4f(f32 *v, f32 *a, f32 *normal) { f32 dot; un_m_dot4f(&dot, a, normal); un_m_mul_scalar4f(v, normal, 2.0f * dot); un_m_sub4f(v, v, a); }