Games101 透视投影矩阵推导

目录

齐次坐标

透视投影

透视投影的四棱锥体挤压为正交投影的长方体 

变换规定

转换过程

观察1

 观察2 

关于任意一点挤压后向哪里移动的问题,简单推导了一下 


齐次坐标

如下,(x, y, z, 1) 表示空间中的xyz点,让它每个分量乘以k,k!=0,得到的齐次坐标也是表示空间中的这个点,同样,乘以z,得到的也是xyz这个点

透视投影

从一个点往外延伸出来一个四棱锥,这个点就是相机,定义 远平面f 和 近平面n,透视投影视椎体的区别就在于它的远平面要比近平面更大,那么如何计算这个不规则的视体矩阵呢?

  1. 将透视相机的Frustum挤压为正交相机的Cuboid
  2. 再用正交投影矩阵相乘与上方变换矩阵相乘,即可得到最终的透视投影矩阵

 

透视投影的四棱锥体挤压为正交投影的长方体 

变换规定

  1. 近平面上的点,挤压后也不会变化
  2. 远平面上的点的z值是f,挤压后的z值仍然是f,它的z值不会发生变化,只是整体在向里面收缩
  3. 箭头指向的远平面中心点,挤压后仍然是中心点(0,0,f)

         

转换过程

 如下,从侧面看向Frustum,蓝色箭头指向的是相机摆放的位置,上方向是Y,朝向-Z方向看,往右边看到的区域是近,远平面的一半

已知n,z,远平面上的xyz点,要把y挤压为 y',根据相似三角形可得 y'/y = n/z

满足如下规律 

 

当然,对于x,同样满足相似三角形规律

 

可得出结论,给定任何一点xyz,它被挤压后的点坐标一定是 (nx/z, ny/z, unkown, 1)T, 挤压的变换的矩阵左乘xyz点即可得到这个点

根据齐次坐标性质,另如下中间的齐次坐标点同乘z,得到的坐标依然不变,那么经过挤压变换后的点,依然可以用右边齐次坐标表示

现在,已知挤压变换后的 x y w 三个分量, 已经可以写出变换矩阵的 1 2 4 行的值

那么,第三行的行向量又是多少呢? 

 

观察

  • 任何一个点在近的平面上经过挤压后不会发生任何变化,也就是,对于近平面上的点(x, y, n, 1) 经过矩阵变换后得到的点仍然是 (x, y, n, 1) (近平面的z值为n)
  • 任何一个点在远的平面上经过挤压后它的xy值会朝里挤,但z值不会发生变化

观察1

挤压后的近平面上的点依然是(x, y, n, 1),另每个分量乘以 n,得到(nx,ny,n^2, n),依然表示这个点,那么我们就探讨什么样的挤压矩阵左乘(x, y, n, 1) 会 得到 (nx,ny,n^2, n)

上面已经推导出挤压变换矩阵的第 1 2 4 行向量,思考: 第三行的向量 *(x, y, n, 1)= n^2

由于点乘的结果是n^2,则必定跟xy没关系,讨论 A和B的取值即可

这里A和B的值并不能确定,因为 A=n, B=0 成立,  A=0, B=n^2 也成立

 观察2 

远平面的中心点经过挤压后它的坐标仍不会变化,依然是(0,0,f)由于w分量需要存储z值,另分量同乘以f,得到下图最右侧齐次坐标,从上 近平面,我们依然讨论挤压矩阵的第三行向量, 向量 * (0, 0, f, 1) = f^2

综观察1,观察2,可以得出如下两个等式

 

n, y已知,两个式子,两个未知数, 很容易得出 A,B的值

至此可解出 Mpersp -> ortho 透视投影的Frustum挤压为正交相机的Cuboid 的变换矩阵

接下来,将 挤压变换矩阵 乘以 正交投影的投影矩阵 即可求出最终的透视投影矩阵

正交投影矩阵推导:Games101 正交投影矩阵推导-CSDN博客

 

关于任意一点挤压后向哪里移动的问题,简单推导了一下 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/744942.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Hugging Face获取BERT预训练模型

【图书推荐】《从零开始大模型开发与微调:基于PyTorch与ChatGLM》_《从零开始大模型开发与微调:基于pytorch与chatglm》-CSDN博客 BERT是一个预训练模型,其基本架构和存档都有相应的服务公司提供下载服务,而Hugging Face是一家目前专门免费提…

如何应对UI测试自动化的不稳定循环!

以下为作者观点: 当我加入UI自动化团队时,我很高兴能为新功能的自动化测试用例开发做出贡献。然而,我很快意识到团队花费了大量时间来修复之前迭代中不稳定的测试。这种情况让我感到困惑,因为当自动化测试脚本已知不稳定时&#…

HRSC2016 :推动光学遥感图像细粒度船舶检测的创新引擎(目标检测)

亲爱的读者们,您是否在寻找某个特定的数据集,用于研究或项目实践?欢迎您在评论区留言,或者通过公众号私信告诉我,您想要的数据集的类型主题。小编会竭尽全力为您寻找,并在找到后第一时间与您分享。 摘要&a…

LabVIEW在核磁共振实验室的应用

​核磁共振(NMR)实验室在进行复杂的核磁共振实验时,需要一个高效、灵活且易于操作的实验控制和数据采集系统。传统的NMR实验系统往往使用专门的硬件和软件,存在系统封闭、扩展性差、维护成本高等问题。为了解决这些问题&#xff0…

java设计模式(五)建造者模式(Builder Pattern)

1、模式介绍: 建造者模式(Builder Pattern)是一种创建型设计模式,它允许你创建一个复杂对象的表示,同时隐藏了创建细节。该模式将对象的构建过程和表示分离,使得相同的构建过程可以创建不同的表示。 2、应…

