unity3d - 在 Unity 和原始装备中查找骨骼旋转之间的偏移量
问题描述
目标:
计算可用于校正骨骼变换的旋转,以便在手动旋转时按预期旋转。
详细说明:
角色的骨骼变换未正确导入 Unity,即。左手的Z轴不是看向手的顶部,而是向后看,而右手的Z轴是向前看。
如果您之前在另一个应用程序中看到过该装备,则骨骼默认旋转与您所期望的不同。
我想创建一个类,将角色置于 T-Pose 中,然后映射骨骼旋转。(我会假设 Unity 在幕后做了类似的事情,这就是我的想法。)所以这个类将与这样的 API 一起使用:
/// This should return the rotation, where the bone pointing forward rotated by rotation.
/// Ie. when rotation = Quaternion.Identity the left hand should look forward.
Quaternion CorrectRotation(HumanBodyBones bone, Quaternion rotation)
{
return Quaternion.Inverse(tPoseRotations[bone]) * rotation;
}
问题是,我似乎找不到映射这些旋转的好方法。
我最后一次尝试是这样的:
Vector3 boneDirection = (boneTransform.position - parentTransform.position).normalized;
Quaternion mappedRotation = Quaternion.LookRotation(boneDirection, parentTransform.up);
正如您在这张图片中看到的那样,使用这种方法,双手朝相同的方向向前看,但仍未正确旋转,它们与所需结果有偏差。(正确的旋转由紫色指针表示。)
当给定其他旋转时,指针以相同的偏移量跟随,所以除了这个不需要的偏移量之外,它们可以正常工作。
所以基本上,我会寻求任何帮助来解决我的问题,无论是通过这种方式,还是使用适用于不同钻机的不同解决方案。
解决方案
推荐阅读
- php - 谷歌分析 API 按会话获取单个访问者的数据
- arduino - 在 FreeRTOS 中使用信号量
- maven - 问:我可以从 Maven 插件触发 Jenkins 作业吗?
- android - Facebook auth with firebase 获取用户数据
- python - 计算字符串列之间的相关性
- xamarin - Plugin.Media 的 CompressionQuality 在 iOS 上不起作用
- ios - 外置硬盘上的 Cocoapods
- java - Android 元素视图
- javascript - 在反应传单多边形(圆形)上捕获双击事件
- svn - 在 SVN 中重命名文件名(子版本)