我该如何在三维环境中移动,openGL c++

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

本文关键字:移动 openGL c++ 环境 三维      更新时间:2023-10-16

我不太确定应该如何使用openGL来推动事情的发展。

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

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

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

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

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

在Opengl中,相机始终位于眼睛空间坐标(0.,0.,0.)处。要呈现移动相机的外观,Opengl应用程序必须使用相机变换的逆方向移动场景。

您不需要担心在场景中移动/平移对象。gluLookAt()函数为您执行此操作。此函数根据参数计算相机逆变换,并将其乘以当前矩阵堆栈。