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

2024-06-01 16:52

本文主要是介绍计算机图形学入门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透视投影矩阵

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

这篇关于计算机图形学入门05:投影变换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1021572

相关文章

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

MySQL DQL从入门到精通

《MySQLDQL从入门到精通》通过DQL,我们可以从数据库中检索出所需的数据,进行各种复杂的数据分析和处理,本文将深入探讨MySQLDQL的各个方面,帮助你全面掌握这一重要技能,感兴趣的朋友跟随小... 目录一、DQL 基础:SELECT 语句入门二、数据过滤:WHERE 子句的使用三、结果排序:ORDE