Как создать/использовать подвижный сплайн?

Я создаю систему, в которой персонаж игрока путешествует по заданному сплайновому пути. Вот что мне нужно сделать:

  1. Введите массив координат Vector3 (XYZ).
  2. Сгенерируйте данные сплайна из этих Vector3.
  3. Возвращает Vector3 для заданного относительного расстояния по сплайну (0,0–1,0).

Я использую предоставленную библиотеку из здесь, которая делает то, что мне нужно, но полученный сплайн имеет тенденцию «выстреливать» вокруг контрольных точек, замедляясь на кривых и ускоряясь на прямых участках. Это похоже на естественный побочный эффект сплайновой интерполяции.

К сожалению, мой персонаж должен двигаться с постоянной скоростью, и мне нужен способ получить это.

Есть ли хорошая библиотека на С# (или С++, которую я могу преобразовать), которую я могу использовать?

В противном случае, есть ли достойная ссылка на то, как работает сплайновая математика, из которой я могу учиться?

Спасибо!


person Tom Murray    schedule 22.01.2013    source источник
comment
Что вы имеете в виду под замедлением на кривых и ускорением на прямых участках - сплайн не имеет понятия скорости сам по себе, а скорость обычно означает расстояние/время - которое не должно меняться независимо от формы сплайна, или?   -  person 500 - Internal Server Error    schedule 22.01.2013
comment
Вам нужно узнать, как перенастроить сплайн с помощью что-то вроде длины дуги. Если вам больше нравятся бумажные книги, глава 3 «Компьютерная анимация: алгоритмы и методы» — хороший ресурс. Вступление. в pdf, на который я ссылаюсь, должно быть достаточно терминов, чтобы найти лучшие ресурсы.   -  person Jerdak    schedule 23.01.2013
comment
Спасибо, я просмотрел несколько ресурсов, и похоже, что это очень поможет.   -  person Tom Murray    schedule 23.01.2013
comment
У вас есть точки, которые нужно пройти, и контрольные точки тоже? (Есть ли how-to- создать-кубическую-кривую-Безье-при-данных-n-точках-в-3d помочь вообще?)   -  person denis    schedule 23.01.2013
comment
@TomMurray Вы можете посмотреть мою реализацию reparam'd дорожный сплайн. Я не знаю, полезен ли код, так как в нем отсутствуют комментарии. Но это может быть та небольшая часть, которая поможет вам пройти остаток пути.   -  person Jerdak    schedule 23.01.2013