3d 从场景图内部获取绝对位置和旋转?

3d 从场景图内部获取绝对位置和旋转?,3d,scenegraph,3d,Scenegraph,因此,我多次遇到这个问题: 我的3D场景图中有一个对象,它是其他对象的子对象。让我们称它们为c子级和p父级 c的位置是相对于p定义的。因此,c可能有一个位置1,0,0,但当然,由于p有一些其他位置,比如1,2,3,它实际上不是在我们的原始世界中呈现的,而是在2,2,3 现在让我们说,出于某种原因,我们想知道c在世界坐标系或旋转中的绝对位置,问题是一样的,这通常是如何做到的 c是否应该知道它的父对象,并且能够查询该位置并将其添加到自己的位置,最终返回一个绝对位置?IMHO,父对象通常知道它们的子对

因此,我多次遇到这个问题:

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

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

现在让我们说,出于某种原因,我们想知道c在世界坐标系或旋转中的绝对位置,问题是一样的,这通常是如何做到的


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

IMHO,父对象通常知道它们的子对象,而不是相反。这对您来说是正确的,这取决于孩子是否需要知道自己的位置,或者是其他外部树遍历算法需要知道它


另外,我不认为旋转可以像平移一样处理。如果父对象旋转,它也会平移子对象的位置。因此,大多数3D系统使用同质坐标,使用4x4变换矩阵,将旋转和平移组合在一个矩阵中。

IMHO,父对象了解其子对象的情况比其他方式更常见。这对您来说是正确的,这取决于孩子是否需要知道自己的位置,或者是其他外部树遍历算法需要知道它


另外,我不认为旋转可以像平移一样处理。如果父对象旋转,它也会平移子对象的位置。因此,大多数3D系统使用同质坐标,该坐标使用4x4变换矩阵,将旋转和平移组合在一个矩阵中。

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

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


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

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

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

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