我有一个Camera类,它具有旋转和位置以及一种根据位置和旋转生成视图矩阵的方法,蚀刻框架将照相机将视图矩阵发送到渲染器。 (与投影矩阵相同,但变化不大)。
class Renderer;
class Camera
{
Renderer& m_renderer;
glm::mat4 GetViewMatrix();
public:
glm::vec3 position;
glm::vec3 rotation;
float Fov;
Camera(Renderer& renderer,float Fov, int width , int height);
void MoveCamera(glm::vec3 direction);
void RotateCamera(glm::vec3 direction);
void Update();
};
我想做的就是调用“ MoveCamera”:
void Camera::MoveCamera(glm::vec3 direction)
{
this->position += direction;
}
与forwardDirection*deltaTime*speed
从我的主循环。我的问题是根据我的旋转和位置创建前向矢量。
旋转是带有度数的vector3,用于创建这样的视图矩阵:
glm::mat4 Camera::GetViewMatrix()
{
glm::mat4 matRoll = glm::mat4(1.0f);
glm::mat4 matPitch = glm::mat4(1.0f);
glm::mat4 matYaw = glm::mat4(1.0f);
matRoll = glm::rotate(matRoll,glm::radians(rotation.z), glm::vec3(0.0f, 0.0f, 1.0f));
matPitch = glm::rotate(matPitch, glm::radians(rotation.x), glm::vec3(0.0f, 1.0f, 0.0f));
matYaw = glm::rotate(matYaw, glm::radians(rotation.y), glm::vec3(1.0f, 0.0f, 0.0f));
glm::mat4 rotate = matRoll * matPitch * matYaw;
glm::mat4 translate = glm::mat4(1.0f);
translate = glm::translate(translate ,-position);
return rotate*translate ;
}
在这种情况下,我应该如何根据位置和旋转来制作正向矢量?
答案 0 :(得分:1)
您可以从相机视图矩阵中提取它。
拥有世界空间中的相机变换矩阵后,就可以invert it to get the view matrix
您正在使用uses column-major matrices的glm,因此您只需抓住反矩阵的第二列并将其归一化即可获得方向。
const mat4 inverted = glm::inverse(transformationMatrix);
const vec3 forward = normalize(glm::vec3(inverted[2]));