Program Listing for File XPBD.h

Return to documentation for file (PositionBasedDynamics/XPBD.h)

#pragma once

#include "Common/Common.h"

// ------------------------------------------------------------------------------------
namespace PBD
{
    class XPBD
    {
    public:
        // -------------- Distance constraint -----------------------------------------------------

        static bool solve_DistanceConstraint(
            const Vector3r &p0, Real invMass0,
            const Vector3r &p1, Real invMass1,
            const Real restLength,
            const Real stiffness,
            const Real dt,
            Real& lambda,
            Vector3r &corr0, Vector3r &corr1);

        static bool solve_VolumeConstraint(
            const Vector3r& p0, Real invMass0,
            const Vector3r& p1, Real invMass1,
            const Vector3r& p2, Real invMass2,
            const Vector3r& p3, Real invMass3,
            const Real restVolume,
            const Real stiffness,
            const Real dt,
            Real& lambda,
            Vector3r& corr0, Vector3r& corr1, Vector3r& corr2, Vector3r& corr3);


        // -------------- Isometric bending -----------------------------------------------------

        static bool init_IsometricBendingConstraint(
            const Vector3r& p0,
            const Vector3r& p1,
            const Vector3r& p2,
            const Vector3r& p3,
            Matrix4r& Q
        );

        static bool solve_IsometricBendingConstraint(
            const Vector3r& p0, Real invMass0,      // angle on (p2, p3) between triangles (p0, p2, p3) and (p1, p3, p2)
            const Vector3r& p1, Real invMass1,
            const Vector3r& p2, Real invMass2,
            const Vector3r& p3, Real invMass3,
            const Matrix4r& Q,
            const Real stiffness,
            const Real dt,
            Real& lambda,
            Vector3r& corr0, Vector3r& corr1, Vector3r& corr2, Vector3r& corr3);


        static bool solve_FEMTetraConstraint(
            const Vector3r& p0, Real invMass0,
            const Vector3r& p1, Real invMass1,
            const Vector3r& p2, Real invMass2,
            const Vector3r& p3, Real invMass3,
            const Real restVolume,
            const Matrix3r& invRestMat,
            const Real youngsModulus,
            const Real poissonRatio,
            const bool  handleInversion,
            const Real dt,
            Real& lambda,
            Vector3r& corr0, Vector3r& corr1, Vector3r& corr2, Vector3r& corr3);
    };
}