2016-05-07 170 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; 

它旋转发生在视图矩阵之后非常重要,因此所有对象都将相对于相机的位置旋转。此外,由于例如顺时针旋转摄像机,您必须使用转置(旋转)(旋转矩阵的逆转换),相当于逆时针旋转所有对象。