public Vector3 InterpolateNormalByLen(float tl) { float localF; SplineControlPoint seg = LenToSegment(tl, out localF); return(seg.InterpolateNormal(localF)); }
public SplineControlPoint LenToSegment(float t, out float localF) { SplineControlPoint seg = null; t = Mathf.Clamp01(t); float len = t * mSegments[mSegments.Count - 1].Dist; int index = 0; for (index = 0; index < mSegments.Count; index++) { if (mSegments[index].Dist >= len) { seg = mSegments[index]; break; } } if (index == 0) { //skip the first frame. localF = 0f; return(seg); } float PrevLen = 0f; int prevIdx = seg.SegmentIndex - 1; SplineControlPoint prevSeg = mSegments[prevIdx]; PrevLen = seg.Dist - prevSeg.Dist; localF = (len - prevSeg.Dist) / PrevLen; return(prevSeg); }
Vector3 GetNext2Position() { SplineControlPoint cp = NextControlPoint; if (cp != null) { return(cp.NextPosition); } return(NextPosition); }
Vector3 GetNext2Normal() { SplineControlPoint cp = NextControlPoint; if (cp != null) { return(cp.NextNormal); } return(Normal); }
public Vector3 PreviousPosition(SplineControlPoint controlpoint) { SplineControlPoint seg = PreviousControlPoint(controlpoint); if (seg != null) { return(seg.Position); } else { return(controlpoint.Position); } }
public Vector3 NextPosition(SplineControlPoint controlpoint) { SplineControlPoint seg = NextControlPoint(controlpoint); if (seg != null) { return(seg.Position); } else { return(controlpoint.Position); } }
public Vector3 NextNormal(SplineControlPoint controlpoint) { SplineControlPoint seg = NextControlPoint(controlpoint); if (seg != null) { return(seg.Normal); } else { return(controlpoint.Normal); } }
public Vector3 PreviousNormal(SplineControlPoint controlpoint) { SplineControlPoint seg = PreviousControlPoint(controlpoint); if (seg != null) { return(seg.Normal); } else { return(controlpoint.Normal); } }
public SplineControlPoint AddControlPoint(Vector3 pos, Vector3 up) { SplineControlPoint cp = new SplineControlPoint(); cp.Init(this); cp.Position = pos; cp.Normal = up; mControlPoints.Add(cp); cp.ControlPointIndex = mControlPoints.Count - 1; return(cp); }
public SplineControlPoint PreviousControlPoint(SplineControlPoint controlpoint) { if (mControlPoints.Count == 0) { return(null); } int i = controlpoint.ControlPointIndex - 1; if (i < 0) { return(null); } else { return(mControlPoints[i]); } }
public SplineControlPoint NextControlPoint(SplineControlPoint controlpoint) { if (mControlPoints.Count == 0) { return(null); } int i = controlpoint.ControlPointIndex + 1; if (i >= mControlPoints.Count) { return(null); } else { return(mControlPoints[i]); } }