我正在对一个视频游戏动画文件进行逆向工程,并遇到了一堵砖墙。动画集的结构如下:
对于每个动画集:
随后对于集合中的每个骨骼:
然后将以下数据分为7个频道(Position[x,y,z]
和Rotation quaternion[x,y,z,w]
):
位置[x,y,z]是常数或原始值,我在这里没有问题。
但旋转四元数[x,y,z,w]通道被解释为具有N个分段和N个系数的样条曲线,我无法确定如何将样条曲线评估为数据,我可以将其打入3D程序
我知道每个通道的样条曲线都标绘为Y,而X则等于标准化时间(0到1)。
这个Q + A(Evaluating Polynomial coefficients)似乎就是我所需要的:
n次多项式,系数a0,a1,a2,a3 ........ an是函数
p(x)= a0 + a1 * x + a2 * x ^ 2 + a3 * x ^ 3 + ..... + an * x ^ n
并以Python代码编写:
def poly(lst, x):
n, tmp = 0, 0
for a in lst:
tmp = tmp + (a * (x**n))
n += 1
return tmp
但是当我将lst
作为每个片段的系数x = Duration / Keys
时,我不确定我是否正确。
这是第一个动画集的'Rot.x'频道及其分段和系数:
细分= 3
第1段
第2段
第3段
我正在看这个方法是每个段是持续时间的1/3(1.03333),而且每个段系数将被评估超过键数(31)的1/3,但输出使用
的上述poly(lst, x)
函数
显然我做错了,因为输出太高了。
非常感谢任何帮助!