gpt4 book ai didi

c++ - 从旋转和位置获取前向 vector

转载 作者:行者123 更新时间:2023-11-28 01:26:20 26 4
gpt4 key购买 nike

我有一个相机类,它有旋转和位置以及从位置和旋转生成 View 矩阵的方法, eclipse 刻框架相机将 View 矩阵发送到渲染器。 (与投影矩阵相同,但变化不大)。

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从我的主循环。我的问题是根据我的旋转和位置创建一个前向 vector 。rotation 是一个带有度数的 vector3,用于创建这样的 View 矩阵:

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

那么在这种情况下,我应该如何根据我的位置和旋转来制作前向 vector 呢?

最佳答案

您可以从相机 View 矩阵中提取它。

在世界空间中拥有相机变换矩阵后,您可以 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]));

关于c++ - 从旋转和位置获取前向 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53608944/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com