return vec_new2(x, y, z, S(1.0));
}
-#define VEC_ZERO vec_new(S(0.0), S(0.0), S(0.0))
-#define VEC_ORTHO_X vec_new(S(1.0), S(0.0), S(0.0))
-#define VEC_ORTHO_Y vec_new(S(0.0), S(1.0), S(0.0))
-#define VEC_ORTHO_Z vec_new(S(0.0), S(0.0), S(1.0))
+#define VEC_ZERO vec_new(S(0.0), S(0.0), S(0.0))
+#define VEC_ORTHO_X vec_new(S(1.0), S(0.0), S(0.0))
+#define VEC_ORTHO_Y vec_new(S(0.0), S(1.0), S(0.0))
+#define VEC_ORTHO_Z vec_new(S(0.0), S(0.0), S(1.0))
+#define VEC_ZERO_FREE vec_new2(S(0.0), S(0.0), S(0.0), S(0.0))
/*
return a;
}
+/*
+ * Add three vectors together.
+ */
+INLINE_MAYBE
+vec_t vec_add2(vec_t a, vec_t b, vec_t c)
+{
+ return vec_add(vec_add(a, b), c);
+}
+
/*
* Subtract a vector from another vector.
*/
}
+/*
+ * Interpolate smoothly between three vectors with barycentric coordinates.
+ */
+INLINE_MAYBE
+vec_t vec_interp(vec_t v1, vec_t v2, vec_t v3, scal_t b[3])
+{
+ return vec_new(v1.x * b[0] + v2.x * b[1] + v3.x * b[2],
+ v1.y * b[0] + v2.y * b[1] + v3.y * b[2],
+ v1.z * b[0] + v2.z * b[1] + v3.z * b[2]);
+}
+
+
+
#endif // _VEC_H_