我需要实现一个四元数来旋转相机。在实现四元数之前,我使用 LookAt(&eye, &at, &up) 来表示相机坐标(vpn, vup, ...)。
vec3 eye = vec3(0.0,0.0,-10.0);
vec3 to = vec3(0.0,0.0,0.0); // initial
vec3 up = vec3(0.0,1.0,0.0);
vec3 d = to - eye;
并在显示回调。
m = LookAt(eye,to,up);
glUniformMatrix4fv(ModelView,1,GL_TRUE,m);
并添加一个旋转(它仍然是欧几里得旋转和键盘交互)
case 'a':
temp = RotateX(1.0) * vec4(d,0);
temp1 = RotateX(1.0) * vec4(up,0);
d = vec3(temp.x, temp.y, temp.z);
up = vec3(temp1.x, temp1.y, temp1.z);
eye = to - d;
break;
case 'd':
temp = RotateY(1.0) * vec4(d,0);
temp1 = RotateY(1.0) * vec4(up,0);
d = vec3(temp.x, temp.y, temp.z);
up = vec3(temp1.x, temp1.y, temp1.z);
eye = to - d;
break;
所以我的问题是,LookAt 功能只是让相机坐标?是否有任何旋转矩阵来使相机坐标?如您所见,我通过使用 LookAt 中没有的一些旋转来旋转我的相机,我将使用四元数来进行旋转。但是 LookAt() 使用一些旋转,我将实现 LookAt 的四元数版本以避免万向节锁定