• OpenGL - Coordinate Systems


    从顶点坐标到我们最终看到的效果,中间要经历多个坐标系的转换:
    在这里插入图片描述

    对于我们来讲,只需要关注三个矩阵即可:Vclip=Mprojection⋅Mview⋅Mmodel⋅Vlocal

    • Mmodel:将局部坐标转为世界坐标的矩阵,注意此时的平移是以物体本身的坐标系为基准的
    • Mview:将世界坐标以摄像机的视角进行转换,比如向右平移,实际上视图会向左平移
    • Mprojection:对观察坐标进行投影

    Camera/View space

    通过view matrix,将世界坐标系相对摄像机的位置和方向进行转换,就可以得到view space。摄像机在世界坐标系的位置定义如下:
    在这里插入图片描述

    glm::vec3 cameraPos = glm::vec3(0.0f, 0.0f, 3.0f);  
    glm::vec3 cameraTarget = glm::vec3(0.0f, 0.0f, 0.0f);
    glm::vec3 cameraDirection = glm::normalize(cameraPos - cameraTarget);
    glm::vec3 up = glm::vec3(0.0f, 1.0f, 0.0f); 
    glm::vec3 cameraRight = glm::normalize(glm::cross(up, cameraDirection));
    glm::vec3 cameraUp = glm::cross(cameraDirection, cameraRight);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    有了位置信息之后,可以计算出LookAt matrix
    在这里插入图片描述
    利用glm可以更便捷的构造出该矩阵:

    glm::mat4 view;
    // Position Target Up
    view = glm::lookAt(glm::vec3(0.0f, 0.0f, 3.0f), 
      		   glm::vec3(0.0f, 0.0f, 0.0f), 
      		   glm::vec3(0.0f, 1.0f, 0.0f));
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Walk around

    移动视图其实是改变摄像机的位置,具体代码可以参照 -> 👉

    Look around

    Euler angles

    在这里插入图片描述
    俯仰角(pitch)是描述我们如何往上或往下看的角,可以在第一张图中看到。第二张图展示了偏航角(yaw),表示我们往左和往右看的程度。滚转角(roll)代表我们如何翻滚摄像机,通常在太空飞船的摄像机中使用。
    鼠标左右移动改变了yaw,上下移动改变了pitch,变换的坐标可以计算为:

    glm::vec3 direction;
    // yaw 在xz平面, pitch 在yz平面
    direction.x = cos(glm::radians(yaw)) * cos(glm::radians(pitch));
    direction.y = sin(glm::radians(pitch));
    direction.z = sin(glm::radians(yaw)) * cos(glm::radians(pitch));
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Zoom

    进行透射投影即可起到放大缩小的效果,具体代码可以参照 -> 👉

    Camera Class

    方便使用,我们可以把摄像机的功能封装起来 -> 👉 ,使用方法 -> 👉

  • 相关阅读:
    Javaweb 之 Filter(过滤器)快速入门,执行流程,使用细节
    sass 封装媒体查询工具
    完美解决新旧R版本冲突ggplot包不能安装问题
    apk里的data.unity3d贴图文件如何加密?
    Linux设备树插件
    【生日快乐】SpringBoot SpringBoot 基础篇(第一篇) 第4章 SpringBoot 综合案例 4.7 修改客户功能
    HashMap知识总结
    前端面试基础面试题——7
    No144.精选前端面试题,享受每天的挑战和学习
    (十一)MySQL日志篇之undo-log、redo-log、bin-log.....傻傻分不清!
  • 原文地址:https://blog.csdn.net/qq_42403042/article/details/125362624