Ejemplo n.º 1
0
    void OnDrawGizmos()
    {
        if (m_curve == null)
        {
            var bezierCurveControlPoints = new List <Point> ();
            m_curve = new BezierPointCurve();
            m_curve.controlPoints = bezierCurveControlPoints;
        }

        m_curve.controlPoints.Clear();
        foreach (var controlPoint in controlPoints)
        {
            m_curve.controlPoints.Add(Point.FromWorldTransform(controlPoint));
        }
        curve = m_curve;
        if (normalize)
        {
            curve = new NormalizedPointCurve(curve);
        }

        float pointIndexToT = 1f / pointsCount;

        for (int i = 0; i < pointsCount; i++)
        {
            float tA = i * pointIndexToT;
            float tB = (i + 1) * pointIndexToT;

            var pointA = curve.Evaluate(tA);
            var pointB = curve.Evaluate(tB);
            Gizmos.DrawLine(pointA.position, pointB.position);
            Gizmos.DrawWireSphere(pointA.position, 0.01f);
        }
    }
Ejemplo n.º 2
0
    public NormalizedPointCurve(IPointCurve m_originalCurve)
    {
        this.m_originalCurve = m_originalCurve;

        float totalLength   = 0f;
        float pointIndexToT = 1f / c_approximationPointsCount;

        float t      = 0f;
        Point pointB = m_originalCurve.Evaluate(0);
        Point pointA;
//		Debug.Log ("begin");
        FloatSpline tNormalizerInv = new FloatSpline();

        for (int i = 1; i <= c_approximationPointsCount; i++)
        {
            t = i * pointIndexToT;

            pointA = pointB;
            pointB = m_originalCurve.Evaluate(t);

            float distanceBetweenPoints = Vector3.Distance(pointA.position, pointB.position);

            float newTotalLength = totalLength + distanceBetweenPoints;
            tNormalizerInv.curves.Add(new LinearFloatCurve(totalLength, newTotalLength));
            totalLength = newTotalLength;
//			Debug.Log (totalLength);
        }
        float totalLengthInv = 1f / totalLength;

//		float lastB = 0f;
        foreach (LinearFloatCurve linearCurve in tNormalizerInv.curves)
        {
            linearCurve.a *= totalLengthInv;
            linearCurve.b *= totalLengthInv;
//			lastB = linearCurve.b;
        }
        var tNormalizerValues = new float[c_approximationPointsCount + 1];

        for (int i = 0; i < tNormalizerValues.Length; i++)
        {
            tNormalizerValues [i] = FloatSplineMath.FindClosest(tNormalizerInv, i * pointIndexToT);
//			lastB = tNormalizerValues [i];
        }

        FloatSpline tNormalizer = new FloatSpline();

        for (int i = 0; i < tNormalizerValues.Length - 1; i++)
        {
            float valA        = tNormalizerValues [i];
            float valB        = tNormalizerValues [i + 1];
            var   linearCurve = new LinearFloatCurve(valA, valB);
//			lastB = linearCurve.b;
            tNormalizer.curves.Add(linearCurve);
        }
//		Debug.Log (lastB);

        m_tNormalizer = tNormalizer;
    }
Ejemplo n.º 3
0
    void OnDrawGizmos()
    {
        var conrolPoints = new List <Point> ();

        m_controlPoints = new List <Transform> ();
        for (int i = 0; i < transform.childCount; i++)
        {
            m_controlPoints.Add(transform.GetChild(i));
        }
        foreach (var controlPoint in m_controlPoints)
        {
            var point = Point.FromWorldTransform(controlPoint);
            conrolPoints.Add(point);
        }
        m_curve = CreateCurve(conrolPoints);
        if (normalize)
        {
            m_curve = new NormalizedPointCurve(m_curve);
        }

        float        indexToT = 1f / (pointsCount - 1);
        List <Point> points   = new List <Point>();

        for (int i = 0; i < pointsCount; i++)
        {
            points.Add(m_curve.Evaluate(i * indexToT));
        }

        Gizmos.color = Color.white;
        for (int i = 0; i < pointsCount - 1; i++)
        {
            var pointA = points [i];
            var pointB = points[i + 1];
            Gizmos.DrawLine(pointA.position, pointB.position);
            Gizmos.DrawWireSphere(pointA.position, 0.01f);
        }

        Gizmos.color = Color.gray;
        foreach (var point in conrolPoints)
        {
            Gizmos.DrawWireSphere(point.position, 0.02f);
        }
    }