首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Biovision Hierarchical File (BVH) Euler角度规范差异

Biovision Hierarchical File (BVH) Euler角度规范差异
EN

Stack Overflow用户
提问于 2013-05-17 03:00:15
回答 2查看 3.7K关注 0票数 4

问题

我试图通过解析一个BVH文件来获得它的特性。BVH文件通过NUICapture导出,这是一个通过Kinect捕捉身体运动的软件。

我所知道的所有BVH示例文件都在ZXY表示法中指定了欧拉角,而不是ZYX,但是NUICapture使用ZYX表示法导出BVH文件,所以我在解析它时遇到了问题。

背景

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

尝试解决方案

我遇到的所有现有解析器都将ZXY表示为事实上的标准,所有的论文也是如此。除了BVHhacker之外,我发现没有一个解析器能够解析NUICapture生成的BVH文件。但是BVHhacker没有可用的源代码,因此即使它似乎能够重放NUICapture捕获的动作,也无法访问由BVHhacker的解析器创建的内部表示。

我尝试使用开放源码的Python BVH解析器,比如BVHPlay,并尝试导入NUICapture的BVH文件,但是有一个文件输入错误,对于其他具有“正确”ZXY格式的样例BVH文件,不会出现这种错误。为了解决这个问题,我需要以某种方式纠正轴序列,但我不确定如何做到这一点而不影响原始身体运动的完整性。对我来说,仅仅手动切换顺序以允许解析BVH可能是相当天真的。

EN

回答 2

Stack Overflow用户

发布于 2013-06-11 03:11:12

参见本页底部: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。

票数 1
EN

Stack Overflow用户

发布于 2015-07-29 19:45:01

呃..。以正确的顺序应用旋转应该是非常简单的。ZXY是事实上的标准,但该规范明确支持任意顺序。

如果你使用3ds Max,我们以前写了一个猫的BVH解析器,你可以在"stdplugs\stdscripts\CATScripts\ImportBVH.ms".中找到它此脚本手动解析BVH文件,并支持各种euler顺序。我已经有10年没有看过它了,所以不能保证它的正确性;但是这个理论是相当直接的。

如果你没有使用Max,是的,你可以改变乘法的顺序。我不熟悉引用的python应用程序,但您所要做的就是

代码语言:javascript
复制
ZXY = rotMatrix(Z) * rotMatrix(X) * rotMatrix(Y)
ZYX = rotMatrix(Z) * rotMatrix(Y) * rotMatrix(X)

但是,您不能更改bvh文件中的值,因此您不能进入该文件并只移动这些值来获得ZXY顺序的旋转。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16595355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档