实际上,它是关于坐标空间之间的转换。
好的,您了解您可以拥有一个进行平移或旋转的矩阵。(或缩放。或倾斜。等)您可以将这样的矩阵乘以一个点(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 位置。否则工作量太大。)
你会在机器人技术中看到很多这样的东西,它们可以为正向运动学提供一个很好的基本介绍。在机器人技术中,至少对于更简单的机器人来说,你有一个旋转的电机和一个可以平移的肢体长度。然后还有另一个马达。(相比之下,人的肩关节可以同时围绕所有三个轴旋转。)
您可以查看CMU 机器人操作课程 (15-384)的课程讲义。
也许像他们的Forward Kinematics Intro一样。