Esempio n. 1
0
        public void SetTangentVector(int fencepostIndex, Vector3 positiveTangentVector)
        {
            if (fencepostIndex < 0 || fencepostIndex > curves.Count)
            {
                Debug.LogErrorFormat("ERROR: fencepostIndex {0} must be in the inclusive range [0, {1}].",
                                     fencepostIndex, curves.Count
                                     );
            }

            if (fencepostIndex < 1)
            {
                BezierCurve3D startCurve = curves[0];
                startCurve.p1 = startCurve.p0 + positiveTangentVector;
                curves[0]     = startCurve;
            }
            else if (1 <= fencepostIndex && fencepostIndex < curves.Count)
            {
                BezierCurve3D preCurve  = curves[fencepostIndex - 1];
                BezierCurve3D postCurve = curves[fencepostIndex];
                preCurve.p2  = preCurve.p3 - positiveTangentVector;
                postCurve.p1 = postCurve.p0 + positiveTangentVector;
                curves[fencepostIndex - 1] = preCurve;
                curves[fencepostIndex]     = postCurve;
            }
            else
            {
                BezierCurve3D endCurve = curves[fencepostIndex];
                endCurve.p2            = endCurve.p3 - positiveTangentVector;
                curves[fencepostIndex] = endCurve;
            }
        }
Esempio n. 2
0
 public static BezierCurve3D Lerp(BezierCurve3D a, BezierCurve3D b, float t)
 {
     return(new BezierCurve3D(
                Vector3.Lerp(a.p0, b.p0, t),
                Vector3.Lerp(a.p1, b.p1, t),
                Vector3.Lerp(a.p2, b.p2, t),
                Vector3.Lerp(a.p3, b.p3, t)
                ));
 }
Esempio n. 3
0
        // TODO: implement subdivide/upres

        public static void Lerp(BezierChain3D a, BezierChain3D b, float t, ref BezierChain3D dst)
        {
            if (a.curves.Count != b.curves.Count)
            {
                Debug.LogErrorFormat("Currently cannot lerp 2 chains of different curveCount. A curveCount: {0}, B curveCount: {1} ",
                                     a.curves.Count, b.curves.Count
                                     );
                return;
            }

            dst.curves.Clear();
            int cCount = a.curves.Count;

            for (int i = 0; i < cCount; i++)
            {
                var aCurve = a.curves[i];
                var bCurve = a.curves[i];
                dst.curves.Add(BezierCurve3D.Lerp(aCurve, bCurve, t));
            }
        }