【问题标题】:OpenGL camera rotation using gluLookAt使用 gluLookAt 的 OpenGL 相机旋转
【发布时间】:2018-03-18 20:59:41
【问题描述】:

我正在尝试使用 gluLookAt 在 OpenGL 固定功能管道中实现 FPS 风格的相机。鼠标应该在任何给定方向上旋转相机。

我存储相机的位置:

float xP;
float yP;
float zP;

我存储查看坐标:

float xL;
float yL;
float zL;

向上向量始终设置为(0,1,0)

我使用这台相机如下:gluLookAt(xP,yP,zP, xL,yL,zL, 0,1,0);

我希望我的相机能够沿偏航和俯仰移动,但不能滚动。

在每一帧之后,我将鼠标的坐标重置到屏幕的中间。由此我可以得到 x 和 y 的变化。

如何转换每帧后 x 和 y 的变化,以适当更改观察坐标(xL、yL、zL)以旋转相机?

【问题讨论】:

  • 看,向上和你的右/左矢量应该相互垂直

标签: c++ opengl camera


【解决方案1】:

从一组向量开始:

fwd = (0, 0, -1);
rht = (1, 0, 0);
up = (0, 1, 0);

鉴于您的xy,取自您提到的鼠标位置,足够小您可以分别将它们直接用作偏航和俯仰旋转。使用 yaw 值将 rhtfwd 向量旋转到 up 向量上,而不是将 fwd 向量旋转到具有俯仰值的 rht 上。这样,您的相机 (fwd vactor) 就会有一个新的前进方向,您可以从中得出一个新的观察点(在您的情况下为 L = P + fwd)。

你必须记住限制俯仰旋转不要让fwdup 向量在某个点平行。您可以通过在每次进行俯仰旋转时重新创建up 向量来防止这种情况发生——只需在rhtfwd 向量之间进行叉积即可。不过这里有个旁注——这样up 不会总是 (0,1,0)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多