所以我遇到过几次这个问题:
我的 3D 场景图中有一些对象,它是其他对象的子对象。让我们称它们为 c (Child) 和 p (Parent)。
c 的位置是相对于 p 定义的。因此 c 可能有一个位置 (1,0,0) 但当然,由于 p 有一些其他位置,比如 (1,2,3),它实际上不是在我们世界的原始位置渲染的,而是在 (2 ,2,3)。
现在让我们说出于某种原因我们想知道 c 在世界坐标中的绝对位置(或旋转,问题是一样的),这通常是如何完成的?
c 是否应该知道它的父级并能够查询该位置并将其添加到它自己的位置,最终返回一个绝对位置?
将子坐标系中的坐标转换为全局坐标系是实际渲染场景图所需的事情之一,因此这是一个合理的需求。
您如何完成此操作取决于您使用的图形库。通常场景图中的每个节点都会包含一个矩阵,该矩阵将该节点的坐标系转换为全局坐标。这个矩阵是通过将来自父节点的矩阵乘以从父节点坐标到子坐标的变换矩阵来计算的,反之亦然,这取决于事物的定义方式。
如果您有这样的矩阵,您可以通过将子坐标中的点乘以节点的矩阵来进行所需的计算。再次,顺序在这里很重要。