2016-02-13 117 views
0

我想旋轉相機使用quarternions,但我有問題做它。旋轉相機looknt點與quarternions

我現在注意到的第一件事是,當我執行此操作時,Camera Position和Camera LookAt幾乎相同,在某些情況下它們是相同的,然後我得到精度問題以及與其相關的所有其他問題。嘗試並移動相機。

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

我轉回到我的解決方案的矩陣,因爲對我來說他們現在更容易處理。

有幾件事情我需要了解有關quarternions,然後我可以解決我的老問題。

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));