结合Roll Pitch& amp;组合时的OpenGL怪异行为偏航

时间:2014-11-12 19:04:57

标签: c++ opengl rotation pitch

我注意到我的openGL程序中有一些奇怪的行为。基本上它会产生一些形状,主要焦点是让摄像机在世界各地“飞行”,具有滚动,俯仰和偏航变化的功能。我现在已经实现了所有功能,但现在当我滚动,然后改变俯仰或偏航时,场景会跟随一条奇怪的曲线并飞出视野。在我的代码中,我维护了3个向量,VRP用于眼睛的坐标,VPN用于焦点,VUP用于指示眼睛的向上方向。 旋转的代码是:

s_rotateAxis(VUP, VPN[0], VPN[1], VPN[2], 0.1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(VRP[0], VRP[1], VRP[2], (VPN[0] + VRP[0]), (VPN[1] + VRP[1]), (VPN[2] + VRP[2]),         VUP[0], VUP[1], VUP[2]);

另一个方向的角度为-0.1。 s_rotateAxis只是围绕任意点旋转矢量。因此,在上面的代码片段中,VUP绕VPN旋转了0.1度。 向左偏航,代码如下:

s_rotateAxis(VPN, VUP[0], VUP[1], VUP[2], 0.1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(VRP[0], VRP[1], VRP[2], (VRP[0] + VPN[0]), (VRP[1] + VPN[1]), (VRP[2] + VPN[2]), VUP[0], VUP[1], VUP[2]);

同样,焦点旋转大约VUP 0.1度,并且在gluLookAt中生成要观察的点。提升如下:

productUP = xProduct(VPN, VUP);
s_rotateAxis(VPN, productUP[0], productUP[1], productUP[2], 0.1);
s_rotateAxis(VUP, productUP[0], productUP[1], productUP[2], 0.1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(VRP[0], VRP[1], VRP[2], (VRP[0] + VPN[0]), (VRP[1] + VPN[1]), (VRP[2] + VPN[2]), VUP[0], VUP[1], VUP[2]);

这里,xProduct计算2个点的叉积,给出一个垂直于两者的点。在这种情况下VPN和VUP。我希望有人可以轻松发现我的错误,因为我刚开始使用openGL,而不必发布整个程序。

0 个答案:

没有答案