FPS is a lite 3D physics engine intended to be used for game development.
It is recommended to use this library with VML
#define FPS_IMPLEMENTATION
#include "fps.h"
void main() {
// Create dynamic bodies
fps_body *body_a = fps_body_new();
fps_body *body_b = fps_body_new();
// Create (box) colliders
fps_part *part_a = fps_part_new();
fps_part *part_b = fps_part_new();
// Add colliders to the bodies
fps_body_part_add(body_a,part_a);
fps_body_part_add(body_b,part_b);
// Make body A a moving box
fps_body_dynamic_set(body_a,FPS_TRUE); // Body A is dynamic and can move
fps_body_position_set(body_a,(ice_real[3]){0,5,0}); // You can also use fps_body_transform_set()
fps_part_size_set(part_a,(fps_real[3]){1,1,1}); // Set the size to 1,1,1
fps_part_solid_set(part_a,FPS_TRUE); // Make it solid so it reacts to collisions
fps_part_friction_set(part_a,0.7); // Friction 0 (slick) to 1 (doesn't slide)
fps_part_restitution_set(part_a,0.5); // Restitution 0 (no bounce) to 1 (bounces)
fps_part_density_set(part_a,1.0); // Density affects the mass and inertia
// Make body B a static floor
fps_body_dynamic_set(body_b,FPS_FALSE);
fps_body_position_set(body_b,(ice_real[3]){0,0,0});
fps_part_size_set(part_b,(fps_real[3]){10,1,10});
fps_part_solid_set(part_b,FPS_TRUE);
fps_part_friction_set(part_b,0.7);
fps_part_restitution_set(part_b,0.5);
fps_part_density_set(part_b,1.0);
while (1) {
// Apply gravity to body A
fps_real mass = fps_body_mass_get(body_a);
fps_body_force_apply(body_a,(fps_real[3]){0,-10.0*mass,0});
// Test collision between bodies A and B
fps_collision_test(body_a,body_b);
// Step the bodies 1/60th of a second
fps_body_step(body_a,1.0/60.0);
fps_body_step(body_b,1.0/60.0);
}
// Cleanup
fps_part_free(part_a);
fps_part_free(part_b);
fps_body_free(body_a);
fps_body_free(body_b);
}
Refer to fps.h to see rest of the functions.
This software is free to use. You can modify it and redistribute it under the terms of the MIT license. Check LICENSE for further details.