当前位置: 首页 > news >正文

观察矩阵(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】:王锐 .《最长的一帧》 

http://www.lryc.cn/news/398652.html

相关文章:

  • 谷粒商城学习笔记-19-快速开发-逆向生成所有微服务基本CRUD代码
  • 时序预测 | Matlab实现TCN-Transformer的时间序列预测
  • 没想到MySQL 9.0这么拉胯
  • 开源 Wiki 系统 InfoSphere 2024.01.1 发布
  • 1.Introduction to Spring Web MVC framework
  • Onnx 1-深度学习-概述1
  • 网络基础——udp协议
  • 分布式锁理解
  • Android Gradle 开发与应用 (十): Gradle 脚本最佳实践
  • c#获取本机的MAC地址(附源码)
  • sqlmap使用之-post注入、head注入(ua、cookie、referer)
  • XSS: 原理 反射型实例[入门]
  • Idea新增Module报错:sdk ‘1.8‘ type ‘JavaSDK‘ is not registered in ProjectJdkTable
  • 基于RHCE基础搭建简单服务
  • 威纶通触摸屏软件离线仿真时出现报错8000端口占用或服务器断线
  • CAS详解
  • 【笔记】虚拟机中的主从数据库连接实体数据库成功后的从数据库不同步问题解决方法2
  • 【每日一练】python类和对象现实举例详细讲解
  • 【学习css1】flex布局-页面footer部分保持在网页底部
  • Java中创建线程的几种方式
  • [A-04] ARMv8/ARMv9-Cache的相关策略
  • 【笔试常见编程题06】最近公共祖先、求最大连续bit数、二进制插入、查找组成一个偶数最接近的两个素数
  • 【工具分享】Gophish——网络钓鱼框架
  • “职业三大底层逻辑“是啥呢?
  • 飞睿智能无线高速uwb安全数据传输模块,低功耗、抗干扰超宽带uwb芯片传输速度技术新突破
  • 手把手教你从微信中取出聊天表情图片,以动态表情保存为gif为例
  • 【深度学习】图形模型基础(5):线性回归模型第三部分:线性回归模型拟合
  • 【Git 入门】初始化配置与新建仓库
  • C语言 求两个整数的最大公约数和最小公倍数
  • Linux arm64平台指令替换函数 aarch64_insn_patch_text_nosync