* 5.c Closest points
* 5.d Raycast & Spherecasts
* 5.e Curves
+ * 5.f Volumes
* 6. Statistics
* 6.a Random numbers
**/
return ((vg_ftu32(a)) & 0x7F800000U) != 0x7F800000U;
}
+static int v3_valid( v3f a ){
+ for( u32 i=0; i<3; i++ )
+ if( !vg_validf(a[i]) ) return 0;
+ return 1;
+}
+
/*
* -----------------------------------------------------------------------------
* Section 1. Scalar Operations
v3_add( v1, v2, d );
}
+static void v3_tangent_basis( v3f n, v3f tx, v3f ty ){
+ /* Compute tangent basis (box2d) */
+ if( fabsf( n[0] ) >= 0.57735027f ){
+ tx[0] = n[1];
+ tx[1] = -n[0];
+ tx[2] = 0.0f;
+ }
+ else{
+ tx[0] = 0.0f;
+ tx[1] = n[2];
+ tx[2] = -n[1];
+ }
+
+ v3_normalize( tx );
+ v3_cross( n, tx, ty );
+}
+
+
/*
* -----------------------------------------------------------------------------
* Section 2.c 4D Vectors
v3_muladds( p, p2, t*t, p );
}
+/*
+ * -----------------------------------------------------------------------------
+ * Section 5.f Volumes
+ * -----------------------------------------------------------------------------
+ */
+
+static float vg_sphere_volume( float radius ){
+ float r3 = radius*radius*radius;
+ return (4.0f/3.0f) * VG_PIf * r3;
+}
+
/*
* -----------------------------------------------------------------------------
* Section 6.a PSRNG and some distributions