Для кривої руху я б запропонував використовувати криві Ерміта. Ви просто даєте початкову точку / швидкість і кінцеву точку / швидкість, і це створює приємну і гладку криву між цими двома. Використовуйте кінцеву точку / швидкість першої пари точок як вихідну точку / швидкість наступної пари точок, і у вас є гарна довга і звивиста крива, яка є безшовною.
Це прекрасно справляється з вимогою керувати швидкістю: ви даєте список точок у часі зі швидкістю, яку ви вибрали, і це дає вам плавно інтерпольовані значення позиції та швидкості. Якщо ви хочете піти з цим, все, що вам потрібно отримати з програми 3D-створення, - це точки та швидкості на шляху, який ви бажаєте. Ви також можете їх генерувати під час виконання, можливо, на основі даних користувача.
Для налаштування орієнтації у вас є ряд варіантів. Якщо літак завжди буде вказувати, куди він рухається (що має сенс), ви можете скористатися інтерпольованим вектором швидкості від кривої Ерміта, щоб знайти, куди має спрямовувати ваш корабель. Якщо ви знаєте вектор вгору (він рухається в площині, або ви знаєте, який напрямок повинен бути вгору), ви можете обчислити третю вісь поперечно (попереду, вгору) і там ви маєте свою орієнтацію.
Якщо ви хочете якось «хиткою» орієнтацією, щоб площина іноді відхилялася від напрямку фронту на шляху, ви можете використовувати напрямок фронту як потрібний напрямок, а також послідовно робити однокроковий нахил між поточною орієнтацією та потрібною орієнтацією.
Якщо ви хочете, щоб користувацькі орієнтації не мали нічого спільного з контуром, ви, звичайно, можете надати для цього список кватерніонів орієнтації. Тоді ваші точки стають (точка, швидкість, кватерніон). Тоді ви можете використовувати slerp між двома послідовними кватерніонами, щоб встановити свої орієнтації на цьому шляху. Не забувайте, що серп - це метод лінійної інтерполяції. Однак зазвичай це повинно бути добре. Якщо ви виявите, що обертання недостатньо плавні в швах, ви можете спробувати інтерполювати список кватерніонів з кривою Безьє, як пояснено тут у розділі 7.
Ось декілька вихідних кодів, які можуть допомогти вам розпочати роботу. Він має ряд методів гладкої інтерполяції для списку кватерніонів (загін, безьє тощо).
Повідомте мене, якщо у вас є якісь питання!