Example #1
0
    public OrientedPoint GetProjectionAndTangent(Vector3 worldPos, ref int st, ref int index)
    {
        int           initialStretch = st;
        OrientedPoint orientedPoint  = new OrientedPoint(Vector3.zero, Quaternion.identity);
        float         minDst         = float.MaxValue;

        for (int i = st; i < NStretches; i++)
        {
            Stretch s   = GetNStretch(i);
            bool    fwd = IsStretchNForward(i);

            if (index == -1)
            {
                if (fwd)
                {
                    index = 0;
                }
                else
                {
                    index = s.Vertices.Length - 1;
                }
            }

            int temp = index;
            if (st != initialStretch)
            {
                temp = fwd ? 0 : s.Vertices.Length - 1;
            }

            OrientedPoint op  = s.GetClosestOrientedPoint(worldPos, fwd, ref temp);
            float         dst = Vector3.SqrMagnitude(op.Pos - worldPos);
            if (dst < minDst)
            {
                orientedPoint = op;
                minDst        = dst;
                st            = i;
                index         = temp;
            }
            else
            {
                break;
            }
        }
        return(orientedPoint);
    }
Example #2
0
    public OrientedPoint GetProjectionAndTangent(Vector3 worldPos)
    {
        OrientedPoint orientedPoint = new OrientedPoint(Vector3.zero, Quaternion.identity);
        float         minDst        = float.MaxValue;

        for (int i = 0; i < NStretches; i++)
        {
            Stretch s   = GetNStretch(i);
            bool    fwd = IsStretchNForward(i);

            OrientedPoint op  = s.GetClosestOrientedPoint(worldPos, fwd);
            float         dst = Vector3.SqrMagnitude(op.Pos - worldPos);
            if (dst < minDst)
            {
                orientedPoint = op;
                minDst        = dst;
            }
            else
            {
                break;
            }
        }
        return(orientedPoint);
    }