我将如何在3D环境中移动,OpenGL C++

How would I go about moving in a 3D environment, openGL c++

我不太确定应该如何使用OpenGL让事情发生变化。

我应该在3D世界中移动相机的位置,还是在相机周围移动/翻译对象?

我在网上看到,相机应该保持在原点,其他一切都应该在相机周围移动,但这不是一个密集的操作吗?就像如果我有1000个物体,并且我在移动,我们必须移动所有这些物体。移动相机并将世界上的物体保持在原来的位置不是很容易吗?


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

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

不过,这只是一个小细节,因为从数学上讲,它们是完全相同的。不管你是向前移动还是向后移动,最终结果都是一样的。你甚至可以说只有一个矩阵,而不是拖拽两个矩阵并将它们相乘,这是一个性能提升,但这是非常小的,而且通常你会把你的相机矩阵和你的世界构建矩阵分开。


在OpenGL中,相机始终位于眼空间坐标(0、0、0)。若要显示移动摄影机的外观,OpenGL应用程序必须使用与摄影机转换相反的方式移动场景。

您不必担心在场景中移动/翻译对象。gluLookAt()函数为您提供。此函数根据参数计算逆相机变换,并将其乘以当前矩阵堆栈。