在OpenGL中平移/旋转“世界”或“摄影机”

在OpenGL中平移/旋转“世界”或“摄影机”,opengl,Opengl,在我问这个问题之前:是的,我知道OpenGL中没有摄像头,但是setLookAt方法对我来说几乎是一样的 我想知道的是:如果我有任务,在我的场景中看一个特定的点和一个特定的距离,我基本上有两个选择: 我可以更改lookAt方法的eyeX、eyeY、eyeZ和centerX、centerY、centerZ值来实现这一点,或者我可以转换模型本身 假设我正在平移/旋转我的模型。我怎么知道把我的setLookAt的中心/眼睛坐标放在哪里去看一个特定的点?因为世界是旋转的,所以点x、y、z也会平移和旋转。

在我问这个问题之前:是的,我知道OpenGL中没有摄像头,但是setLookAt方法对我来说几乎是一样的

我想知道的是:如果我有任务,在我的场景中看一个特定的点和一个特定的距离,我基本上有两个选择:

我可以更改lookAt方法的eyeX、eyeY、eyeZ和centerX、centerY、centerZ值来实现这一点,或者我可以转换模型本身

假设我正在平移/旋转我的模型。我怎么知道把我的setLookAt的中心/眼睛坐标放在哪里去看一个特定的点?因为世界是旋转的,所以点x、y、z也会平移和旋转。所以基本上,当我想看点x,y,z时,在旋转/平移之后,值是变化的,我不可能看这个点


当我只变换我的眼睛和我注视的中心值时,我可以很容易地再次看到这个点——我遗漏了什么吗?似乎不是移动模型而不是相机的好方法…

它有助于理解向量空间

模型空间:对象的固有坐标系。基本上,它是如何与三维建模软件中的XYZ轴对齐的

世界空间:你的宇宙中的一切。在场景布局程序中移动摄影机时,XYZ轴不会更改。这是您习惯于与之交互和思考的坐标系

相机空间:这是一切都是关于你的相机。摄影机在摄影机空间中的位置是原点定义的位置,XYZ轴是正交化的右、上和外观向量。移动或旋转摄影机时,对象在摄影机空间中的所有位置和方向都会随之改变。这不是直观的——当你走来走去时,你会看到所有东西都保持不变——它实际上没有移动。那是因为你在世界空间里思考。在相机空间中,所有物体的位置和方向都是相对于眼睛的。如果一把椅子的位置在你面前是5个单位,即相机空间中的0,0,-5,并且你想要朝它2个单位,那么椅子的位置现在是0,0,-3

我该怎么看呢

lookat函数到底做什么?这是一种设置视图矩阵的便捷方法,您无需了解它在做什么


眼睛变量是相机在世界空间中的位置。他们就是你想的那样。中心变量也是一样——它们是对象在世界空间中的位置。从这里你可以得到从世界空间到相机空间的转换,你可以给OpenGL。

我知道OpenGL中不存在相机,这是正确的,但是OpenGL中也不存在setLookAt函数。嗯。。。setLookAt将为我计算矩阵,我猜只是一组平移/旋转