【问题标题】:Keeping track of an objects local coordinate space跟踪对象局部坐标空间
【发布时间】:2009-02-01 07:25:41
【问题描述】:

好的,所以 - 这与我之前的问题 Transforming an object between two coordinate spaces 密切相关,但更直接,应该有一个明显的答案。

一个物体的局部坐标空间,我如何“抓住它”?假设我将一个兽人加载到我的游戏中,我如何以编程方式知道它的头部、左臂、右臂和原点(肚脐?)在哪里?当我知道它在哪里时,我需要手动保存它,还是它神奇地存在于 DirectX API 中?在我的另一个问题中,有人说过要为 X、Y、Z 方向和原点存储顶点?我如何找到这些顶点?我是否随意选择它们,在将它们加载到我的游戏之前将它们分配到模型中?等等

这不是坐标空间之间的转换

【问题讨论】:

    标签: c++ math 3d vector directx


    【解决方案1】:

    其实就是坐标空间之间的变换

    好的,您知道您可以拥有一个执行平移或旋转的矩阵。 (或缩放。或倾斜。等)您可以将这样的矩阵乘以一个点(V)以获得新的(平移/旋转/等)点。例如:

    Mtranlate = [ 1 0 0 Tx ]   *  V = [ Vx ]   =   [ Vx + Tx ]
                [ 0 1 0 Ty ]          [ Vy ]       [ Vy + Ty ]
                [ 0 0 1 Tz ]          [ Vz ]       [ Vz + Tz ]
                [ 0 0 0 1  ]          [  1 ]       [  1      ]
    

    或者绕X/Y/Z轴旋转:

    Mrotate_x = [ 1  0     0    0 ]  * V =  [ Vx ]   =   [ Vx              ]
                [ 0 cos  -sin   0 ]         [ Vy ]       [ Vy*cos - Vz*sin ]
                [ 0 sin   cos   0 ]         [ Vz ]       [ Vy*sin + Vz*cos ]
                [ 0  0     0    1 ]         [  1 ]       [  1              ]
    

    您可以通过将矩阵相乘来组合多个操作。
    例如:Mnew = Mtranslate * Mrotate_x。
    (是的,顺序很重要!)

    因此,给定一个真实世界的基地原点,您可以转换为您(已知/提供的)兽人的 xy 位置,从该点的地形推断出您的兽人脚的 z 位置并转换为该位置。现在你的兽人的“脚”在全局坐标中。从那里,你可能想要旋转你的兽人,让他面向一个特定的方向。

    然后向上平移(根据你的兽人模型)找到它的脖子。从颈部,我们可以向上平移(也可能旋转)以找到它的头部或向上平移以找到它的肩膀。从肩部,我们可以旋转和平移来找到肘部。从肘部我们可以旋转和平移来找到手。

    你的兽人模型的每个组件都有一个本地参考框架。每个都与通过一个或多个变换(矩阵)附加的参考帧相关。通过乘以所有局部矩阵(变换),我们最终可以看到如何从兽人的脚到他的手。

    (请注意,我会为兽人制作动画,然后只使用他的脚 x、y、z 位置。否则工作量太大。)

    您会在机器人技术中看到很多这类东西,它们可以很好地介绍正向运动学。在机器人技术中,至少对于更简单的机器人,你有一个旋转的电机,以及一个可以平移的肢体长度。然后还有另一个电机。 (相比之下,人的肩关节可以同时围绕所有三个轴旋转。)

    你可以look over the course HANDOUTS for CMU's Robotic Manipulation class (15-384).

    可能类似于他们的Forward Kinematics Intro

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2019-04-08
      • 2014-12-22
      • 2010-10-04
      相关资源
      最近更新 更多