计算机图形学入门05:投影变换

1.投影变换

        上一章已经介绍了投影变换,就是将三维图像投影到二维平面上,而投影变换又分为正交投影(Orthographic Projection)透视投影(Perspective Projection)。如下图:

正交投影

        没有近大远小的现象,无论图形与视点距离是远是近,图形多大画出来的图形就是多大。假设相机距离拉到无限远,远近物体的大小无限接近,所以显示不同距离的物体画面显示一样大小。正交投影会通过远近裁剪面、前后裁剪面、上下裁剪面六个面确定一个可视空间,在可视空间中的物体才能被看到,被映射在近裁剪面(Near clip plane)上。

透视投影

        有近大远小的现象,更接近肉眼看到的画面,应用更加常见。假设相机放在某一个点投射出一个视锥空间,在视锥空间中通过近裁剪面和远裁剪面(Far clip plane)可以裁出一个椎体空间,这个空间称为透视投影的可视空间,在可视空间里的物体被映射到近裁剪面上。

2.正交投影

2.1简单的理解

        1.相机在原点,方向是-z方向,上方向是Y轴。(上一章提到的相机标准位置)

        2.扔掉z轴。如下图所示,物体映射到平面上跟Z轴坐标无关(这样无法判断物体前后)。

        3.可以看出只要将物体平移和缩放到[-1,1]²矩阵里。到这个矩阵为了之后方便计算。

2.2正式推导正交投影矩阵

        我们想要将一个长方体[l,r]×[b,t]×[f,n]映射到标准立方体(canonical cube)([-1, 1]³)中,表示对空间的某一块进行正交投影。这个变换过程就是先平移再缩放。如下图所示:

        

        上图中的立方,l,r表示左边界和右边界,b,t表示下边界和上边界,f,n表示远裁剪面和近裁剪面。由于相机向-z方向看去,所以离相机越近意味着z值越大,离相机越远z值越小,所以这里z值越大距离相机越近,z值越小距离相机越远。

正交投影矩阵

        先平移到原点(两点相加除以2等于中心点),然后缩放(长、宽、高变为2)。原本长方体长宽高覆盖范围分别为r-l,t-b,n-f,缩放到2,因为标准立方体-1到1直接范围是2。

        合并后最终正交投影矩阵为:

3.透视投影

        在推导之前先回忆下齐次坐标的性质。坐标(x,y,z,1),(xk,yk,zk,k!=0),(xz,yz,zz,z!=0)在3D中都表示同一个点(x,y,z)。例如(1,0,0,1),(2,0,0,2)都表示(1,0,0)这个点。

3.1推导透视投影矩阵思路

        推导思路是将透视投影的视锥体“压扁”长方体,做正交投影。如下图所示:

        在挤压过程中,要保证近裁剪面不变,z值不发生变化,远裁剪面的中心点也不发生变化。挤压完成后就变成正交投影矩阵,所以要求透视投影矩阵就变成了先求透视投影到正交投影的变换矩阵,再进行正交投影矩阵。

3.2推导透视投影矩阵

        下图是透视投影的侧视图:

        如上图所示要将点(x,y,z)移到与点(x’,y’,z’)一样的高度和水平宽度,需要将y移到y’x移到x’。根据图中的相似三角形性质,可得出两者的关系:

        根据齐次坐标性质,给每个分量都乘以z,得到远裁剪面上的点与近裁剪面的点映射关系:

        那么得到的这个挤压后远裁剪面的点,肯定是由远裁剪面乘以某个变换矩阵得到,也就是透视投影到正交投影的变换矩阵。

        然后根据矩阵相乘的性质,反推算出这个变换矩阵,只有第三行还不知道。

        第三行势必跟z有关系,而在挤压过程中近裁剪面上任何的点z值都不发生变化的。而近裁剪面的z值就是n,近裁剪面矩阵乘以这个M(4x4)矩阵一定等于它自己(点坐标一样)。所以可以代入做如下处理。

       根据矩阵乘法反推,因此M(4x4)矩阵第三行必须是(0,0,A,B)AB为自己命名。推导:x*0+y*0+A*n+B*1 = n²

        所以得到An+B = n²

        又因为在挤压过程中远裁剪面上任何的点z值也都不发生变化的。拿到远裁剪面上的中心点(0,0,f),这个中心点在挤压前和挤压后x,y的值也不变。

        所以与近裁剪面同理,将远裁剪面中心点代入处理可得。

        将上面得到的关系表达式,整理计算得到AB的值。

        至此,矩阵第三行得到(0,0,n+f,-nf),代入可得透视投影到正交投影的变换矩阵。

        挤压完成变成正交投影之后,就交给正交投影矩阵完成了。

