从场景图中获取绝对位置和旋转?

时间:2008-12-08 22:35:33

标签: 3d scenegraph

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

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

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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

如果您有这样的矩阵,您可以通过将子坐标中的点乘以节点的矩阵来进行所需的计算。再次,订单在这里很重要。

答案 1 :(得分:1)

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

另外,我不认为轮换可以像翻译一样处理。如果父对象被旋转,它还将翻译子对象的位置。因此,为什么大多数3D系统使用同质坐标,这些坐标使用(4x4)变换矩阵,它将旋转和平移结合在一个矩阵中。