观察矩阵(View Matrix)、投影矩阵(Projection Matrix)、视口矩阵(Window Matrix)及VPM矩阵及它们之间的关系

      V表示摄像机的观察矩阵(View Matrix),它的作用是把对象从世界坐标系变换到摄像机坐标系。因此,对于世界坐标系下的坐标值worldCoord(x0, y0, z0),如果希望使用观察矩阵VM将其变换为摄像机坐标系下的坐标值localCoord(x’, y’, z’),则有:

localCoord = worldCoord * VM

此外,观察矩阵可理解为“摄像机在世界坐标系下的位姿矩阵的逆矩阵”,也可理解为"世界坐标系在摄像机坐标系下的位姿矩阵。因此Camera 类也专门提供了getInverseViewMatrix 这样一个函数,它的实际意义是表示摄像机在世界坐标系下的位置;而Camera 类的getViewMatrix函数则表示世界坐标系下的某个物体的位姿矩阵变换到以摄像机坐标系为基准下的矩阵。这个有点绕,具体参见如下博文:

浅谈在操控器类中,为何要通过osgGA::CameraManipulator的逆矩阵改变视点位置

        P 表示投影矩阵(Projection Matrix),当我们使用 setProjectionMatrixAsPerspective 之类的函数设置摄像机的投影矩阵时,我们相当于创建了一个视截锥体,并尝试把包含在其中的场景对象投影到镜头平面上来。如果投影矩阵为PM,而得到的投影坐标为projCoord(x”, y”, z”)的话,那么:

projCoord = localCoord * PM

      W表示视口矩阵(Window Matrix),它负责把投影坐标变换到指定的二维视口(viewport)中去, 对于视口矩阵WM,通过下面的公式可以得到最终的窗口坐标windowCoord(x”', y”', 0):

windowCoord = projCoord * WM

将所有的公式整合之后,得到:

windowCoord = worldCoord * VM * PM * WM

而这个所谓的窗口坐标windowCoord,实际上也就是世界坐标系下的坐标值worldCoord 在指定的摄像机视口中(也就是我们的屏幕上)对应的平面位置。怎么样,不知不觉中,我 们已经实现了gluProject函数所完成的功能了。记:

VPW =  VM * PM * WM

则:

windowCoord = worldCoord * VPM

 对上式左右两边乘以VPM的逆,如下:

即反转这三个步骤就可以得到视口中指定位置所对应的世界坐标了(也就是gluUnProject的工作)即:

参考资料

【1】:王锐 .《最长的一帧》 

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 11:32:03       4 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 11:32:03       5 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 11:32:03       4 阅读
  4. Python语言-面向对象

    2024-07-10 11:32:03       4 阅读

热门阅读

  1. 定制化正则化:在Mojo模型中动态应用自定义方法

    2024-07-10 11:32:03       11 阅读
  2. 稀疏之美:在Mojo模型中实现特征的稀疏表示

    2024-07-10 11:32:03       11 阅读
  3. AI开发者的编程语言Mojo:入门指南

    2024-07-10 11:32:03       11 阅读
  4. 跨语言的智能:在多种编程环境中部署Mojo模型

    2024-07-10 11:32:03       10 阅读
  5. Mojo编程语言详细介绍

    2024-07-10 11:32:03       11 阅读
  6. 掌握MOJO命令行:参数解析的艺术

    2024-07-10 11:32:03       12 阅读
  7. 运营商二三要素是什么?有什么意义

    2024-07-10 11:32:03       8 阅读
  8. 3102. 最小化曼哈顿距离

    2024-07-10 11:32:03       8 阅读
  9. PHP String manipulation: A comprehensive guide

    2024-07-10 11:32:03       8 阅读
  10. Qt5 Ubuntu18 QStackedWidget

    2024-07-10 11:32:03       10 阅读
  11. WebKit源代码探秘:深入理解其组织结构与组件

    2024-07-10 11:32:03       9 阅读
  12. 【回溯+双指针算法题记录】回文字符串汇总

    2024-07-10 11:32:03       7 阅读
  13. 2288. 价格减免

    2024-07-10 11:32:03       10 阅读