3.3透视投影矩阵

        上述已经求得了透视投影到正交投影的变换矩阵,再进行正交投影矩阵,即是透视投影矩阵。(矩阵相乘从右到左应用)

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

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

相关文章

通过定时器和脉冲控制LED

一、定时器 (一)定时器简介 STM32定时器是STM32微控制器中的重要块,用于生成精确的时间基准。它可以用于测量时间间隔、产生脉冲、实现定时中断等功能。通过配置寄存器,用户可以灵活地控制定时器的工作模式和参数,实现…

Visual Studio Code使用(C++项目新建,运行)

VS Code 直接在官网下载安装。 接下来安装插件,下图是C所需的对应插件 1.新建项目 VS Code下载安装完成后,直接进入欢迎页: 在访达/文件夹中新建一个文件夹,欢迎页点击【打开】,选择刚刚新建的文件夹。点击第一个图…

材质技术在AI去衣中的作用

随着人工智能技术的飞速发展,越来越多的应用场景开始涌现。其中,AI去衣技术作为一种新兴的图像处理技术,已经在很多领域得到了广泛的应用。而在AI去衣技术中,材质技术起到了至关重要的作用。本文将详细介绍材质技术在AI去衣中的作…

autocad背景色、引线文字大小

一、改变背景 在命令行输入op,回车,弹出配置对话框: 二、改变引线文字大小 选中引线,右键选择【特性】,在文字选项卡中设置文字高度:

【机器学习】探索未来科技的前沿:人工智能、机器学习与大模型

文章目录 引言一、人工智能:从概念到现实1.1 人工智能的定义1.2 人工智能的发展历史1.3 人工智能的分类1.4 人工智能的应用 二、机器学习:人工智能的核心技术2.1 机器学习的定义2.2 机器学习的分类2.3 机器学习的实现原理2.4 机器学习的应用2.5 机器学习…

JVM-之GC日志

一、 开启gc 日志 在项目中开启GC 日志打印后会查看gc 日志如下 nohup java -Xms768m -Xmx768m -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath./dumplog/dumplog.log -Xloggc:./dumplog/gc.log -XX:PrintGCDetails -XX:PrintGCDateStamps -XX:PrintHeapAtGC -jar xxxx…

校园安保巡逻机器人

2023年8月5日,陕西西安一高校实验室起火冒烟,导致学校化学实验室发生火灾。2022年8月3日,一名歹徒持械闯入江西吉安安福县城的一家私立幼儿园,对着无辜的幼儿行凶伤人,造成3死6伤。 像这样的事故有不断地发生&#xf…

[个人笔记] 记录docker-compose使用和Harbor的部署过程

容器技术 第三章 记录docker-compose使用和Harbor的部署过程 容器技术记录docker-compose使用和Harbor的部署过程Harborhttps方式部署:测试环境部署使用自签名SSL证书https方式部署:正式环境部署使用企业颁发的SSL证书给Docker守护进程添加Harbor的SSL证…

世界500强是如何解决邮件大附件影响业务问题的

