动作数据,DirectX左手坐标系到Vulkan右手坐标系转换

来自大佬的简易方法
https://www.zhihu.com/question/288528062/answer/463195686

有来自DirectX坐标系的动作数据,需要转换到OpenGL/Vulkan坐标系下。
遂研究一番。

不想看太多,就只想看转换公式的话,如下就是。

T:XYZ平移向量
R:WXYZ旋转四元数
S:XYZ缩放分量

DirectX原始数据设为
T:(x1, y1, z1)
R:(w2, x2, y2, z2)
S:(x3, y3, z3)

转换后得到OpenGL坐标系的数据为
T:(x1, y1, -z1)
R:(w2, -x2, -y2, z2)
S:(x3, y3, z3)

图像版

坐标系转换

文字版

T:XYZ平移向量

R:WXYZ旋转四元数

S:XYZ缩放分量

转换依据

即使是不同的坐标系,本质上还是NDC窗口坐标系为主,往右是X+,往上为Y+,往前为Z+。
转换后,观察到的新的结果在NDC窗口坐标系上与原来的结果在同一个NDC窗口坐标系上的一致,即可认为转换正确。

不同坐标系间的转换方法

1.平移分量或者平移坐标:

将老坐标系的空间中,画出老坐标系和新坐标系的轴向量,看老坐标系的轴对着新坐标系的哪个轴,把数值挪过去就行了,如果新轴跟老轴的反向的,再加个负号,把数值取反。例如老X轴对着新Z轴,方向还是反的,把[3, 0, 0]改成[0, 0, -3]就行了。左右手坐标系对这个没有影响

2.旋转四元数:

先按照平移向量那样对应调整四元数的X,Y,Z分量进行处理,然后如果新坐标系和老坐标系都是同手向的坐标系,那就结束了,如果是不同手的坐标系,那XYZ分量还要给他们加个负号。w分量始终不用改变

3.缩放分量

这个就更简单了,只需要把老轴的对应的数值挪到新轴的位置就行了,不用管方向,也不用管它的手性。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值