You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将世界空间位置转换为基于旋转的局部空间位置

如何将世界空间位置转换为基于旋转的局部空间位置

假设我们有一个世界空间中的点P,示意图如下:
笛卡尔空间中的点P

现在我想把这个点转换到另一个叫“L”的局部空间里。这个局部空间L由两个核心部分定义:

  • 它在世界空间中的中心点C
  • 由三个单位向量组成的旋转朝向R(也就是局部空间的三个坐标轴在世界空间中的方向)

接下来咱们一步步说怎么完成转换:

第一步:平移到局部空间原点

首先得把世界空间的点P,平移到以局部空间L的中心点C为原点的临时空间里,计算方式很简单:
P' = P - C
这一步就是把坐标系的原点从世界原点挪到C的位置,所以用P的坐标减去C的坐标就行,非常直观。

第二步:旋转到局部坐标系

接下来要把平移后的点P'转换到局部空间的坐标轴方向上。这里的旋转矩阵R是由局部空间三个坐标轴的世界空间单位向量组成的(通常是列向量形式),因为旋转矩阵是正交矩阵,它的转置就等于逆矩阵,所以我们用R的转置矩阵来乘P',就能得到局部空间中的位置L_P:
L_P = R^T * P'

举个小例子验证一下:如果局部空间L和世界空间完全重合,那C就是(0,0,0),R就是单位矩阵,转置后还是单位矩阵,算出来的L_P就等于P,完全符合咱们的预期。

另外提一句,要是你用的是Unity、Unreal这类3D引擎,其实不用手动算这些,引擎已经帮你封装好了现成的方法,比如Unity里的Transform.InverseTransformPoint(P),Unreal里的UKismetMathLibrary::InverseTransformLocation(LTransform, P),直接调用就能得到结果啦。

备注:内容来源于stack exchange,提问作者TheChamp

火山引擎 最新活动