使用gluLookAt

时间:2018-03-18 20:59:41

标签: c++ opengl camera

我正在尝试使用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)以旋转相机?

1 个答案:

答案 0 :(得分:1)

从一组向量开始:

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

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

你必须记住限制音高旋转,不要让fwdup向量在某个时刻平行。您可以通过每次轮换旋转时重新创建up向量来防止这种情况 - 只需在rhtfwd个vactors之间进行交叉产品。这里有一个侧面说明 - 这种方式up并不总是(0,1,0)。

相关问题