/*************************************************************************** File: PBMSpringMass.h Created: 02/12/2002 Author: Maxim Garber Computer Science Department University of North Carolina - Chapel Hill garber@cs.unc.edu Description: Spring for physically based modelling simulation. ----------------------------------------------------------------------------. Copyright 2002 Maxim Garber UNC Collide Research Group *****************************************************************************/ #include "PBMSimObject.h" #include "ODESolver.h" #include "PBMSpringMassParams.h" class PBMSpringMass: // inherits from SimObject and ODESystem base classes public PBMSimObject, public ODESystem { public: PBMSpringMass(PBMSpringMassParams params); ~PBMSpringMass(){}; ////////////////////////////////////////////////////////////////////////////// // Simulation void Update(float timeStep); ////////////////////////////////////////////////////////////////////////////// // mutators void SetRestLength (float restLength ){_restLength = restLength; } void SetSpringConstant(float springConstant ){_springConstant = springConstant;} void SetMass (float mass ){_mass = mass; } void SetFriction (float friction ){_friction = friction; } void SetIntegrator (ODESolver* integrator){_integrator = integrator; } ////////////////////////////////////////////////////////////////////////////// // Rendering void Draw(); ////////////////////////////////////////////////////////////////////////////// // Test For Culling bool IsActive(){return true;} ////////////////////////////////////////////////////////////////////////////// // ODE Integration void ODEDerivative(const ODEConfig& config, float time, ODEConfig& derivative); private: // state float _anchor [3]; float _position[3]; float _velocity[3]; float _restLength; float _springConstant; float _mass; // forces float _gravity[3]; // force of gravity float _friction; // air friction float _externalForce[3]; // external forces acting on projectile // ODE solver ODESolver* _integrator; };