在OpenGL中翻译/旋转“世界”或“相机”

时间:2014-01-17 10:43:32

标签: opengl

在我问这个问题之前:是的我知道OpenGL中没有相机 - 但是setLookAt-Method对我来说几乎是一样的;)

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

我可以改变eyeX,eyeY,eyeZ和我的lookAt-Method的centerX,centerY,centerZ值来实现这个目标,或者我可以翻译我的模型本身。

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

当我只改变我的眼睛和我的外观的中心值时,我可以轻松地再次看到这一点 - 我错过了什么吗?似乎不是移动模型而不是相机的好方法......

1 个答案:

答案 0 :(得分:0)

有助于理解你的向量空间。

模型空间:对象的内在坐标系。基本上它是如何在3D建模软件中与XYZ轴对齐的。

世界空间:宇宙中的一切都在哪里。在场景布局程序中移动相机时,XYZ轴不会更改。这是您用来与之交互和思考的坐标系。

相机空间:这是相机的所有内容。相机在相机空间中的位置根据定义是原点,而您的XYZ轴是您的正交标准化的右,向上和向量矢量。移动或旋转相机时,对象的所有位置和方向都会随相机空间的变化而变化。这并不直观 - 当你四处走动时,你会看到一切都“保持同样的方式” - 它实际上并没有移动。那是因为你在思考世界空间。在相机空间中,一切的位置和方向都与您的眼睛有关。如果椅子的位置在你前方5个单位(即相机空间中的(0,0,-5))并且你想要2个单位,那么椅子的位置现在是(0,0,-3)。

如何设置外观?

外观功能做什么,究竟是什么?这是一种设置视图矩阵的便捷方式,您无需了解它正在做什么。

您的eye个变量是相机在世界空间中的位置。 IE他们就是你认为的那样。 center变量也是如此 - 它们是你的对象在世界空间中的位置。从这里,您可以获得从OpenGL到世界空间到相机空间的转换。