示例#1
0
    public static int trySetUpConstraint(int index1, int index2, bool Equality, ref NativeArray <Vector3> constrainedVerts, ref List <DistConstraint> distanceConstraints, ref List <int> edges)
    {
        DistConstraint constraint = new DistConstraint(index1, index2, constrainedVerts, Equality);
        int            edgeHash   = constraint.GetHashCode();

        if (!edges.Contains(edgeHash))
        {
            distanceConstraints.Add(constraint);
            edges.Add(edgeHash);
        }
        return(distanceConstraints.Count);
    }
示例#2
0
    public static void resolveDistanceConstraints(List <DistConstraint> constraints, ref Vector3[] verts, int iterations = 3, bool randomize = false)
    {
        //Knuth Shuffle; randomize the order of the constraint resolution
        //Trades smoothness for stiffness
        if (randomize)
        {
            for (int t = 0; t < constraints.Count; t++)
            {
                DistConstraint tmp = constraints[t];
                int            r   = Random.Range(t, constraints.Count);
                constraints[t] = constraints[r];
                constraints[r] = tmp;
            }
        }

        for (int i = 0; i < iterations; i++)
        {
            for (int j = 0; j < constraints.Count; j++)
            {
                constraints[j].ResolveConstraint(ref verts);
            }
        }
    }