UE5 三个欧拉角Picth、Yaw、Roll及FRotator

18 篇文章 176 订阅 ¥29.90 ¥99.00


前言

在游戏开发中,旋转是非常重要的操作。例如,我们可能需要将玩家角色绕Y轴旋转来实现转向、将摄像机绕X轴旋转来实现俯仰等。在UE5.2中,我们可以使用三个欧拉角Pitch、Yaw、Roll及FRotator来实现旋转。


一、三个欧拉角Picth、Yaw、Roll

UE 向开发者提供旋转物体的方式是三个欧拉角:Picth、Yaw、Roll。Pitch 是俯仰角、Yaw 是偏航角、Roll 是滚动角。通过这三个角就能控制物体的旋转,确定一个物体的朝向。

俯仰角Pitch

Picth 表示物体绕红色 X 轴(也就是方向朝前的那个轴)旋转的角度,范围为-90到90度。

偏航角Yaw

Yaw 表示物体绕绿色 Y 轴(也就是方向朝右的那个轴)旋转的角度,范围为-180到180度。

滚动角Roll

Roll 表示物体绕蓝色 Z 轴(也就是方向朝上的那个轴)旋转的角度,范围为-180到180度。

二、旋转类FRotator

FRotator 是 UE 用来封装三个欧拉角 Picth、Yaw、Roll 的类。开发者经常需要与 FRotator 打交道,就像需要和表示物体位置的 FVector 打交道一样。

FRotator 是三个欧拉角Picth、Yaw、Roll的封装类

FRotator 有三个成员变量:Picth、Yaw、Roll,正好是三个欧拉角。因此,我们可以说 FRotator 是封装三个欧拉角 Picth、Yaw、Roll 的类。FRotator类还提供了一些方便的函数,例如Add、GetForwardVector、GetRightVector等。使用这些函数可以方便地进行旋转操作。

我们可以使用以下代码创建一个FRotator对象:

FRotator Rotation(0.f, 45.f, 0.f);

上述代码表示创建一个绕Y轴旋转45度的FRotator对象。我们可以使用以下代码将一个Actor绕Y轴旋转45度:

Actor->SetActorRotation(Rotation);

除了SetActorRotation函数外,还有其他函数可以设置旋转。例如,我们可以使用以下代码将一个摄像机绕X轴旋转:

Camera->SetWorldRotation(FRotator(45.f, 0.f, 0.f));

上述代码表示创建一个绕X轴旋转45度的FRotator对象,并将摄像机的世界旋转设置为该FRotator对象。

FRotator 多用于对外接口,FQuat 多用于内部实现

在游戏引擎内部,通常使用四元数来表示旋转,因为四元数能轻易地串接旋转以及进行旋转插值。UE 也不例外。在 UE 内部,使用 FQuat 表示四元数,并用来进行旋转计算。但是四元数并不容易直观理解,在一点上不如欧拉角。为了平衡这一矛盾,UE 就多使用 FRotator 对外提供接口,而 FQuat 多用于实现 UE 内部的功能。换言之,游戏开发者多关注 FRotator,而引擎开发者更注重 FQuat。FRotator 与 FQuat 之间的关系,可以概括为 FRotator 多用于对外接口,FQuat 多用于内部实现,且二者之间可以相互转换。

使用FRotator类可以非常方便地进行旋转操作。例如,我们可以使用以下代码将一个Actor绕Y轴旋转90度:

FRotator Rotation(0.f, 90.f, 0.f);
Actor->SetActorRotation(Rotation);

除了使用FRotator类外,我们还可以使用旋转矩阵来进行旋转操作。在UE5.2中,我们可以使用FMatrix类来表示旋转矩阵。FMatrix 类包含一个3x3的矩阵,表示三个轴的旋转矩阵。

使用 FMatrix 类可以进行更加复杂的旋转操作。例如,我们可以使用以下代码将一个Actor绕任意轴旋转:

FVector Axis(1.f, 1.f, 0.f);
float Angle = 45.f;
FMatrix Rotation = FMatrix::MakeRotationAxis(Axis, FMath::DegreesToRadians(Angle));
Actor->SetActorTransform(FTransform(Rotation, Actor->GetActorLocation()));

在上面的代码中,我们使用FMatrix::MakeRotationAxis函数创建了一个绕任意轴旋转的矩阵,并将其应用到了Actor上。

总结

在UE5.2中,使用三个欧拉角Pitch、Yaw、Roll及FRotator可以非常方便地进行旋转操作。无论是实现玩家角色的转向、摄像机的俯仰还是其他旋转操作,都可以使用FRotator类轻松实现。我们可以使用FRotator类和FMatrix类来实现旋转操作。无论是简单的绕单个轴旋转,还是复杂的绕任意轴旋转,都可以通过这两个类来实现。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一碗情深

你的鼓励是我创作最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值