2016-02-13 2 views
0

Я пытаюсь повернуть камеру с помощью кварианнов, но у меня проблемы с этим.Вращающийся просмотр камеры. Точка с кварианнами

Первое, что я замечаю сейчас, это то, что при выполнении этого положения камеры и камеры LookAt становятся почти такими же, а в некоторых случаях они одинаковы, а затем я получаю проблемы с точностью и все другие проблемы, связанные с ним, когда i попробуйте и переместите камеру.

if (Input::getInstance()->isMouseDown(SDL_BUTTON_RIGHT-1)){ 
     //log_.debug("Camera Mouse Left down"); 
     glm::vec2 mouseDelta = glm::ivec2(oldX, oldY) - Input::getInstance()->getMousePosition(); 
     glm::quat q1 = glm::quat(glm::vec3(glm::radians(mouseDelta.y), glm::radians(mouseDelta.x), 0.0f)); 
     cameraLook_ = q1 * (direction * mouseSensitivity_) * glm::conjugate(q1) + cameraPosition_; 
     //cameraLook_ = glm::rotate(cameraLook_, mouseDelta.x * delta, glm::vec3(0,1,0)); 
     //cameraLook_ = glm::rotate(cameraLook_, mouseDelta.y * delta, glm::vec3(0, 0, 1)); 
} 

ответ

0

Я переключился обратно на матрицы для своего решения, потому что для меня с ними легче работать в данный момент.

Есть несколько вещей, которые мне нужно понять о квартерах, тогда я могу исправить свою старую проблему.

glm::mat4 rotationMatrix = glm::translate(cameraPosition_ - glm::vec3(1.0)); 
    rotationMatrix *= glm::rotate(mouseDelta.x, glm::vec3(0, 1, 0)); 
    rotationMatrix *= glm::rotate(mouseDelta.y, glm::vec3(0, 0, 1)); 
    rotationMatrix *= glm::translate(-cameraPosition_ + glm::vec3(1.0)); 
    cameraLook_ = glm::vec3(rotationMatrix * glm::vec4(cameraLook_, 1.0f)); 
Смежные вопросы