问题
我试图通过解析 BVH 文件来获取特征。 BVH 文件通过 NUICapture 导出,BVHhacker 是一种通过 Kinect 捕捉 body 运动的软件。
我知道的所有 BVH 示例文件都以 ZXY
表示法指定欧拉角,而不是 ZYX
,但 NUICapture 使用 ZYX
表示法导出 BVH 文件,因此我无法解析它。
背景
在 BVH 格式中,轴的顺序可能因为每个 body 部位指定的欧拉角而不同。 body 部位的旋转由指定轴的矩阵乘法指定,整个 body 的运动被视为层次结构中所有连续 body 部位的旋转的乘积。由于矩阵乘法不是可交换的,因此 ZXY
与 ZYX
不同。
解决方案的尝试
我遇到的所有现有解析器都将 ZXY
表示为事实上的标准,所有论文也是如此。我发现的所有解析器都无法解析 NUICapture 生成的 BVH 文件,但 BVHPlay 除外。但是 BVHhacker 没有可用的源代码,因此即使它似乎能够重放 NUICapture 捕获的 Action ,也无法访问 BVHhacker 的解析器创建的内部表示。
我尝试使用开源 Python BVH 解析器(例如 ojit_a)并尝试导入 NUICapture 的 BVH 文件,但存在文件输入错误,其他具有“正确”ZXY
格式的示例 BVH 文件不会发生这种情况。为了解决这个问题,我需要以某种方式纠正轴序列,但我不确定如何在不影响原始 body 运动完整性的情况下进行。对我来说,手动切换顺序以允许解析 BVH 可能非常幼稚。
最佳答案
见本页底部:http://research.cs.wisc.edu/graphics/Courses/cs-838-1999/Jeff/BVH.html
如您所见,您以相反的顺序预乘每个轴的旋转矩阵的逆矩阵,然后(预)乘以正确顺序的矩阵。
因此,如果您有 R=XYZ,则将 R 预先乘以 X^(-1),然后将结果乘以 Y^(-1),然后将该结果乘以 X,然后乘以 Y,从而得到
Y*X*Y^(-1)*X^(-1)*R。
关于parsing - Biovision 分层文件 (BVH) 欧拉角规范差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16595355/