Получение согласованных нормалей из трехмерного кубического пути Безье
Я пишу класс BezierPath, который содержит список BezierPoints. У каждого BezierPoint есть позиция, inTangent и outTangent:
BezierPath содержит функции для получения линейных позиций и касательных из пути. Мой следующий шаг - предоставить функциональность для получения нормалей с пути.
Я знаю, что любая заданная линия в 3D будет иметь неограниченное количество перпендикулярных линий, поэтому не будет заданного ответа.
Моя цель - чтобы пользователь мог задавать нормали (или угол крена?) В каждой точке BezierPoint, между которыми я буду интерполировать, чтобы получить нормали вдоль пути. Моя проблема в том, что я не знаю, как выбрать начальную касательную (какой должна быть касательная по умолчанию?).
Моя первая попытка получить начальные касательные с использованием метода Unity3DQuaternion.LookRotation:
Quaternion lookAt = Quaternion.LookRotation(tangent);
Vector3 normal = lookAt * Vector3.up;
Handles.DrawLine(position, position + normal * 10.0f);
Это приводит к следующему (зеленые линии касательные, синие нормали):
По большей части это похоже на хороший базовый результат, но похоже, что в определенных ориентациях происходят внезапные изменения:
Итак, мой вопрос: Есть ли хороший способ для получения последовательных нормалей по умолчанию для линий в 3D?
Спасибо, Весь