![]() |
Plasma Engine
2.0
|
A simple simulator for swinging and hanging ropes. More...
#include <RopeSimulator.h>
Classes | |
struct | Node |
Public Member Functions | |
void | SimulateRope (const plTime &diff) |
void | SimulateStep (const plSimdFloat fDiffSqr, plUInt32 uiMaxIterations, plSimdFloat fAllowedError) |
void | SimulateTillEquilibrium (plSimdFloat fAllowedMovement=0.005f, plUInt32 uiMaxIterations=1000) |
bool | HasEquilibrium (plSimdFloat fAllowedMovement) const |
float | GetTotalLength () const |
plSimdVec4f | GetPositionAtLength (float fLength) const |
Public Attributes | |
plVec3 | m_vAcceleration = plVec3(0, 0, -10) |
External acceleration, typically gravity or a combination of gravity and wind. Applied to all rope nodes equally. | |
plDynamicArray< Node, plAlignedAllocatorWrapper > | m_Nodes |
All the nodes in the rope. | |
float | m_fDampingFactor = 0.995f |
A factor to dampen velocities to make the rope stop swinging. Should be between 0.97 (strong damping) and 1.0 (no damping). | |
float | m_fSegmentLength = 0.1f |
How long each rope segment (between two nodes) should be. | |
bool | m_bFirstNodeIsFixed = true |
bool | m_bLastNodeIsFixed = true |
A simple simulator for swinging and hanging ropes.
Can be used both for interactive rope simulation, as well as to just pre-compute the shape of hanging wires, cables, etc. Uses Verlet Integration to update the rope positions from velocities, and the "Jakobsen method" to enforce rope distance constraints.