add comments, correct typo, correct energy computation
This commit is contained in:
parent
676fe352a6
commit
6e0e269f68
@ -50,7 +50,7 @@ struct b3SpringClothDef
|
|||||||
// Cloth mesh
|
// Cloth mesh
|
||||||
b3Mesh* mesh;
|
b3Mesh* mesh;
|
||||||
|
|
||||||
// Cloth density in kg/m^2
|
// Cloth density in kg/m^3
|
||||||
float32 density;
|
float32 density;
|
||||||
|
|
||||||
// Streching stiffness
|
// Streching stiffness
|
||||||
@ -130,55 +130,59 @@ public:
|
|||||||
b3SpringCloth();
|
b3SpringCloth();
|
||||||
~b3SpringCloth();
|
~b3SpringCloth();
|
||||||
|
|
||||||
//
|
// Initialize this cloth from a definition.
|
||||||
void Initialize(const b3SpringClothDef& def);
|
void Initialize(const b3SpringClothDef& def);
|
||||||
|
|
||||||
//
|
// Return the cloth mesh used to initialize this cloth.
|
||||||
b3Mesh* GetMesh() const;
|
b3Mesh* GetMesh() const;
|
||||||
|
|
||||||
//
|
// Set the gravitational force applied to this cloth.
|
||||||
|
// This force is applied at each time step.
|
||||||
void SetGravity(const b3Vec3& gravity);
|
void SetGravity(const b3Vec3& gravity);
|
||||||
|
|
||||||
//
|
// Return the gravitational force applied to this cloth.
|
||||||
const b3Vec3& GetGravity() const;
|
const b3Vec3& GetGravity() const;
|
||||||
|
|
||||||
//
|
// Set the type of a given point mass.
|
||||||
void SetType(u32 i, b3MassType type);
|
void SetType(u32 i, b3MassType type);
|
||||||
|
|
||||||
//
|
// Return the type of a given point mass.
|
||||||
b3MassType GetType(u32 i) const;
|
b3MassType GetType(u32 i) const;
|
||||||
|
|
||||||
// Note, the position will be changed only after performing a time step.
|
// Set the position of a given point mass.
|
||||||
|
// This function will have effect on the position of the point mass
|
||||||
|
// after performing a time step.
|
||||||
void SetPosition(u32 i, const b3Vec3& translation);
|
void SetPosition(u32 i, const b3Vec3& translation);
|
||||||
|
|
||||||
//
|
// Return the position of a given point mass.
|
||||||
const b3Vec3& GetPosition(u32 i) const;
|
const b3Vec3& GetPosition(u32 i) const;
|
||||||
|
|
||||||
//
|
// Apply a force to a given point mass.
|
||||||
void ApplyForce(u32 i, const b3Vec3& force);
|
void ApplyForce(u32 i, const b3Vec3& force);
|
||||||
|
|
||||||
//
|
// Return the kinetic (or dynamic) energy in this system.
|
||||||
float32 GetKineticEnergy() const;
|
float32 GetEnergy() const;
|
||||||
|
|
||||||
//
|
// Add a shape to the list of shapes in this cloth.
|
||||||
|
// The cloth will be able to respond to collisions with each shape in the list of shapes.
|
||||||
void AddShape(b3Shape* shape);
|
void AddShape(b3Shape* shape);
|
||||||
|
|
||||||
//
|
// Return the number of shapes added to this cloth.
|
||||||
u32 GetShapeCount() const;
|
u32 GetShapeCount() const;
|
||||||
|
|
||||||
//
|
// Return the list of shapes added to this cloth.
|
||||||
b3Shape** GetShapes();
|
b3Shape** GetShapes();
|
||||||
|
|
||||||
//
|
// Return the statistics of the last time step.
|
||||||
const b3SpringClothStep& GetStep() const;
|
const b3SpringClothStep& GetStep() const;
|
||||||
|
|
||||||
//
|
// Perform a time step (marches time forward).
|
||||||
void Step(float32 dt);
|
void Step(float32 dt);
|
||||||
|
|
||||||
//
|
// Set the positions of the mesh vertices to the positions of their associated point masses.
|
||||||
void Apply() const;
|
void Apply() const;
|
||||||
|
|
||||||
//
|
// Debug draw the cloth mesh.
|
||||||
void Draw(b3Draw* draw) const;
|
void Draw(b3Draw* draw) const;
|
||||||
protected:
|
protected:
|
||||||
friend class b3SpringSolver;
|
friend class b3SpringSolver;
|
||||||
@ -280,15 +284,14 @@ inline void b3SpringCloth::ApplyForce(u32 i, const b3Vec3& force)
|
|||||||
m_f[i] += force;
|
m_f[i] += force;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline float32 b3SpringCloth::GetKineticEnergy() const
|
inline float32 b3SpringCloth::GetEnergy() const
|
||||||
{
|
{
|
||||||
float32 E = 0.0f;
|
float32 E = 0.0f;
|
||||||
for (u32 i = 0; i < m_massCount; ++i)
|
for (u32 i = 0; i < m_massCount; ++i)
|
||||||
{
|
{
|
||||||
b3Vec3 P = m_m[i] * m_v[i];
|
E += m_m[i] * b3Dot(m_v[i], m_v[i]);
|
||||||
E += b3Dot(P, m_v[i]);
|
|
||||||
}
|
}
|
||||||
return E;
|
return 0.5f * E;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline u32 b3SpringCloth::GetShapeCount() const
|
inline u32 b3SpringCloth::GetShapeCount() const
|
||||||
|
Loading…
x
Reference in New Issue
Block a user