我将如何在 3D 环境中移动,openGL c++
How would I go about moving in a 3D environment, openGL c++
我不太确定我应该如何使用 openGL 让事物移动。
我应该在 3D 世界中移动相机的位置,还是 moving/translating 相机周围的物体?
我在网上看到相机应该保持在原点,其他一切都应该围绕相机移动,但这不是一个密集的操作吗?就像我有 1000 个物体并且我正在移动,我们必须移动所有这些物体。移动相机并将世界对象保持在原处不是更容易吗?
从概念上讲,OpenGL 的工作方式是相机始终位于中心,Y 轴在上,Z 轴在前。如果你想移动或旋转相机,你实际上会以相反的方式移动其他所有东西。
这与 Direct3D 相反,例如,您有一个单独的相机矩阵。
虽然这是一个次要细节,因为从数学上讲它们完全相同。无论您将所有东西向前移动还是将相机向后移动,最终结果都完全相同。你甚至可以争辩说,只有一个矩阵而不是拖着两个矩阵相乘是一种性能提升,但它非常小,而且通常你无论如何都会将你的相机矩阵与你的世界构建矩阵分开。
在 Opengl 中,相机始终位于眼睛 space 坐标 (0., 0., 0.)。要给出移动相机的外观,您的 OpenGL 应用程序必须使用相机变换的逆向移动场景。
您无需担心场景中的 moving/translating 个物体。 gluLookAt()
函数为您代劳。此函数根据其参数计算逆相机变换并将其乘以当前矩阵堆栈。
我不太确定我应该如何使用 openGL 让事物移动。
我应该在 3D 世界中移动相机的位置,还是 moving/translating 相机周围的物体?
我在网上看到相机应该保持在原点,其他一切都应该围绕相机移动,但这不是一个密集的操作吗?就像我有 1000 个物体并且我正在移动,我们必须移动所有这些物体。移动相机并将世界对象保持在原处不是更容易吗?
从概念上讲,OpenGL 的工作方式是相机始终位于中心,Y 轴在上,Z 轴在前。如果你想移动或旋转相机,你实际上会以相反的方式移动其他所有东西。
这与 Direct3D 相反,例如,您有一个单独的相机矩阵。
虽然这是一个次要细节,因为从数学上讲它们完全相同。无论您将所有东西向前移动还是将相机向后移动,最终结果都完全相同。你甚至可以争辩说,只有一个矩阵而不是拖着两个矩阵相乘是一种性能提升,但它非常小,而且通常你无论如何都会将你的相机矩阵与你的世界构建矩阵分开。
在 Opengl 中,相机始终位于眼睛 space 坐标 (0., 0., 0.)。要给出移动相机的外观,您的 OpenGL 应用程序必须使用相机变换的逆向移动场景。
您无需担心场景中的 moving/translating 个物体。 gluLookAt()
函数为您代劳。此函数根据其参数计算逆相机变换并将其乘以当前矩阵堆栈。