2016-05-07 165 views
3

如何在一個軸上旋轉攝像頭?我必須乘以什麼矩陣?圍繞一個軸旋轉攝像頭?

我正在使用glm :: lookAt來構建viewMatrix,但我試圖乘以旋轉矩陣並沒有發生任何事情。

glm::mat4 GetViewMatrix() 
{ 
    return glm::lookAt(this->Position, this->Position + this->Front, glm::vec3(0.0f, 5.0f, 0.0f)); 
} 

glm::mat4 ProjectionMatrix = glm::perspective(actual_camera->Zoom, (float)g_nWidth/(float)g_nHeight, 0.1f, 1000.0f); 
glm::mat4 ViewMatrix = actual_camera->GetViewMatrix(); 
glm::mat4 ModelMatrix = glm::mat4(1.0); 
glm::mat4 MVP = ProjectionMatrix * ViewMatrix * ModelMatrix; 

回答

1

旋轉使用glm::rotate前和你的相機的載體:

glm::mat4 GetViewMatrix() 
{ 
    auto front = glm::rotate(this->Front, angle, axis); 
    auto up = glm::rotate(glm::vec3(0, 1, 0), angle, axis); 
    return glm::lookAt(this->Position, this->Position + front, up); 
} 

或者,你可以用你的旋轉矩陣加乘到您的MVP建設:

glm::mat4 MVP = ProjectionMatrix * glm::transpose(Rotation) * ViewMatrix * ModelMatrix; 

它旋轉發生在視圖矩陣之後非常重要,因此所有對象都將相對於相機的位置旋轉。此外,由於例如順時針旋轉攝像機,您必須使用轉置(旋轉)(旋轉矩陣的逆轉換),相當於逆時針旋轉所有對象。