UE C++获取某个旋转状态(欧拉角表示)下的三个方向向量的方法

比如在C++第三人称游戏模板中角色C++类的向前移动函数中,获取控制器的当前旋转状态,并获取这个旋转状态下的向前的方向向量:

// 获取控制器在绕z轴的旋转即yaw
const FRotator YawRotation(0.f, Controller->GetControlRotation().Yaw, 0.f);

// 先根据欧拉角表示的旋转向量 构造旋转矩阵,再通过矩阵获取X轴的方向向量(即正前方)
const FVector Direction(FRotationMatrix(YarRotation).GetUnitAxis(EAxis::X));

为啥能够通过旋转矩阵获取控制器在世界空间中的当前旋转下的三个方位(ForwardUpRight)的方向向量呢?

一个旋转矩阵 R 可以表示为:

 	 | r11 r12 r13 |
R =  | r21 r22 r23 |
     | r31 r32 r33 |

其中,每一列实际上代表了旋转后的坐标轴在原始坐标系中的方向向量。具体来说:

  • 第一列 r11, r21, r31 表示旋转后的 X 轴在原始坐标系中的方向。
  • 第二列 r12, r22, r32 表示旋转后的 Y 轴在原始坐标系中的方向。
  • 第三列 r13, r23, r33 表示旋转后的 Z 轴在原始坐标系中的方向。

当想要获取某个轴(比如 X 轴)的方向向量时,可以直接从旋转矩阵中提取对应的列。例如,要获取 X 轴的方向向量,可以使用:

XDirection = FVector(r11, r21, r31) 

在虚幻引擎中,FRotationMatrix 类提供了这个接口:

R.GetUnitAxis(EAxis::X);

数学上,这些向量是通过旋转矩阵与原始坐标轴向量相乘得到的。例如,局部空间中的x轴向量是 (1, 0, 0),则旋转后的 x 轴向量(世界空间中的)可以通过以下矩阵乘法得到:

| r11 r12 r13 |   | 1 |   | r11 |
| r21 r22 r23 | x | 0 | = | r21 |
| r31 r32 r33 |   | 0 |   | r31 |

同样的方法可以用于 y 轴和 z 轴。

实际上这个旋转矩阵乘以(1,0,0)可以直接理解成,对局部空间的x轴应用矩阵R,从而得到了将(1,0,0)变换到世界空间之后的结果。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宗浩多捞

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值