如何在轴上旋转相机?我必须乘以什么矩阵?
我正在使用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;
答案 0 :(得分: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;
旋转发生在视图矩阵之后非常重要,因此所有对象都将相对于摄像机的位置旋转。此外,你必须使用转置(旋转)(旋转矩阵的倒数是它的转置),因为例如顺时针旋转相机,相当于逆时针旋转所有物体。