Unreal Engine 4:学习笔记(三)坐标变换相关API简要使用说明

 

FRotator (float pitch, float yaw, float roll)

Pitch     俯仰
Rotation around the right axis (around Y axis), Looking up and down (0=Straight Ahead, +Up, -Down)
    
Yaw     偏航
Rotation around the up axis (around Z axis), Running in circles 0=East, +North, -South.

Roll     翻滚
Rotation around the forward axis (around X axis), Tilting your head, 0=Straight, +Clockwise, -CCW.

 

FRotationMatrix中存放物体相对于世界坐标系的旋转角度信息

FRotationMatrix.GetScaledAxis(EAxis::X);

此函数的返回值为:在物体的局部坐标系中指向X轴的向量,当转换成世界坐标系后此向量的值为多少

下面是三个例子:
1.

FVector v1 = FRotationMatrix(FRotator(90, 0, 0)).GetScaledAxis(EAxis::X);
FVector v2 = FRotationMatrix(FRotator(90, 0, 0)).GetScaledAxis(EAxis::Y);
FVector v3 = FRotationMatrix(FRotator(90, 0, 0)).GetScaledAxis(EAxis::Z);
UE_LOG(LogTemp, Log, TEXT("v1: %s, v2: %s, v3: %s"),*v1.ToString(), *v2.ToString(), *v3.ToString());

输出结果:

LogTemp: v1: X=-0.000 Y=-0.000 Z=1.000, v2: X=0.000 Y=1.000 Z=0.000, v3: X=-1.000 Y=0.000 Z=-0.000

2.

FVector v1 = FRotationMatrix(FRotator(0, 90, 0)).GetScaledAxis(EAxis::X);
FVector v2 = FRotationMatrix(FRotator(0, 90, 0)).GetScaledAxis(EAxis::Y);
FVector v3 = FRotationMatrix(FRotator(0, 90, 0)).GetScaledAxis(EAxis::Z);
UE_LOG(LogTemp, Log, TEXT("v1: %s, v2: %s, v3: %s"),*v1.ToString(), *v2.ToString(), *v3.ToString());

输出结果:

LogTemp: v1: X=-0.000 Y=1.000 Z=0.000, v2: X=-1.000 Y=-0.000 Z=-0.000, v3: X=-0.000 Y=-0.000 Z=1.000

此处v1,v2中向量的方向与与设想的相反,是因为yaw轴的方向正好与世界坐标中的Z方向相反

3.

FVector v1 = FRotationMatrix(FRotator(0, 0, 90)).GetScaledAxis(EAxis::X);
FVector v2 = FRotationMatrix(FRotator(0, 0, 90)).GetScaledAxis(EAxis::Y);
FVector v3 = FRotationMatrix(FRotator(0, 0, 90)).GetScaledAxis(EAxis::Z);
UE_LOG(LogTemp, Log, TEXT("v1: %s, v2: %s, v3: %s"),*v1.ToString(), *v2.ToString(), *v3.ToString());

输出结果:

LogTemp: v1: X=1.000 Y=0.000 Z=0.000, v2: X=0.000 Y=-0.000 Z=-1.000, v3: X=-0.000 Y=1.000 Z=-0.000

 

顺便也说一下FTransform、FMath、FVector的部分用法:

1.

FTransform(CameraRotation).TransformVector(MuzzleOffset);  

将局部坐标系统中的向量值转化成世界坐标系中的向量值

2.

T FMath::Clamp(const T X, const T Min, const T Max) 

若X < Min, 则返回Min
若X > Max, 则返回Max

若X >= Min && X <= Max, 则返回X

3.

FVector FVector::GetClampedToMaxSize(float MaxSize)

创建一个新vector,方向与原vector相同,长度等于MaxSize

 4.

FVector FVector::GetClampedToSize(float Min,float Max) 

创建一个新vector,方向与原vector相同,长度等于:
若长度 < Min, 则新vector长度等于Min
若长度 > Max, 则新vector长度等于Max
若长度 >= Min && 长度 <= Max, 则新vector等于原vector


5.求两FVector之间的角度

float Angle = FMath::RadiansToDegrees(FMath::Acos(FVector::DotProduct(ForwardVector.GetClampedToSize(1, 1), FinalVector.GetClampedToSize(1, 1))));

 

参考文档:

pitch yaw roll是什么

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值