0

我在使用 gluLookAt 时遇到问题。

我的相机可以通过管道在相对鼠标运动事件中沿 X 和 Y 轴旋转。问题是 Z 轴 - 我不知道如何计算它。

所以,我的相机可以向上、向下、向左和向右看。但我不知道如何完全旋转 360 度!

有人可以帮忙吗?

编辑:

所以,到目前为止,这是我的代码的一个简单示例:

Point3 test(0,0,0);

Matrix4 camera = Camera::getInstance().getCameraM();
if ((event.motion.xrel > 200) || (event.motion.yrel > 200))
{
    break;
}

float mx = (event.motion.xrel);
float my = -(event.motion.yrel);
mx /= 20;
my /= 20;
test.setX(test.getX()+mx);
test.setY(test.getY()+my);
Camera::getInstance().lookAt(Point3(0,0,15),test,Vector3(0,-1,0));

Camera::lookAt简单地封装了 glu lookAt 函数。

4

1 回答 1

1

gluLookAt (...)产生一个正交的视图空间。当您调用它时,您已经知道两个轴之一(Y 轴为),Z 轴是根据从到up的方向计算的,最后 X 轴是 Y 和 Z 之间的叉积。eyecenter

顺便说一句,您不能完全旋转 360 度。在偏离水平线 +/- 90 度时,您会遇到一个奇点,其中有两种可能的方式来表示相同的角度。如果您通过该欧拉角插入旋转,那么您最终可以翻转您的方向。实际上,如果您的三个轴中的两个变得平行(当您向上或向下看时会发生这种情况),那么欧拉角会变得非常混乱。

于 2014-04-30T18:39:14.080 回答