public OneWayOneDOFConstraint(TargetVelocityManifold m, Float3 M_inv, float dt)
    {
        e  = m.e;
        id = m.id;

        this.M_inv = M_inv;

        constraint = new OneDOFConstraint <Float3>(
            J: new float3(m.normal, Lin.Cross(m.r, m.normal)),
            M_inv: M_inv,
            bias: -m.targetSpeed,
            softness: m.softness
            );

        lambdaAccum = 0;
    }
    public OneWayOneDOFConstraint(TargetAngularVelocityManifold m, Float3 M_inv, float dt)
    {
        e  = m.e;
        id = m.id;

        this.M_inv = M_inv;

        constraint = new OneDOFConstraint <Float3>(
            J: new float3(0, 0, math.sign(m.targetAngVel)),
            M_inv: M_inv,
            bias: -math.abs(m.targetAngVel),
            softness: m.softness
            );

        lambdaAccum = 0;
    }