2008-12-08 73 views
1

所以我碰到几次这个问题:从场景图中获取绝对位置和旋转?

我有一些对象在我的3D场景图是一些其他对象的孩子。让我们称他们为c(小孩)和p(父母)。

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

现在让我们说由于某种原因,我们想了解C在世界坐标绝对位置(或旋转,问题是一样的),这是怎么做到普遍?

应该Ç知道它的父,并能够查询该位置,并将其添加到它自己的最后返回的绝对位置?

回答

4

将儿童坐标系中的坐标转换为全局坐标系是实际渲染场景图所需的一件事情,所以这是一个合理的想要的事情。

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

如果你有这样一个矩阵,你可以做你想做的复接孩子中的点坐标的计算由节点的矩阵。再次,顺序在这里很重要。

1

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

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