1

所以我几次遇到这个问题:

我的 3D 场景图中有一些对象,它是其他对象的子对象。让我们称它们为 c(子)和 p(父)。

c 的位置是相对于 p 定义的。因此 c 可能有一个位置 (1,0,0) 但当然,由于 p 有一些其他位置,比如 (1,2,3),它实际上并不是在我们世界的原始位置呈现,而是在 (2 ,2,3)。

现在让我们说由于某种原因我们想知道c在世界坐标中的绝对位置(或旋转,问题是一样的),这通常是怎么做的?

c 是否应该知道它的父级并能够查询该位置并将其添加到它自己的最终返回一个绝对位置?

4

2 回答 2

5

将孩子坐标系中的坐标转换为全局坐标系是实际渲染场景图所需的事情之一,所以这是一个合理的事情。

如何完成这将取决于您使用的图形库。通常,场景图中的每个节点都会包含一个矩阵,该矩阵将该节点的坐标系转换为全局坐标。该矩阵是通过将来自父节点的矩阵与从父坐标到子坐标的变换矩阵相乘来计算的,反之亦然,具体取决于事物的定义方式。

如果您有这样的矩阵,则可以通过将子坐标中的点乘以节点的矩阵来进行所需的计算。同样,这里的顺序很重要。

于 2008-12-08T23:14:52.743 回答
1

恕我直言,父对象更常见的是了解他们的孩子,而不是相反。哪个适合您取决于孩子是否需要知道自己的位置,或者是否需要知道它是否是其他一些外部树遍历算法。

另外,我认为旋转不能与平移一样处理。如果父对象旋转,它也会平移子对象的位置。因此,为什么大多数 3D 系统使用齐次坐标,这些坐标使用 (4x4) 变换矩阵,将旋转和平移结合在一个矩阵中。

于 2008-12-08T22:49:50.983 回答