【发布时间】:2013-12-01 02:36:13
【问题描述】:
我一直在研究我对 OpenGL 的低级理解,我终于学会了如何为 3D 模型制作动画。我看不到任何地方告诉我如何做骨骼动画。大多数事情都使用某种 3D 引擎,只说“加载骨架”或“应用动画”,而不是如何加载骨架,或者如何实际移动顶点。
我假设每个骨骼都有一个 4x4 的平移/旋转/缩放矩阵,用于连接的顶点,这样当骨骼移动时,连接的顶点也会移动相同的量。
对于骨骼动画,我猜测您会将骨骼传递给着色器,这样在顶点着色器中我会在当前顶点进入片段着色器之前移动它。如果我有一个关键帧动画,我将当前骨骼和新骨骼连同帧之间的当前时间一起发送到着色器,并根据关键帧之间的时间插入骨骼之间的点。
这是为网格设置动画的正确方法吗?或者有没有更好的方法
【问题讨论】:
-
几乎是正确的,但是每个顶点通常会受到多个骨骼的一定程度的影响——比如每个骨骼的乘数,乘数之和等于 1。更多的是关于艺术家如何制作它。此外,最好将骨骼限制为仅旋转(无平移/缩放)并使用四元数进行平滑插值(但同样取决于实际数据)。
-
有道理,周围的顶点说肘部会受到上臂和下臂骨骼的影响。我的理解是,这与“权重”或特定骨骼对顶点的影响程度的某种修饰符有关。显然,只有在动画需要像模型的手臂这样的东西才能生长的特殊情况下,才需要平移和缩放。仍然需要完全学习四元数我已经研究了不到一周的时间。