【问题标题】:Skeletal animation interpolation in real-time graphics实时图形中的骨骼动画插值
【发布时间】:2015-11-18 12:56:37
【问题描述】:

骨骼动画关键帧之间的插值是否有标准插值方法?现在我正在使用glm::slerp()

除了slerp和lerp还有插值方法吗?

根据glm docsglm::mix(quat1, quat2, a)对两个四元数进行球面线性插值,glm::slerp(quat1, quat2, a)对两个四元数进行“短程球面线性插值”。有什么区别?

【问题讨论】:

  • 当它是一个 OpenGL 问题时,为什么要用 Direct3D 标记它?
  • 这不是一个 opengl 问题
  • 那么……那么 Direct3D 和 OpenGL 标签都不合适。
  • 这是一个CG问题。如果知道答案的opengl专家错过了这一点,那将是一种耻辱。也许 Ketlar 正在搜索 opengl 标签。
  • 如果是 cg 问题,则使用 cg 标签。我不认为标签垃圾邮件是引起人们注意您的问题的好方法。它通常会稀释标签的有用性。

标签: opengl math graphics direct3d glm-math


【解决方案1】:

如有疑问,look 来源 code。唯一的区别是这部分(除了不同的 x/y/z 命名):

    // 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 不关心并且可能采用相反的较长路径。

还有很多其他的插值方法;可能最先进的是贝塞尔曲线(我用的最多的动画软件),但它需要更多的内存和计算能力。

【讨论】:

    猜你喜欢
    • 2012-10-17
    • 2014-10-16
    • 2014-09-23
    • 2017-05-05
    • 2011-04-02
    • 2021-06-09
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多