【问题标题】:OpenGL gluLookAt why the up vector instead of an angleOpenGL gluLookAt 为什么向上向量而不是角度
【发布时间】:2014-02-24 05:56:56
【问题描述】:

我了解在 OpenGL 中,我们使用 gluLookAt 将相机相对于世界放置,从而定义将要绘制的图像。

“眼睛”指定相机的位置,“中心”指定相机指向的点。一旦我们知道了这两个,我们就可以从眼睛到中心画一条直线。相机平面与这条线垂直。

因为我们知道这个平面,所以向上向量指定了相机的顶部——基本上这个平面中的哪个方向是向上的。因此向上向量总是与连接中心和眼睛的向量正交。

我的问题是,当我们只想知道关于连接“中心”和“眼睛”的线的旋转角度时,为什么我们需要完整的向量。这背后的原因是我不知道的计算优势吗?如果有人指定了一个与视线方向不正交的错误向上向量怎么办?

【问题讨论】:

  • 角度是什么?如果没有eye 向量,您在调用gluLookAt (...)(Z 轴)时实际上只有一个 3D 向量空间的轴,即使它也不是直接 传递给函数,而是从原点和中心位置计算。所以我再说一遍,这个角度到底应该是什么?如果它是相对于 Z 轴的,那么有无数个可能的 up 向量可以满足您的角度,而这根本没有用。

标签: opengl graphics camera glulookat


【解决方案1】:

您传入的向上向量用于指示向上方向,但这与叉积一起使用。我认为 gluLookAt 的目的是简化用户所需的计算,例如,您只需传递 (0,1,0) 以指示您想要的向上方向是沿正 Y 轴。

如果你想要更高的效率,你可以完全避免 gluLookAt

【讨论】:

  • 我同意它用于简化计算,但它可以只是 1 个角度而不是需要整个向量。这个问题显示了叉积(stackoverflow.com/questions/10635947/…),它与向上向量交叉法线,然后再次与法线交叉。这似乎是多余的。我不明白为什么?
  • 原始向上向量并不意味着与视图方向正交 - 它只是确定向上的一般方向,例如 y 轴。如果您将正交向上向量与视图相交,或者将近似向上向量与视图相交,您将得到相同的侧向量。由于 gluLookAt 不期望正交上向量,它与视图交叉侧向量以获得正交上向量。如果您使用一个角度,您将针对哪个轴旋转?视角方向?这将需要您根据视图方向调整角度
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多