低成本的PS5存储扩容方案,铠侠SD10 PCle4.0固态硬盘扩容报告

低成本的PS5存储扩容方案,铠侠SD10 PCle4.0固态硬盘扩容报告 哈喽小伙伴们好,我是Stark-C~ 对于入手PS5的游戏玩家来说,机器到手第一步,那就是订阅索尼PlayStation Plus会员,可以尽情的玩耍上百款游戏3A大作&#xf…

web刷题记录

[HDCTF 2023]SearchMaster 打开环境,首先的提示信息就是告诉我们,可以用post传参的方式来传入参数data 首先考虑的还是rce,但是这里发现,不管输入那种命令,它都会直接显示在中间的那一小行里面,而实际的命令…

L59---101.对称二叉树(广搜)---Java版

1.题目描述 2.思路和知识点 (1)根节点为空: 如果根节点为空,树是对称的。 (2)递归检查: isMirror 方法递归检查两个子树是否是镜像对称的。 (3)辅助函数 isMirror: 1)如果两个节点都为空,它们是镜像对称的…

Java中特殊文件和日志技术

特殊文件和日志技术 特殊文件:Properties属性文件 特点: 特点一:都是键值对 特点二:键不能重复 特点三:文件后缀一般是Properties 作用: …

涵盖多项功能的文件外发系统,了解一下

伴随着业务范围的不断扩大,信息化的迅速发展,企业与客户、供应商等合作伙伴之间的文件交换也愈加频繁,尤其涉及到核心数据,像核心技术、设计图纸等敏感数据,对其的保护也是越发重视。文件外发系统,应运而生…

2024年河北省特岗教师报名流程详细图解

最近有很多学员们问特岗教师具体的报名流程 给大家安排! 特岗报名步骤 第步: 电脑搜索“河北特岗招聘”登录进行注册 第步:注册后重新登录 第步: 根据个人情况选择填写自己的学历 第步:填写个人信息 (需要上传的电子版的照片、普通话证、学历证书、教资证等) 第步:选择岗位报名…

【大数据技术原理与应用(概念、存储、处理、分析与应用)】第2章-大数据处理架构 Hadoop习题与知识回顾

文章目录 单选题多选题知识点回顾什么是Hadoop?Hadoop有哪些特性?Hadoop生态系统是怎么样的?(1) HDFS(2) HBase(3) MapReduce(4) Hive(5) Pig(6) Mahout(7) Zookeeper(8) Flume(9) Sqoop(10) Ambari 单选题 1、下列哪个不属于Hadoop的特性&am…

MySQL索引优化解决方案--索引优化(4)

排序优化 尽量避免使用Using FileSort方式排序。order by语句使用索引最左前列或使用where子句与order by子句条件组合满足索引最左前列。where子句中如果出现索引范围查询会导致order by索引失效。 优化案例 联表查询优化 分组查询优化 慢查询日志

2024年上半年软件设计师上午真题及答案解析

1.在计算机网络协议五层体系结构中,( B )工作在数据链路层。 A.路由器 B.以太网交换机 C.防火墙 D.集线器 网络层:路由器、防火墙 数据链路层:交换机、网桥 物理层:中继器、集线器 2.软件交付之后&#xff…

C++ | Leetcode C++题解之第174题地下城游戏

题目&#xff1a; 题解&#xff1a; class Solution { public:int calculateMinimumHP(vector<vector<int>>& dungeon) {int n dungeon.size(), m dungeon[0].size();vector<vector<int>> dp(n 1, vector<int>(m 1, INT_MAX));dp[n][m …

并发编程-04synchronized原理

并发编程-04synchronized原理 一 synchronized基础 1.1 并发安全问题 在学习synchronized原理之前&#xff0c;我们先要了解synchronized是干嘛用的&#xff0c;什么场景下需要使用它&#xff0c;以及它的使用方式有哪些&#xff1f;接下来我们去根据一个业务场景去了解下sy…

如何高效利用iCloud指南

苹果公司提供的iCloud服务是一个强大的云平台&#xff0c;它不仅允许存储数据&#xff0c;还支持跨设备的无缝同步和备份。通过充分利用iCloud&#xff0c;用户可以在多个设备上高效地访问和管理工作文件、照片、应用程序数据等等。具体分析如下&#xff1a; iCloud基础了解和配…

mysql workbench使用schema视图导出表和列结构到excel

目的&#xff1a;导出所有表和列的名字和注释 很多时候没有正规的数据库文档&#xff0c;为了快速交流啊&#xff0c;需要一个快捷的基础。数据库建表的时候可能有注释&#xff0c;也可能没有注释。有当然好&#xff0c;查看注释就能清楚很多&#xff0c;没有的话最好一个一个补…

这表单时而能使,时而不能使【debug】

项目地址&#xff1a;StrongBySteps-GitHub(一个学习记录与时间管理系统。) 这表单时而能使&#xff0c;时而不能使 在没有填写“绑定子任务”时&#xff0c;修改计划用时&#xff0c;比如我填写的是10。显示修改成功&#xff0c;但实际上并没有修改&#xff08;还是5&#xf…

单体架构改造为微服务架构之痛点解析

1.微服务职责划分之痛 1.1 痛点描述 微服务的难点在于无法对一些特定职责进行清晰划分&#xff0c;比如某个特定职责应该归属于服务A还是服务B? 1.2 为服务划分原则的痛点 1.2.1 根据存放主要数据的服务所在进行划分 比如一个能根据商品ID找出商品信息的接口&#xff0c;把…