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

如何求取映射两组点的变换矩阵?实现动画本地到世界空间适配

局部空间动画映射到世界空间目标点的变换矩阵方案

要把局部空间中从ptA到ptB的动画,转换成世界空间中从ptAA到ptBB的播放效果,核心是构建一个仿射变换矩阵,将动画的所有局部空间点映射到对应的世界空间位置,同时保留动画的相对运动逻辑。

核心映射逻辑

动画中任意局部空间点P(t)(t为动画进度,0≤t≤1),满足P(0)=ptA、P(1)=ptB。我们需要让变换后的世界空间点P'(t)满足P'(0)=ptAA、P'(1)=ptBB,映射公式为:

P' = ptAA + (P - ptA) * (ptBB - ptAA) / (ptB - ptA)

其中/为向量分量级的除法(仅当ptB ≠ ptA时有效)。这个公式的本质是:先将局部空间的原点对齐到ptA,把动画的相对位移P-ptA按目标位移与原始位移的比例缩放,再平移到世界空间的起始点ptAA。

转换为齐次坐标变换矩阵

在3D图形系统中,常用齐次坐标表示变换矩阵。假设是3D空间,变换矩阵T的构造步骤如下:

  1. 构建线性缩放矩阵M:
    矩阵M是对角矩阵,每个对角元素对应坐标轴上的缩放比例:
    M = [ (ptBB.x - ptAA.x)/(ptB.x - ptA.x)   0   0   0 ]
        [ 0   (ptBB.y - ptAA.y)/(ptB.y - ptA.y)   0   0 ]
        [ 0   0   (ptBB.z - ptAA.z)/(ptB.z - ptA.z)   0 ]
        [ 0   0   0   1 ]
    
    如果原始动画在某坐标轴上无位移(比如ptB.x=ptA.x),则对应缩放比例设为1,避免除零错误。
  2. 计算平移分量:
    平移向量为ptAA - M * ptA(这里M * ptA是矩阵对局部点ptA的线性变换结果)。
  3. 拼接完整变换矩阵T:
    将线性矩阵M和平移向量组合成齐次变换矩阵:
    T = [ M[0][0]  M[0][1]  M[0][2]  (ptAA.x - M*ptA).x ]
        [ M[1][0]  M[1][1]  M[1][2]  (ptAA.y - M*ptA).y ]
        [ M[2][0]  M[2][1]  M[2][2]  (ptAA.z - M*ptA).z ]
        [ 0        0        0        1 ]
    

特殊情况处理

  • 如果ptA == ptB(原始动画无位移):直接将实体的世界位置设为ptAA即可,无需变换矩阵。
  • 如果需要保留动画的局部朝向:若原始动画包含旋转,需额外添加旋转对齐逻辑——将局部空间的朝向映射到世界空间的目标朝向(比如通过四元数插值计算旋转矩阵),再与上述位置变换矩阵相乘。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:35:22