电子邮件已成为众多企业沟通和文件传输的重要工具。然而,邮件发送大附件时,企业往往会遇到一系列挑战。本文将探讨邮件发送大附件的优劣势,分析其对业务可能造成的问题,并介绍500强企业是如何解决这些问题的。 邮件发送大附件的优…

NSS题目练习5

[NISACTF 2022]babyupload 打开后尝试上传php,jpg,png文件都没成功 查看源代码发现有个/source文件 访问后下载压缩包发现有一个python文件 搜索后知道大致意思是,上传的文件不能有后缀名,上传后生成一个uuid,并将uuid…

姚班带队OpenCSG,超越Devin,创造大模型编程领域新纪录

摘要 来自中国大模型初创公司OpenCSG推出的StarShip CodeGen Agent,以23.67%的成绩刷新了普林斯顿SWEBench(大模型真实独立编程评测)排行榜,取得了全球第二名的成绩,同时创造了非GPT-4o基模的最高纪录(SOTA)。 SWEBen…

Leecode---动态规划--爬楼梯 / 杨辉三角

爬楼梯题目: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 思路: 设跳上 n 级台阶有 f(n) 种跳法。在所有跳法中,青蛙的最后一步只有两种情况: 跳上…

java多态——向下转型

引入 前面我尝试了一下这个代码 package b;public class main_ {public static void main(String[] args) {//向上转型,父类的引用转向了子类的father_ animalnew graduate();Object objnew graduate();System.out.println(animal.name);System.out.println(obj.n…

【验证码识别】Yolov8入门到实战点选验证码数据集分类训练,孪生训练,导出onnx,搭建部署接口

【验证码识别】Yolov8入门到实战点选验证码数据集分类训练,孪生训练,导出onnx,搭建部署接口 文章目录 【验证码识别】Yolov8入门到实战点选验证码数据集分类训练,孪生训练,导出onnx,搭建部署接口声明一、标…

冯喜运:5.31晚间黄金原油行情还会跌吗?独家操作策略建议

【黄金消息面分析】:在金融市场的波动中,黄金作为传统的避险资产,其价格走势一直受到投资者的密切关注。周五(5月31日),现货黄金小幅波动,目前稳定在2340美元关口上方。美国核心PCE通胀数据作为美联储的首选通胀指标&a…

【力扣】LCR 130. 衣橱整理

一、题目描述 二、算法思路 这是⼀道非常典型的「搜索」类问题。 我们可以通过「深搜」或者「宽搜」,从 [0, 0] 点出发,按照题目的要求(选择 向右移动一格 或 向下移动一格,但不能移动到衣柜之外 )一直往 [m - 1, …

Nuxt3项目实现 OG:Image

目录 前言 1、安装 2、设置网站 URL 3、启用 Nuxt DevTools 4、创建您的第一个Og:Image a. 定义OG镜像 b. 查看您的Og:Image 5、自定义NuxtSeo模板 a. 定义 NuxtSeo模板 b. 使用其他可用的社区模板 6、创建自己的模板 a. 定义组件 BlogPost.vue b. 使用新模板 c.…

Tuxera Ntfs For Mac 2023的具体使用方法

大家都知道由于操作系统的原因,在苹果电脑上不能够读写NTFS磁盘,但是,今天小编带来的这款tuxera ntfs 2024 mac 破解版,完美的解决了这个问题。这是一款在macOS平台上使用的磁盘读写软件,能够实现苹果Mac OS X系统读写…

视频汇聚EasyCVR平台GA/T 1400视图库应用:助力社会治安防控效能提升

在信息化、智能化的时代浪潮下,公安视频图像信息应用系统的发展与应用显得尤为重要。GA/T 1400标准,全称为《公安视频图像信息应用系统》,作为公安行业的一项重要标准,其视图库的应用在提升公安工作效能、加强社会治安防控等方面发…

数据结构 | 二叉树(基本概念、性质、遍历、C代码实现)

1.树的基本概念 树是一种 非线性 的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。 把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 有一个特殊的结点,称为根…