我正在尝试实现一个简单的应用程序,在该应用程序中,用户可以通过更改 gluLookAt 函数的参数来环顾四周。我通过以下方式实现了围绕 y 轴的旋转:
float cx1;
float cz1;
float d1 = cx - eyex;
float d2 = cz - eyez;
cx1 = d2*sin(alfa*PI / 180) + d1*cos(alfa*PI / 180);
cz1 = d2*cos(alfa*PI / 180) - d1*sin(alfa*PI / 180);
yRotationAngle = yRotationAngle +alfa;
cx = cx1 + eyex;
cz = cz1 + eyez;
这很好用,但是当我试图绕 x 轴旋转时,我没有得到想要的行为。我想“向上”和“向下”旋转相机,但要朝我当时所处的特定方向旋转。绕x轴旋转的代码实现如下: float d1 = cy - eyey; 浮动 d2 = cz - eyez;
//rotate around x
cy1 = cos(angleToRotate) * d1 - sin(angleToRotate) * d2;
cz1 = sin(angleToRotate) * d1 + cos(angleToRotate) * d2;
cy = cy1 + eyey;
cz = cz1 + eyez;
在围绕 x 旋转之前,我是否需要围绕 y 轴进行一些反向旋转?如果是这样,旋转所需的角度值是多少?