2015-11-18 3 views
2

Существует ли стандартный метод интерполяции для интерполяции между ключевыми кадрами скелетной анимации? Сейчас я использую glm::slerp().Скелетная анимационная интерполяция в графике реального времени

Существуют ли методы интерполяции, отличные от slerp и lerp?

Согласно glm docs, glm::mix(quat1, quat2, a) делает сферическую линейную интерполяцию двух кватернионов, и glm::slerp(quat1, quat2, a) делает «короткий путь сферической линейной интерполяции» двух кватернионов. Какая разница?

+0

Зачем отмечать это Direct3D, когда это вопрос OpenGL? – legalize

+0

Его не вопрос opengl – Pilpel

+0

Итак ... как теги Direct3D, так и OpenGL неуместны. – legalize

ответ

4

В случае сомнений, look у источника code. Единственное отличие состоит в этой части (кроме разного х/у/г наименования):

// If cosTheta < 0, the interpolation will take the long way around the sphere. 
    // To fix this, one quat must be negated. 
    if (cosTheta < T(0)) 
    { 
     z  = -y; 
     cosTheta = -cosTheta; 
    } 

В основном они одинаковы, за исключением slerp обеспечивает интерполяцию взять короткий путь на сфере, а mix не волнует, и могут идти противоположным более длинным путем.

Существует много других методов интерполяции; вероятно, самая продвинутая - это кривая Безье (используется мое большинство анимационных программ), но для этого требуется гораздо больше памяти и вычислительной мощности.

Смежные вопросы