FRotationMatrix中存放物体相对于世界坐标系的旋转角度信息
下面是三个例子:
1.
若X > Max, 则返回Max
若长度 < Min, 则新vector长度等于Min
若长度 > Max, 则新vector长度等于Max
若长度 >= Min && 长度 <= Max, 则新vector等于原vector
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