PointOnBezier() public static method

public static PointOnBezier ( Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, float t ) : Vector3
p0 Vector3
p1 Vector3
p2 Vector3
p3 Vector3
t float
return Vector3
Esempio n. 1
0
    private Vector3 GetPointRaw(float t)
    {
        int   base_coord = (int)t * 3;
        float t_sub      = t - (int)t;

        if (t == (int)t && t != 0)
        {
            base_coord -= 3;
            t_sub       = 1;
        }

        if (base_coord + 3 >= points.Length)
        {
            return(transform.TransformPoint(points[points.Length - 1]));
        }
        if (base_coord < 0)
        {
            return(transform.TransformPoint(points[0]));
        }

        Vector3 p0 = points[base_coord];
        Vector3 p1 = points[base_coord + 1];
        Vector3 p2 = points[base_coord + 2];
        Vector3 p3 = points[base_coord + 3];

        return(Bezier.PointOnBezier(p0, p1, p2, p3, t_sub));
    }
Esempio n. 2
0
    private void OnSceneGUI()
    {
        Bezier     b  = target as Bezier;
        Transform  tr = b.transform;
        Quaternion r  = Tools.pivotRotation == PivotRotation.Local ? tr.rotation : Quaternion.identity;

        Vector3 p0 = tr.TransformPoint(b.p0);
        Vector3 p1 = tr.TransformPoint(b.p1);
        Vector3 p2 = tr.TransformPoint(b.p2);
        Vector3 p3 = tr.TransformPoint(b.p3);

        Handles.color = Color.white;

        float   t    = 0;
        Vector3 prev = p0;

        for (int x = 1; x <= curve_draw_iter; x++)
        {
            t = (float)x / (float)curve_draw_iter;

            Vector3 next = Bezier.PointOnBezier(p0, p1, p2, p3, t);
            Handles.DrawLine(prev, next);
            prev = next;
        }

        EditorGUI.BeginChangeCheck();
        p0 = Handles.DoPositionHandle(p0, r);
        if (EditorGUI.EndChangeCheck())
        {
            Undo.RecordObject(b, "Move Point");
            EditorUtility.SetDirty(b);
            b.p0 = tr.InverseTransformPoint(p0);
        }

        EditorGUI.BeginChangeCheck();
        p1 = Handles.DoPositionHandle(p1, r);
        if (EditorGUI.EndChangeCheck())
        {
            Undo.RecordObject(b, "Move Point");
            EditorUtility.SetDirty(b);
            b.p1 = tr.InverseTransformPoint(p1);
        }

        EditorGUI.BeginChangeCheck();
        p2 = Handles.DoPositionHandle(p2, r);
        if (EditorGUI.EndChangeCheck())
        {
            Undo.RecordObject(b, "Move Point");
            EditorUtility.SetDirty(b);
            b.p2 = tr.InverseTransformPoint(p2);
        }

        EditorGUI.BeginChangeCheck();
        p3 = Handles.DoPositionHandle(p3, r);
        if (EditorGUI.EndChangeCheck())
        {
            Undo.RecordObject(b, "Move Point");
            EditorUtility.SetDirty(b);
            b.p3 = tr.InverseTransformPoint(p3);
        }
    }