You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UE5.1中静态网格体Actor与独立组件间变换矩阵获取方案

获取Actor局部空间到Component局部空间的变换矩阵

需求说明

  • 目标:生成4×4变换矩阵,实现StaticMesh Actor局部空间到无关StaticMeshComponent局部空间的坐标转换,用于自定义HLSL计算着色器中完成位置空间转换。
  • 已获取的变换数据:通过actor->GetActorTransform()获取Actor的变换信息,通过component->GetComponentTransform()获取目标StaticMeshComponent的变换信息。
  • 已知方法的局限:尝试过FTransform的GetMatrixWithScale()、GetMatrixWithNoScale()函数,以及GetRelativeTransform()、GetRelativeTransformReversed()函数,但这些方法在对象同时存在非均匀缩放和旋转时无法正常工作。

自行实现的代码

FMatrix44d makeWorldToLocalTransformMatrix(const FTransform& transform) {
    auto L2WTranslation = makeTranslationMatrix(transform.GetTranslation()).InverseFast(); // 已反转
    auto L2WRotation = transform.GetRotation().ToMatrix(); // 未反转
    auto L2WScale = makeScaleMatrix(transform.GetScale3D()).InverseFast(); // 已反转
    return L2WScale * L2WRotation * L2WTranslation;
}


FMatrix44d makeLocalToWorldTransformMatrix(const FTransform& transform) {
    auto L2WTranslation = makeTranslationMatrix(transform.GetTranslation()); // 未反转
    auto L2WRotation = transform.GetRotation().ToMatrix().InverseFast(); // 已反转
    auto L2WScale = makeScaleMatrix(transform.GetScale3D()); // 未反转
    return L2WTranslation * L2WRotation * L2WScale;
}

FMatrix44d getLocalToLocalTransformMatrix(const FTransform& actor, const FTransform& component) {
    auto actorTransformMatrix = makeLocalToWorldTransformMatrix(actor);
    auto componentTransformMatrix = makeWorldToLocalTransformMatrix(component);
    return componentTransformMatrix * actorTransformMatrix;
}

当前问题与期望

上述自行实现的代码效率不足,希望能使用UE的内置函数来完成相同功能。

着色器中矩阵的使用方式

float4x4 TransformMatrix = ...;
float4 PositionToTransform = float4(..., 1)
float4 result = mul(TransformMatrix, PositionToTransform);

寻求的解决方向

希望找到以下两种情况之一的解决方案:

  1. UE内置的可直接实现该空间转换功能的函数
  2. 其他未被知晓的高效实现方法

内容的提问来源于stack exchange,提问作者dast99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 20:15:24