我有以下问题。我有一个带有lookAt方法的摄像头工作正常。我有一个父节点,我父摄像机。如果我旋转父节点同时保持摄像头看起来是目标,相机看起来改变当我将相机发送到空对象时,我需要它像Adobe AE一样工作:当空对象旋转时,相机开始围绕目标进行轨道运行,同时仍然看着目标。我是什么目前正在将父模型矩阵与相机模型矩阵相乘,后者是通过lookAt()方法计算得出的。我确定在将它们相乘之前需要分解(或重构)其中一个矩阵.Parent模型或相机模型?这里的任何人都能以正确的方式表现出来吗?
更新:父母只是一个节点。孩子是相机.HostEffects中的父级相机的工作方式如下:如果在相机查看目标时旋转父节点,相机实际上会开始围绕目标进行轨道运行在我的情况下,父旋转也改变了Camera的lookAt方向,这不是我想要的。现在很清楚。 UPDATE1: 我使用GL 4.0,没有固定的管道,我的所有数学都是手动完成的。
答案 0 :(得分:0)
OpenGL不是场景图;没有对象,没有摄像头! gluLookAt甚至不是OpenGL,它只是一个辅助函数,并且它没有意识到应用任何变换层次结构。由于OpenGL不处理场景和glPushMatrix,glPopMatrix给人一种虚假的感觉,你可能会被错误地思考它。
你的责任,做你期望的所有数学。这是你做的:
您不应再使用OpenGL固定函数矩阵操作方法。它们已被弃用,已从更高版本的OpenGL中删除!
实现功能齐全的场景图。为此使用特征完整矩阵数学库。最重要的是,您需要一种方法来确定转换层次树中任意两个节点之间的转换(矩阵)。最直接的方法是从起始节点和目标节点在遍历到顶部时进行右关联乘法,直到达到共享祖先节点。然后,将起始节点上的转换合成中的反转目标节点转换合成相乘。结果是它们之间的转换。
现在您可以确定节点之间的转换,您可以使用该工具在该转换定义的空间内正确查看操作。
答案 1 :(得分:0)
实际问题是视图和模型矩阵状态。我的位置向量已经被否定后错误地反转了视图矩阵。所以正确的事情就是将父节点模型矩阵与摄像机视图矩阵相乘并解决问题。 / p>