3 * Copyright (C) 2021-2024 Mt.ZERO Software - All Rights Reserved
5 * Rigidbody main file, related:
6 * vg_rigidbody_collision.h
7 * vg_rigidbody_constraints.h
10 #define k_friction 0.4f
11 #define k_damp_linear 0.1f /* scale velocity 1/(1+x) */
12 #define k_damp_angular 0.1f /* scale angular 1/(1+x) */
13 #define k_penetration_slop 0.01f
14 #define k_rb_inertia_scale 4.0f
15 #define k_phys_baumgarte 0.2f
16 #define k_gravity 9.6f
17 #define k_rb_density 8.0f
22 k_rb_shape_sphere
= 2,
23 k_rb_shape_capsule
= 3,
26 typedef struct rigidbody rigidbody
;
27 typedef struct rb_capsule rb_capsule
;
41 m3x3f iI
, iIw
; /* inertia model and inverse world tensor */
42 m4x3f to_world
, to_local
;
46 * Initialize rigidbody inverse mass and inertia tensor with some common shapes
48 void rb_setbody_capsule( rigidbody
*rb
, f32 r
, f32 h
,
49 f32 density
, f32 inertia_scale
);
50 void rb_setbody_box( rigidbody
*rb
, boxf box
, f32 density
, f32 inertia_scale
);
51 void rb_setbody_sphere( rigidbody
*rb
, f32 r
, f32 density
, f32 inertia_scale
);
54 * Update ALL matrices and tensors on rigidbody
56 void rb_update_matrices( rigidbody
*rb
);
59 * Extrapolate rigidbody into a transform based on vg accumulator.
60 * Useful for rendering
62 void rb_extrapolate( rigidbody
*rb
, v3f co
, v4f q
);
63 void rb_iter( rigidbody
*rb
);
64 void rb_solve_gyroscopic( rigidbody
*rb
, m3x3f I
, f32 h
);
67 * Creates relative contact velocity vector
69 void rb_rcv( rigidbody
*rba
, rigidbody
*rbb
, v3f ra
, v3f rb
, v3f rv
);
72 * Apply impulse to object
74 void rb_linear_impulse( rigidbody
*rb
, v3f delta
, v3f impulse
);
79 void rb_effect_simple_bouyency( rigidbody
*ra
, v4f plane
, f32 amt
, f32 drag
);
80 void rb_effect_spring_target_vector( rigidbody
*rba
, v3f ra
, v3f rt
,
81 f32 spring
, f32 dampening
, f32 timestep
);