ue5.1.1骨骼世界坐标转换为本地坐标
时间: 2023-08-09 14:10:14 浏览: 308
在UE5.1.1中,要将骨骼的世界坐标转换为本地坐标,可以使用以下步骤:
1. 获取骨骼在世界坐标系中的变换矩阵。这可以使用USkeletalMeshComponent的GetSocketTransform函数来实现,例如:
```
USkeletalMeshComponent* SkeletalMeshComponent = ...; // 骨骼所在的SkeletalMeshComponent
FName BoneName = ...; // 骨骼名称
FTransform WorldTransform = SkeletalMeshComponent->GetSocketTransform(BoneName);
```
这将返回骨骼在世界坐标系中的变换矩阵。
2. 获取骨骼父骨骼在世界坐标系中的变换矩阵。这可以使用USkeletalMeshComponent的GetSocketTransform函数再次获取父骨骼的变换矩阵,例如:
```
FName ParentBoneName = ...; // 父骨骼名称
FTransform ParentWorldTransform = SkeletalMeshComponent->GetSocketTransform(ParentBoneName);
```
这将返回父骨骼在世界坐标系中的变换矩阵。
3. 计算骨骼在本地坐标系中的变换矩阵。这可以通过将骨骼在世界坐标系中的变换矩阵与父骨骼在世界坐标系中的变换矩阵相乘并求逆来实现,例如:
```
FTransform LocalTransform = WorldTransform * ParentWorldTransform.Inverse();
```
这将返回骨骼在本地坐标系中的变换矩阵。
4. 获取本地变换矩阵中的旋转、平移和缩放分量。这可以使用FTransform的GetRotation、GetTranslation和GetScale3D函数来实现,例如:
```
FQuat Rotation = LocalTransform.GetRotation();
FVector Translation = LocalTransform.GetTranslation();
FVector Scale = LocalTransform.GetScale3D();
```
这将分别返回骨骼在本地坐标系中的旋转、平移和缩放分量。
最终得到的Rotation、Translation和Scale就是骨骼在本地坐标系中的旋转、平移和缩放分量。需要注意的是,如果骨骼有多个父骨骼,则需要将所有父骨骼的变换矩阵相乘并求逆才能得到骨骼在本地坐标系中的变换矩阵。
阅读全文