观察矩阵(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】:王锐 .《最长的一帧》
相关文章:
观察矩阵(View Matrix)、投影矩阵(Projection Matrix)、视口矩阵(Window Matrix)及VPM矩阵及它们之间的关系
V表示摄像机的观察矩阵(View Matrix),它的作用是把对象从世界坐标系变换到摄像机坐标系。因此,对于世界坐标系下的坐标值worldCoord(x0, y0, z0),如果希望使用观察矩阵VM将其变换为摄像机坐标系下的坐标值localCoord(x…...
谷粒商城学习笔记-19-快速开发-逆向生成所有微服务基本CRUD代码
文章目录 一,使用逆向工程步骤梳理1,修改逆向工程的application.yml配置2,修改逆向工程的generator.properties配置3,以Debug模式启动逆向工程4,使用逆向工程生成代码5,整合生成的代码到对应的模块中 二&am…...
时序预测 | Matlab实现TCN-Transformer的时间序列预测
时序预测 | Matlab实现TCN-Transformer的时间序列预测 目录 时序预测 | Matlab实现TCN-Transformer的时间序列预测效果一览基本介绍程序设计 效果一览 基本介绍 基于TCN-Transformer模型的时间序列预测,可以用于做光伏发电功率预测,风速预测,…...
没想到MySQL 9.0这么拉胯
MySQL 7月1号发布了9.0版本,然而没想到并没有引起大家的狂欢,反而是来自DBA圈子的一篇吐槽,尤其是PG界吐槽更厉害。 难道MySQL现在真的这么拉胯了?本着好奇的态度,我也去下载了MySQL9.0的手册看了一下。确实有点让我大…...
开源 Wiki 系统 InfoSphere 2024.01.1 发布
推荐一套基于 SpringBoot 开发的简单、易用的开源权限管理平台,建议下载使用: https://github.com/devlive-community/authx 推荐一套为 Java 开发人员提供方便易用的 SDK 来与目前提供服务的的 Open AI 进行交互组件:https://github.com/devlive-commun…...
1.Introduction to Spring Web MVC framework
Web MVC framework 文档:22. Web MVC framework (spring.io) 概述 Web MVC框架(Web Model-View-Controller Framework)是一种用于构建Web应用程序的软件架构模式。MVC模式将应用程序分为三个主要组件:模型(Model&am…...
Onnx 1-深度学习-概述1
Onnx 1-深度学习-概述1 一: Onnx 概念1> Onnx 介绍2> Onnx 的作用3> Onnx 应用场景4> Onnx 文件格式1. Protobuf 特点2. onnx.proto3协议3> Onnx 模型基本操作二:Onnx API1> 算子详解2> Onnx 算子介绍三: Onnx 模型1> Onnx 函数功能1. np.random.rand…...
网络基础——udp协议
UDP协议(User Datagram Protocol,用户数据报协议)是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,它提供了一种简单的、不可靠的数据传输服务。以下是关于…...
分布式锁理解
介绍分布式锁,我觉得从项目的背景入手把 在伙伴匹配系统中,我创建了一个定时任务,做为缓存预热的手段 这个具体原因在Redis-CSDN博客 接下来切入正题: 想象每个服务器都有一个定时任务,都要对数据库或者缓存进行操…...
Android Gradle 开发与应用 (十): Gradle 脚本最佳实践
目录 1. 使用Gradle Kotlin DSL 1.1 什么是Gradle Kotlin DSL 1.2 迁移到Kotlin DSL 1.3 优势分析 2. 优化依赖管理 2.1 使用依赖版本管理文件 2.2 使用依赖分组 3. 合理使用Gradle插件 3.1 官方插件和自定义插件 3.2 插件管理的最佳实践 4. 任务配置优化 4.1 使用…...
c#获取本机的MAC地址(附源码)
在前一次的项目中,突然用到了这个获取本机的MAC地址,然后就研究了一下,记录下来,防止以后再用到, 使用winfrom做的,界面一个button,一个textBox,点了button以后给textBox赋值显示mac地址 附上源…...
sqlmap使用之-post注入、head注入(ua、cookie、referer)
1、post注入 1.1、方法一,通过保存数据包文件进行注入 bp抓包获取post数据 将数据保存到post.txt文件 加上-r指定数据文件 1.2、方法二、通过URL注入 D:\Python3.8.6\SQLmap>python sqlmap.py -u "http://localhost/login.php" --data "userna…...
XSS: 原理 反射型实例[入门]
原理 服务器未对用户输入进行严格校验,使攻击者将恶意的js代码,拼接到前端代码中,从而实现恶意利用 XSS攻击危害 窃取用户Cookie和其他敏感信息,进行会话劫持或身份冒充后台增删改文章进行XSS钓鱼攻击利用XSS漏洞进行网页代码的…...
Idea新增Module报错:sdk ‘1.8‘ type ‘JavaSDK‘ is not registered in ProjectJdkTable
文章目录 一,创建Module报错二,原因分析三,解决方案1,点击上图的加号,把JDK8添加进来即可2,点击左侧[Project],直接设置SDK为JDK8 四,配置检查与验证 一,创建Module报错 …...
基于RHCE基础搭建简单服务
目录 项目标题与需求一 配置IP地址server机node02机 二 配置web服务三 搭建dns服务器四 开启防火墙server firewalld 五 配置nfs服务器node02 nfsserver autofs 六 开启SELinux七 验证是否能访问www.rhce.com 项目标题与需求 项目标题: 项目需求: 现有…...
威纶通触摸屏软件离线仿真时出现报错8000端口占用或服务器断线
现象 威纶通触摸屏软件离线仿真时出现报错 显示8000端口被占用 或者是设备服务器断线的状态 处理方法 系统参数——HMI属性 端口号更改一下即可 或者关闭占用8000端口的应用 分享创作不易,请多多支持,点赞、收藏、关注! Ending~...
CAS详解
文章目录 CAS使用示例Unsafe类实现原理CAS问题 CAS CAS全称为Compare and Swap被译为比较并交换,是一种无锁算法。用于实现并发编程中的原子操作。CAS操作检查某个变量是否与预期的值相同,如果相同则将其更新为新值。CAS操作是原子的,这意味…...
【笔记】虚拟机中的主从数据库连接实体数据库成功后的从数据库不同步问题解决方法2
错误: Last_Errno: 1008 Last_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction ANONYMOUS at source log mysql-bin.000014, end_log_pos 200275. See error lo…...
【每日一练】python类和对象现实举例详细讲解
""" 本节课程目的: 1.掌握类描述现实世界实物思想 2.掌握类和对象的关系 3.理解什么事面向对象 """ #比如设计一个闹钟,在这里就新建一个类 class Clock:idNone #闹钟的序列号,也就是类的属性priceNone #闹…...
【学习css1】flex布局-页面footer部分保持在网页底部
中间内容高度不够屏幕高度撑不开的页面时候,页面footer部分都能保持在网页页脚(最底部)的方法 1、首先上图看显示效果 2、奉上源码 2.1、html部分 <body><header>头部</header><main>主区域</main><foot…...
软件测试行业的技术创新:有哪些新兴技术将影响测试行业
一、AI驱动的智能测试:从辅助工具到核心引擎在2026年的软件测试领域,人工智能已经从概念验证阶段全面迈入深度落地期,成为驱动测试效能提升的核心引擎。AI驱动的智能测试正在从多个维度重构传统测试范式。(一)自动化测…...
S7-1200通讯选型指南:RS485、Profinet还是开放式TCP?看完这篇不再纠结
S7-1200通讯选型指南:RS485、Profinet还是开放式TCP?看完这篇不再纠结 在工业自动化项目中,PLC通讯方案的选择往往让工程师们陷入两难——既要考虑当下设备的兼容性,又要为未来升级预留空间。作为西门子S7-1200系列PLC的用户&…...
vue3+python基于Django框架的铁路博物馆展览系统的设计与实现67350649
目录同行可拿货,招校园代理 ,本人源头供货商项目背景技术栈核心功能模块关键技术实现部署方案项目亮点项目技术支持源码获取详细视频演示 :同行可合作点击我获取源码->->进我个人主页-->获取博主联系方式同行可拿货,招校园代理 ,本人源头供货商 项目背景 …...
文字修仙项目市场价值与商业化分析
文字修仙 AI Agent:市场价值与个人开发者商业化实战指南 一、文字修仙游戏的市场基本面——小众赛道的大机会 1.1 全球文字/互动叙事游戏市场规模与增长 1.2 中文修仙品类的独特生态:QQ群 → 微信 → 抖音 1.3 用户画像:谁在玩文字修仙&…...
Quark:极致微型Linux卡片电脑的硬件设计、系统开发与应用实战
1. 项目概述:当“小”成为核心竞争力在嵌入式开发和创客圈子里,我们总在寻找那个“刚刚好”的硬件平台。它要足够小巧,能塞进任何灵光一现的创意里;它要足够完整,能运行一个正经的操作系统来处理复杂逻辑;它…...
千问 LeetCode 2547. 拆分数组的最小代价 Java实现
这道题是典型的区间DP(动态规划)问题,核心在于如何高效计算每个子数组的"重要性"。问题分析重要性的计算规则: - 子数组中只出现一次的数字会被移除(不计入长度) - 重要性 k 剩余数字的个数 - …...
LangFuse与LangSmith区别
文章目录🔄 **核心定位对比**🎯 **适用场景差异**💡 **为什么两者并存?**🔄 核心定位对比 LangSmith(LangChain官方): 闭源产品,由LangChain官方提供深度集成ÿ…...
Postgresql基础实践教程(二)
十三、查询会员的预订开始时间 题目 如何列出名为"David Farrell"的会员的所有预订开始时间? 预期结果 starttime 2012-09-18 09:00:00 2012-09-18 17:30:00 2012-09-18 13:30:00 2012-09-18 20:00:00 2012-09-19 09:30:00 2012-09-19 15:00:00 2012-09-19 12:00:…...
Linux 进程从入门到实战(一)
.个人主页:晓风飞专栏:数据结构|Linux|C语言路漫漫其修远兮,吾将上下而求索文章目录进程为什么要存在内存??操作系统进程什么是进程?PCB(进程控制块)操作系统如何管理进程࿱…...
SABIC塑料与宏裕塑胶的卓越合作:高性能材料的行业应用
导读:在制造业转型升级的关键时期,高性能工程塑料的应用正成为企业提升产品竞争力的核心要素。SABIC塑料与宏裕塑胶的卓越合作,为行业提供了从原料选型到技术落地的完整解决方案,这种强强联合的模式正在重新定义高端材料供应体系。…...
