0

我有以下问题。我有一个带有lookAt方法的相机,它工作正常。我有一个父节点,我将相机作为父节点。如果我在保持相机lookAt目标的同时旋转父节点,相机lookAt也会改变。那也不是我想要实现的。我需要它像在 Adob​​e AE 中一样工作,当您将相机设置为空对象时:当空对象旋转时,相机开始围绕目标旋转,同时仍然看着目标。我目前所做的是将父模型矩阵与从lookAt()方法计算的相机模型矩阵相乘。我确定在将它们相乘之前我需要分解(或重构)其中一个矩阵。父模型或相机模型?这里的任何人都可以展示正确的方法吗?

更新:父级只是一个节点。子级是相机。AfterEffects 中的父级相机的工作方式如下:如果在相机看着目标时旋转父节点,相机实际上会根据父级旋转开始围绕目标旋转.在我的情况下,父旋转也改变了相机的lookAt方向,这不是我想要的。希望现在很清楚。UPDATE1:我使用 GL 4.0 ,没有固定的管道,我所有的数学都是手动完成的。

4

2 回答 2

0

OpenGL 不是场景图;没有物体,没有相机!gluLookAt 甚至不是 OpenGL,它只是一个辅助函数,它不知道应用了任何转换层次结构。由于 OpenGL 不处理场景和 glPushMatrix,glPopMatrix 给人一种更大的错误感觉,您可能被引诱以错误的方式思考它。

做所有你期望的数学是你的责任。这是你要做的:

  1. 您不应再使用 OpenGL 固定函数矩阵操作方法。它们已被弃用,并已从更高版本的 OpenGL 中删除!

  2. 实现功能齐全的场景图。为此使用功能完整的矩阵数学库。最重要的是,您需要一种方法来确定转换层次结构树中任意两个节点之间的转换(矩阵)。最直接的方法是从起始节点和目标节点开始进行右关联乘法,同时遍历到顶部,直到到达共享祖先节点。然后,将反转的目标节点变换组合与起始节点的变换组合相乘。结果就是他们之间的转变。

既然您可以确定节点之间的转换,您就拥有了在该转换定义的空间内正确查看操作的工具。

于 2012-11-14T10:18:37.997 回答
0

实际的问题是视图和模型矩阵的状态。在其位置向量已经被否定后,我错误地反转了视图矩阵。所以正确的做法是将父节点模型矩阵与相机视图矩阵相乘,这样就解决了问题。

于 2012-12-13T08:44:35.817 回答