gluLook来自陀螺仪角度的矢量

时间:2015-02-24 15:28:46

标签: android geometry opengl-es-2.0 gyroscope

您好我正在尝试使用手机的陀螺仪旋转openGL相机。我能够得到三个角度(X,Y,Z),但我找不到将它们转换为gluLookAt所需的方向向量的方法。 相机放置在(0,0,0)并且应该与手机本身旋转相同。

1 个答案:

答案 0 :(得分:0)

gluLookAt需要三个矢量参数来计算正确的视图矩阵。眼睛位置(在您的情况下为(0,0,0)),中心位置(相机正在看的位置)和向上矢量(相机的“向上”方向)。

选择初始摄像机方向后,对于许多应用,中心将是(0,0,1)和向上方向(0,1,0)。你需要按所需的角度旋转这些矢量。为此,您可以将它们与旋转矩阵R = Rx * Rz * Ry相乘,其中Rx,z,y是给定轴沿给定角度的旋转矩阵。如果你使用像glm,eigen或类似的任何数学包,你可以很容易地构造它们。您甚至可以自己实现它们(http://en.wikipedia.org/wiki/Rotation_matrix)。

请注意,如果眼睛位置不是(0,0,0),则必须旋转方向矢量,而不是中心矢量。方向矢量=中心 - 眼睛。

所以,有点伪代码:

vec3 eye = .....
vec3 initCenter = .....
vec3 initDirection = initCenter - eye;
vec3 initUp = .....
mat3 rotation = rotate((1,0,0),xAngle) * rotate((0,1,0),yAngle) * rotate((0,0,1),zAngle);
gluLookAt(eye,eye + rotation*initDirection,rotation*initUp)

实现可能看起来有点不同,您可能必须使用vec4 / mat4,例如glm生成维度为4x4的旋转矩阵。