k_friction = 0.6f,
k_damp_linear = 0.05f, /* scale velocity 1/(1+x) */
k_damp_angular = 0.1f, /* scale angular 1/(1+x) */
- k_limit_bias = 0.04f,
+ k_limit_bias = 0.02f,
k_joint_bias = 0.08f, /* positional joints */
k_joint_correction = 0.01f,
- k_penetration_slop = 0.01f;
+ k_penetration_slop = 0.01f,
+ k_inertia_scale = 4.0f;
/*
* -----------------------------------------------------------------------------
v3f dims;
v3_sub( rb->bbx[1], rb->bbx[0], dims );
volume = dims[0]*dims[1]*dims[2];
-
- if( !rb->is_world )
- vg_info( "Box volume: %f\n", volume );
}
else if( rb->type == k_rb_shape_sphere )
{
volume = sphere_volume( rb->inf.sphere.radius );
v3_fill( rb->bbx[0], -rb->inf.sphere.radius );
v3_fill( rb->bbx[1], rb->inf.sphere.radius );
-
- vg_info( "Sphere volume: %f\n", volume );
}
else if( rb->type == k_rb_shape_capsule )
{
v3_muls( extent, 0.5f, extent );
/* local intertia tensor */
- float scale = 4.0f;
+ float scale = k_inertia_scale;
float ex2 = scale*extent[0]*extent[0],
ey2 = scale*extent[1]*extent[1],
ez2 = scale*extent[2]*extent[2];
}
}
+/*
+ * Effectors
+ */
+
+static void rb_effect_simple_bouyency( rigidbody *ra, v4f plane,
+ float amt, float drag )
+{
+ /* float */
+ float depth = v3_dot( plane, ra->co ) - plane[3],
+ lambda = vg_clampf( -depth, 0.0f, 1.0f ) * amt;
+
+ v3_muladds( ra->v, plane, lambda * ktimestep, ra->v );
+
+ if( depth < 0.0f )
+ v3_muls( ra->v, 1.0f-(drag*ktimestep), ra->v );
+}
+
/*
* -----------------------------------------------------------------------------
* BVH implementation, this is ONLY for static rigidbodies, its to slow for