Я пытаюсь реализовать камеру opengl, которая поворачивает положение камеры вокруг указанной мировой координаты. Я пытаюсь сделать это, используя математическую библиотеку glm; мой код выглядит следующим образом
void Camera::dolly(double angle_x, double angle_y, const double& loc_x, const double& loc_y, const double& loc_z, const double& dt) {
glm::vec3 target = glm::vec3(loc_x,loc_y,loc_z);
glm::quat Q;glm::vec3 axis0(0.0f,1.0f,0.0f);
glm::quat R;glm::vec3 axis1(1.0f,0.0f,0.0f);
position = position - target;
//glm::normalize(axis0);
glm::normalize(axis1);
Q = glm::gtx::quaternion::angleAxis( float(angle_x ), axis0 );;
R = glm::gtx::quaternion::angleAxis( float(andl_y ), axis1 );;
glm::quat final = R*Q;
position = final * position;
position = position + target;
cout << "\tPosition: " << position.x << " " << position.y << " " << position.z <<endl;
}
Когда я тестирую код, вращение с использованием quat Q работает нормально, но quat R вызывает «прерывистое» вращение. Что я делаю неправильно?
x
иy
? Совершенно непонятно, как код не дает желаемых результатов. - person Andreas Haferburg   schedule 26.05.2013