如何在相机类中添加滚动

Posted

技术标签:

【中文标题】如何在相机类中添加滚动【英文标题】: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 或指导我阅读一些材料,我将不胜感激。

【问题讨论】:

【参考方案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。 感谢帮助:)

以上是关于如何在相机类中添加滚动的主要内容,如果未能解决你的问题,请参考以下文章

使用相机胶卷图像设置背景

如何知道 QPlainTextEdit 继承类中是不是显示水平滚动条?

如何解决MFC单文档滚动条拖动时的重影问题(高分)

FPS 相机上不需要的滚动

如何使用 Android 在相机预览中添加卡通脸

如何在 Android 相机上使用意图添加功能裁剪图像?