我正在尝试通过kinect创建一个.bvh文件.
这意味着需要获得骨架的每个骨骼的旋转.我需要欧拉角度的旋转.我已经尝试了很多不同的方法,但其中任何一个都给了我很好的结果.谁能给我一些建议我做错了什么?
这是(我认为)我的代码的主要部分.
foreach (Skeleton skeleton in newSkeleton) { if (skeleton.TrackingState != SkeletonTrackingState.Tracked) continue; int j = 0; foreach (BoneOrientation orientation in skeleton.BoneOrientations) { Matrix4 matrix = orientation.HierarchicalRotation.Matrix; double y = Math.Asin(matrix.M13); double x = Math.atan2(-matrix.M23,matrix.M33); double z = Math.atan2(-matrix.M12,matrix.M11); rotationMatrix[j,0] = x * 180 / Math.PI; rotationMatrix[j,1] = y * 180 / Math.PI; rotationMatrix[j,2] = z * 180 / Math.PI; j++; } }
我的euler角度应该存储在rotationMatrix数组中以供进一步使用(保存到bvh文件中).这就是我的问题……以这种方式计算的旋转没有意义(我的意思是它们与我在kinect之前的位置无关)并且它们似乎是随机的.
编辑:
我还需要解释一些关于kinect的不明确的话题.我试图谷歌它,但没有成功.
> kinect骨架是否有零姿势?我指的是所有骨骼旋转为零的任何姿势. (例如T-pose等)
> kinect使用什么样的标准?我的意思是kinect如何将数据存储到旋转矩阵中?我想知道矩阵是否像
[X1,Y1,Z1,
X2,Y2,Z2,
X3,Y3,Z3]
还是使用其他订单?
>关于marices ..是否可以从标准方式kinect给出的矩阵计算欧拉角?我的意思是本文中提到的一些算法?
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。