我注意到我的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,而不必发布整个程序。