当前位置: 首页 > 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】:王锐 .《最长的一帧》 

相关文章:

观察矩阵(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部分保持在网页底部

中间内容高度不够屏幕高度撑不开的页面时候&#xff0c;页面footer部分都能保持在网页页脚&#xff08;最底部&#xff09;的方法 1、首先上图看显示效果 2、奉上源码 2.1、html部分 <body><header>头部</header><main>主区域</main><foot…...

Java中创建线程的几种方式

底层都是基于实现Runnable接口 1.继承thread类&#xff0c;new一个thread对象&#xff0c;实现run方法&#xff0c;无返回值 public class MyThread extends Thread {Overridepublic void run() {System.out.println("Thread created by extending Thread class is runn…...

[A-04] ARMv8/ARMv9-Cache的相关策略

ver0.2 前言 前面我们已经通过三篇文章反反复复的讲Cache的概念、结构、架构&#xff0c;相信大家对Cache已经大概有了初步的了解。这里简单归纳一下: (1) Cache从硬件视角看&#xff0c;是连接PE-Core和主存的一种存储介质&#xff0c;存储的数据是主存中数据的副本&#xf…...

【笔试常见编程题06】最近公共祖先、求最大连续bit数、二进制插入、查找组成一个偶数最接近的两个素数

1. 最近公共祖先 将一棵无穷大满二叉树的结点按根结点一层一层地从左往右编号&#xff0c;根结点编号为1。现给定a&#xff0c;b为两个结点。设计一个算法&#xff0c;返回a、b最近的公共祖先的编号。注意其祖先也可能是结点本身。 测试样例&#xff1a; 2&#xff0c;3 返回&a…...

【工具分享】Gophish——网络钓鱼框架

文章目录 Gophish安装方式功能简介 Gophish Gophish 是一个开源的网络钓鱼框架&#xff0c;它被设计用于模拟真实世界的钓鱼攻击&#xff0c;以帮助企业和渗透测试人员测试和评估他们的网络钓鱼风险。Gophish 旨在使行业级的网络钓鱼培训对每个人都是可获取的&#xff0c;它易…...

“职业三大底层逻辑“是啥呢?

大家好&#xff0c;我是有用就扩散。 掌握职业发展的三大底层逻辑以宏观视角看待自己的职业发展道路具备长远规划自己职业路劲的能力通过成就事件呈现自己的工作成绩 一、痛点陈述 不喜欢眼前的工作&#xff1f;眼前的工作琐碎没前途&#xff1f;找不到能力提升的方向时候会…...

飞睿智能无线高速uwb安全数据传输模块,低功耗、抗干扰超宽带uwb芯片传输速度技术新突破

在信息化的时代&#xff0c;数据传输的速度和安全性无疑是每个企业和个人都极为关注的话题。随着科技的飞速发展&#xff0c;超宽带&#xff08;Ultra-Wideband&#xff0c;简称UWB&#xff09;技术凭借其性能和广泛的应用前景&#xff0c;逐渐成为了数据传输领域的新星。今天&…...

手把手教你从微信中取出聊天表情图片,以动态表情保存为gif为例

以下方法静态图片同样适用 收到动画表情像保存为gif 这时候我们就要借助微信官方的文件小助手网页版。 登录之后把要保存的表情转发给微信传输助手 这个时候就会出现将图像另存为 如果需要保存动图就修改后缀为.gif...

【深度学习】图形模型基础(5):线性回归模型第三部分:线性回归模型拟合

1.引言 本博文专辑的焦点主要集中在回归模型的实用案例和工具上&#xff0c;从简单的单变量线性回归入手&#xff0c;逐步过渡到包含多个预测变量、非线性模型&#xff0c;以及在预测和因果推断中的应用。本文我们将介绍回归模型推断的一些数学结构&#xff0c;并提供一些代数…...

【Git 入门】初始化配置与新建仓库

文章目录 前言配置git新建仓库仓库的概念创建仓库命令总结前言 在现代软件开发中,版本控制系统已经成为了不可或缺的工具。其中,Git 是最为广泛使用的版本控制系统之一。Git 不仅可以帮助我们管理和跟踪代码的变化,还可以方便地与他人协作。本文将介绍 Git 的基础知识,包括…...

C语言 求两个整数的最大公约数和最小公倍数

写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。 #include <stdio.h>// 求最大公约数 int gcd(int a, int b) {while (b ! 0) {int temp b;b a % b;a temp;}return a; }// 求最小公倍数 int lcm(int a,…...

网站建设要费用多少/百度一下首页问问

1 JSON.stringify() 此方法用来将 JavaScript 对象转换为字符串。 1.1 语法 JSON.stringify(value[, replacer[, space]])1.2 参数说明 value: 必需&#xff0c; 要转换的 JavaScript 值&#xff08;通常为对象或数组&#xff09;。 replacer: 可选。用于转换结果的函数或数组…...

wordpress 宠物模板/广告推广平台网站有哪些

stm32 USB-HID移植[复制链接]stm32芯片的设计确实很恶心简单举两个例子&#xff1a;1. STM32F103芯片的USB和CAN中断和RAM共用&#xff0c;导致无法同时使用USB和CAN。2.STM32F105芯片的USB的从机需要接VBUS脚&#xff0c;而103的不用接都可以&#xff1b;103的软连接的通过IO端…...

建站费用明细/网络营销师证书有用吗

当L0文件达到12个, 而compaction来不及的时候, 写入完全阻塞, 这个阻塞时间可能长达10s.LevelDB实现上是L0达到4个时开始触发compaction, 8个时开始减慢写入, 12个时完全停止写入. 具体配置是写死的, 不过可以在编译时修改:// Level-0 compaction is started when we hit this …...

网站源码开发/重庆今日头条新闻消息

容易被遗忘的十种健康食物常常有的人会抱怨&#xff0c;可供选择的食物实在太少了&#xff0c;总是吃不到好吃的新奇的东西。但事实是否真的如此呢&#xff1f;我们总是因为自己生活的局限性而去追寻其他不容易得到的美味&#xff0c;而忽略了那些就近在身边的对我们有益的东西…...

营销型网站建设模板下载/游戏推广是什么工作

修改图片格式 matlab代码 其实内部一些代码是用了rbg的fast-rcnn代码的。 \datasets\VOCdevkit2007\VOCcode\VOCinit.m里面&#xff0c;查找jpg,改成png 以及&#xff0c;\imdb\imdb_from_voc.m里面&#xff0c;查找imdb.extension&#xff0c;修改它的值为png python代码 py-f…...

滨海做网站的公司/东莞网站建设推广品众

在平时工作中&#xff0c;我们有时候需要对JSON 的某一个字段进行提取&#xff0c; 样例数据 &#xff1a; {"a1":22,"a2":"23"} {"a2":"23","a1":2233,a3:"22"} 可以使用 grep 完成功能&#xff1…...