【问题标题】:How to add roll in camera class如何在相机类中添加滚动
【发布时间】:2020-06-21 02:24:01
【问题描述】:

我正在构建一个相机类,并从在线教程中获得了构建该类的帮助。

现在我想在相机中添加滚动,但找不到任何可以解释如何在相机中添加滚动的阅读材料。

Camera(glm::vec3 position = glm::vec3(0.0f, 0.0f, 500.0f), glm::vec3 up = glm::vec3(0.0f, 1.0f, 0.0f), float yaw = YAW, float pitch = PITCH) : Front(glm::vec3(0.0f, 0.0f, -1.0f)), Zoom(ZOOM)
    {
        Position = position;
        WorldUp = up;
        Yaw = yaw;
        Pitch = pitch;
        updateCameraVectors();
    }

glm::mat4 GetViewMatrix()
    {
        return glm::lookAt(Position, Position + Front , Up);
    }

void updateCameraVectors()
    {
        
        glm::vec3 front;
        front.x = cos(glm::radians(Yaw - 90)) * cos(glm::radians(Pitch));
        front.y = sin(glm::radians(Pitch));
        front.z = sin(glm::radians(Yaw - 90)) * cos(glm::radians(Pitch)) ;
        Front = glm::normalize(front);
        Right = glm::normalize(glm::cross(Front, WorldUp));
        Up = glm::normalize(glm::cross(Right, Front));
    }

如果有人能解释如何在本课程中添加 ROll 或指导我阅读一些材料,我将不胜感激。

【问题讨论】:

    标签: c++ opengl glm-math


    【解决方案1】:

    对于roll 视图,您已围绕视线 (Front) 旋转向上矢量 (Up)。

    通过Roll定义一个围绕Front的旋转矩阵:

    glm::mat4 roll_mat = glm::rotate(glm::mat4(1.0f), glm::radians(Roll), Front);
    

    用矩阵变换Up向量:

    Up = glm::mat3(roll_mat) * Up;
    

    【讨论】:

    • 谢谢,我确实尝试将旋转矩阵乘以 Front 向量,但从未想过将该矩阵应用于 Roll。
    • 感谢帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 2015-03-20
    相关资源
    最近更新 更多