.. _program_listing_file_Source_Physics_Inc_Physics_PBD_Cloth_Constraints.h: Program Listing for File Constraints.h ====================================== |exhale_lsh| :ref:`Return to documentation for file ` (``Source\Physics\Inc\Physics\PBD\Cloth\Constraints.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #pragma once #include #include #include #include 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& currentPoints, const Containers::Vector& currentInvMass, Containers::Vector& 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& currentPoints, const Containers::Vector& currentInvMass, Containers::Vector& 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& currentPoints, const ConstraintPoint& x0, const ConstraintPoint& x1, const ConstraintPoint& x2, const ConstraintPoint& x3); void Compute(float stiffness, const Containers::Vector& currentPoints, const Containers::Vector& currentInvMass, Containers::Vector& result); private: static Vector3f ComputeBendingGradient(const Containers::Vector& currentPositions, const Matrix4f& Q, const std::array& indices, U32 rowI); ConstraintPoint m_points[4]{}; Matrix4f m_Q{}; }; } // namespace PBD } // namespace Physics } // namespace Azura