问题

我试图通过解析 BVH 文件来获取特征。 BVH 文件通过 NUICapture 导出,BVHhacker 是一种通过 Kinect 捕捉 body 运动的软件。

我知道的所有 BVH 示例文件都以 ZXY 表示法指定欧拉角,而不是 ZYX ,但 NUICapture 使用 ZYX 表示法导出 BVH 文件,因此我无法解析它。

背景

在 BVH 格式中,轴的顺序可能因为每个 body 部位指定的欧拉角而不同。 body 部位的旋转由指定轴的矩阵乘法指定,整个 body 的运动被视为层次结构中所有连续 body 部位的旋转的乘积。由于矩阵乘法不是可交换的,因此 ZXYZYX 不同。

解决方案的尝试

我遇到的所有现有解析器都将 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/

10-12 14:11