public override void AddPoint(Vector3 point)
{
//base.AddPoint(Point);
if (m_AllSubKeyPathpoints.Count == 0)
{
QuadPoint _firstPoint = CreateFirstMeshPoint(point) as QuadPoint;
m_AllSubKeyPathpoints.Add(_firstPoint);
return;
}
QuadPoint previousQuaPoint = m_AllSubKeyPathpoints[m_AllSubKeyPathpoints.Count - 1] as QuadPoint; //上一个Key路径点
Vector3 direction = point - previousQuaPoint.Point_Center; //两个Key路径点的向量
if (m_AllSubKeyPathpoints.Count == 1)
{ //第一个点的方向有第二个点决定
previousQuaPoint.CenterLeftDirNor = new Vector3(-1, 0, 0);
m_AllSubMeshPoints.Add(previousQuaPoint.GetQuadRight());
m_AllSubMeshPoints.Add(previousQuaPoint.GetQuadLeft());
}
Vector3 controllPoint1 = VectorExpand.GetPointPerpendicularTo(previousQuaPoint.GetQuadLeft(), previousQuaPoint.Point_Center, point); //获得垂直于上一个QuadPoint 点且在direction 平面的单位控制点
List <QuadPoint> subQuadPoint = new List <QuadPoint>(); // 子节点Point
for (int dex = 0; dex < previousQuaPoint.SubsectionCount; dex++)
{
Vector3 _subPoint = Curve.CalculateBezier(previousQuaPoint.Point_Center, point, controllPoint1, (dex + 1) * 1f / (previousQuaPoint.SubsectionCount)); //根据二阶贝塞尔曲线获得 一个分割点
QuadPoint currentSubPoint;
int previousStartIndex = m_AllSubMeshPoints.Count - 2;
if (dex == 0)
{
currentSubPoint = CreateSubKeyPoint(previousQuaPoint, _subPoint) as QuadPoint;
}
else
{
currentSubPoint = CreateSubKeyPoint(subQuadPoint[subQuadPoint.Count - 1], _subPoint) as QuadPoint;
}
subQuadPoint.Add(currentSubPoint);
m_AllSubTrangles.Add(previousStartIndex);
m_AllSubTrangles.Add(previousStartIndex + 1);
m_AllSubMeshPoints.Add(currentSubPoint.GetQuadRight());
m_AllSubMeshPoints.Add(currentSubPoint.GetQuadLeft());
m_AllSubTrangles.Add(m_AllSubMeshPoints.Count - 1); //上一个Right,上一个Left,当前的Left
m_AllSubTrangles.Add(previousStartIndex);
m_AllSubTrangles.Add(m_AllSubMeshPoints.Count - 1);
m_AllSubTrangles.Add(m_AllSubMeshPoints.Count - 2); //上一个Right,当前的Left,但情感的Left
if (dex == previousQuaPoint.SubsectionCount - 1)
{
m_AllSubKeyPathpoints.Add(currentSubPoint);
}
}
}