python - 镜像 Mocap 角色动画(骨骼 .bvh)
问题描述
我正在尝试使用 python 代码沿 world-yz 平面镜像 CMU 动作捕捉数据集(.bvh 格式)。
我已经解析了它们并将欧拉角表示转换为四元数表示。
我通过否定 y 和 z 分量找到了镜像的一些答案。qx qy qz qw -> qx -qy -qz qw
但是,这似乎不适用于骨骼动画的所有关节。
我检查了上面的镜像是否适用于 unity3d 引擎中的单个对象旋转。
我用于镜像的步骤与以下相同, 1. 交换左关节局部旋转和右关节局部旋转 2. 对所有关节旋转取反 qy 和 qz 3. 取根轨迹的 x
def mirror_sequence(sequence):
mirrored_rotations = sequence[:, 1:, :]
mirrored_trajectory = np.expand_dims(sequence[:, 0, :], axis=1)
temp = mirrored_rotations
# Flip left/right joints
mirrored_rotations[:, joints_left] = temp[:, joints_right]
mirrored_rotations[:, joints_right] = temp[:, joints_left]
mirrored_rotations[:, :, [1, 2]] *= -1
mirrored_trajectory[:, :, 0] *= -1
mirrored_sequence = np.concatenate((mirrored_trajectory, mirrored_rotations), axis=1)
return mirrored_sequence
我的目标是制作一个动画,其骨盆轨迹沿 world-yz 平面镜像,左/右关节动画交换。
谢谢您的帮助!
解决方案
答案很简单……
temp = mirrored_rotations
我曾经用 C# 编写代码,并认为和处理 temp 不会改变
mirrored_rotations 中的值...
temp = mirrored_rotations.copy() 效果很好。
推荐阅读
- mysql - 如何从 AWS 的快照或实例中提取数据?
- ssh - 如何在非谷歌提供的图像上使用 GCP OS 登录功能
- java - 如何使用opencsv在csv中添加动态列和值
- excel - 在 Mac 中的 Microsoft Excel 中更改电子表格中活动单元格的颜色和/或宽度
- jenkins - 詹金斯:触发新工作后如何清理临时文件夹?
- azure - Azure Blob 容器 ResourceNotFound 错误
- python - 加快匹配字符串python
- c# - AutoMapper 不更新嵌套集合
- javascript - 从数组创建对象数组
- python-3.x - 如何在python的不同类中使用另一个类方法值?