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

文章目录

  • 前言
  • 一、三个欧拉角Picth、Yaw、Roll
    • 俯仰角Pitch
    • 偏航角Yaw
    • 滚动角Roll
  • 二、旋转类FRotator
    • FRotator 是三个欧拉角Picth、Yaw、Roll的封装类
    • FRotator 多用于对外接口,FQuat 多用于内部实现
  • 总结


前言

在游戏开发中,旋转是非常重要的操作。例如,我们可能需要将玩家角色绕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类来实现旋转操作。无论是简单的绕单个轴旋转,还是复杂的绕任意轴旋转,都可以通过这两个类来实现。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部