Unity坐标转换

1.前言

本文从基本的坐标系转化(即均为左手或者右手)开始,后续给出左右手坐标系转化的方法,参考众多文章,只贴结论和方法,细节参考后续的参考文献。

2.坐标转化

2.1 普通转化

在同一坐标系的转化比较简单,但是为了方便计算通常会采用RT矩阵进行计算,类似与渲染中的仿射变换。计算公式如下:
请添加图片描述如果知道ΔR和ΔT,就比较容易计算,根据一点在不同坐标系下的数值可以如下方案计算ΔR和ΔT:

    public static Pose ComputeDeltaPose(Pose localPose,Pose cloudPose)
    {
        Vector3 localPosition = localPose.position;
        Quaternion localRotation = Quaternion.Normalize(localPose.rotation);

        Vector3 cloudPosition = cloudPose.position;
        Quaternion cloudRotation = Quaternion.Normalize(cloudPose.rotation);

        Quaternion deltaRotation = localRotation * Quaternion.Inverse(cloudRotation);
        Vector3 deltaPosition = localPosition - deltaRotation * cloudPosition;

        return new Pose(deltaPosition, deltaRotation);
    }

也可以采用unity的matrix4X4直接求出ΔRT矩阵。

2.2 左右手坐标系转化

左右手坐标系转化比较简单,一般只需要某一个轴反向即可,在unity将z轴取反即可,即位置x,y不变,z值取反。旋转值(四元数),w和z值不变,x,y取反。
总结如下:
哪个轴反转,坐标位置对应的那个轴数值取反,旋转则w值和对应那个轴不变,其他取反。

3.结语

U3d在与一些算法打交道时,尤其在做mr设备时,经常遇到坐标转化问题,可以在转到相同手系坐标后在进行相关的切换。
参考文献:
文献一
文献二
文献三

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值