2015-04-03 50 views
2

我不太确定我应该如何使用openGL进行移动。我将如何去在3D环境中移动,openGL C++

我应该在3D世界中移动相机的位置,还是移动/平移相机周围的物体?

我在网上看到相机应该停留在原点,其他所有东西都应该围绕相机移动,但是这不会是一种密集的操作吗?就像我有1000个对象并且正在移动一样,我们必须移动所有这些对象。移动相机并将世界物体保持在何处不是更容易?

回答

2

从概念上讲,OpenGL的工作方式是摄像机始终位于中心,Y轴向上,Z轴向前。如果你想移动或旋转摄像头,你实际上以相反的方式移动其他所有东西。

这与Direct3D相反,例如,您有一个单独的相机矩阵。

这是一个小细节,虽然从数学上讲它们是完全一样的。无论您前进还是后退,相同的最终结果都是如此。你甚至可以争辩说,只有一个矩阵而不是两个矩阵相乘并乘以它们是性能增益,但它非常小,通常你会将相机矩阵与世界建筑矩阵分开。

0

在Opengl中,相机始终位于眼睛空间坐标(0.,0,0,0)处。为了给移动摄像头的外观,你的OpenGL应用程序必须用相机转换的反转来移动场景。

您无需担心在场景中移动/翻译物体。 gluLookAt()函数为你做。该函数根据参数计算逆相机变换,并将其乘以当前矩阵堆栈。