public static PointOnBezier ( Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, float t ) : Vector3 | ||
p0 | Vector3 | |
p1 | Vector3 | |
p2 | Vector3 | |
p3 | Vector3 | |
t | float | |
리턴 | Vector3 |
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)); }
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); } }