#include #include #include static VECTOR gravitation = {0, -9.8, 0}; void SetGravitation(VECTOR v) { gravitation = v; } void ApplyPhysics(OBJECT o, float delta) { VERTEX old_pos = o.pos; VECTOR old_move = o.move; float e; e = expf(-o.air_resistance*delta); o.move = VectorAdd(VectorMul(gravitation, 1/o.air_resistance), VectorMul(VectorSub(old_move, VectorMul(gravitation, 1/o.air_resistance)), e)); o.pos = VectorAdd(old_pos, VectorAdd(VectorMul(gravitation, delta/o.air_resistance), VectorMul(VectorSub(old_move, VectorMul(gravitation, 1/o.air_resistance)), (1-e)/o.air_resistance))); }