2009-02-01 79 views
1

好的,所以 - 这与我以前的问题Transforming an object between two coordinate spaces有很大关系,但是更直接,它应该有一个明显的答案。跟踪一个对象的局部坐标空间

一个对象的局部坐标空间,我该如何“抓住它”?假设我将Orc加载到我的游戏中,我如何通过编程方式知道它的头部,左臂,右臂和原点(肚脐?)是?当我知道它在哪里时,我需要手动保存还是在DirectX API中奇迹般地存在?在我的另一个问题中,有人说过一些关于存储X,Y,Z方向和起点的顶点?我如何找到这些顶点?我是否可以随意挑选它们,将它们分配到模型中,然后将其加载到我的游戏中?等

这不是坐标空间之间转换

回答

4

其实,这是坐标空间约转化。

好吧,你明白你可以有一个矩阵,做翻译或旋转。 (或缩放或偏斜等)您可以将这样的矩阵乘以点(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