Program Listing for File Constraints.h¶
↰ Return to documentation for file (Source\Physics\Inc\Physics\PBD\Cloth\Constraints.h
)
#pragma once
#include <Types.h>
#include <Containers/Vector.h>
#include <Math/Core.h>
#include <array>
namespace Azura {
namespace Physics {
namespace PBD {
struct ConstraintPoint {
U32 m_dataIdx;
};
struct ConstraintPointDelta {
U32 m_dataIdx;
Vector3f m_delta;
};
class DistanceConstraint {
public:
DistanceConstraint(const ConstraintPoint& x1,
const ConstraintPoint& x2,
float restLength);
void Compute(float stiffness, const Containers::Vector<Vector3f>& currentPoints,
const Containers::Vector<float>& currentInvMass,
Containers::Vector<ConstraintPointDelta>& result);
bool operator<(const DistanceConstraint& rhs) const;
bool operator==(const DistanceConstraint& rhs) const;
private:
ConstraintPoint m_points[2]{};
float m_restLength;
};
class LongRangeConstraint {
public:
LongRangeConstraint(const ConstraintPoint& x1,
const ConstraintPoint& x2,
float restLength);
void Compute(float stiffness, const Containers::Vector<Vector3f>& currentPoints,
const Containers::Vector<float>& currentInvMass,
Containers::Vector<ConstraintPointDelta>& result);
bool operator<(const LongRangeConstraint& rhs) const;
bool operator==(const LongRangeConstraint& rhs) const;
private:
ConstraintPoint m_points[2]{};
float m_restLength;
};
class BendingConstraint {
public:
BendingConstraint(const Containers::Vector<Vector3f>& currentPoints,
const ConstraintPoint& x0,
const ConstraintPoint& x1,
const ConstraintPoint& x2,
const ConstraintPoint& x3);
void Compute(float stiffness, const Containers::Vector<Vector3f>& currentPoints,
const Containers::Vector<float>& currentInvMass,
Containers::Vector<ConstraintPointDelta>& result);
private:
static Vector3f ComputeBendingGradient(const Containers::Vector<Vector3f>& currentPositions,
const Matrix4f& Q,
const std::array<U32, 4>& indices,
U32 rowI);
ConstraintPoint m_points[4]{};
Matrix4f m_Q{};
};
} // namespace PBD
} // namespace Physics
} // namespace Azura