当前位置: 首页 > news >正文

Games 101 第四讲 Transformation Cont(视图变换和投影变换)

三维变换

三种变换

下面分别是放缩,旋转,平移
在这里插入图片描述
在这里插入图片描述
在旋转当中,绕着y轴旋转矩阵的顺序不一样,因为绕着y轴转在右手坐标系中
,z是第一轴,x是第二轴,而负号会加在第一轴上,因此负号在下面。

罗德里格斯公式

旋转能够分解成绕三轴旋转的组合,如图:
在这里插入图片描述
而罗德里格斯公式给出的是绕任意轴旋转的公式:
在这里插入图片描述
另外,旋转矩阵并不方便做插值:15°的旋转矩阵与25°的旋转矩阵相加除二并不是20°,因此引入了四元数。

相机原理

此部分原Games101没有,为更好展示变换场景引入:

相机成像

在这里插入图片描述
由上图所示,相机模型可以看成小孔成像模型,而为了方便研究,一般将成像面对称放到光心的前面,也就有了下图:
在这里插入图片描述

四大坐标系

在这里插入图片描述
在这里插入图片描述
四大坐标系与图中的编号一次对应

刚体变换(世界坐标->相机坐标)

刚体变换在图形学中也称观测变换:
我们一般用三个向量描述摄像机的方向:
在这里插入图片描述

已知在世界坐标系下的位置和方向,将相机坐标坐标系原点即可完成观测变换。
在这里插入图片描述
在这里插入图片描述

首先完成位置变换:先平移
在这里插入图片描述
然后完成旋转:再旋转
在这里插入图片描述
为方便先求旋转矩阵的逆变换,在逆变换中x,y,-z三条轴均会变成摄像机方向的三个向量。又由于是正交矩阵(因为是刚体变换),矩阵的逆就是矩阵的转置,由此求出。

透视变换与正交变换

由于摄像机其实是小孔成像(跟人眼一样),因此会有近大远小。
在这里插入图片描述
上图中两球大小相等,但在透视投影下大小由差异,而在正交投影下相同。
这是由于透视投影不同位置的光线进入光心的方向不同,不是平行的。

正交变换

在说明透视变换前先需要说明正交变换
在这里插入图片描述
如图所示,正交变换要做的事情其实是将要投影的空间压缩成一个以原点为中心,边长为2的立方体。
由此,定义空间的前后,左右,上下三组数据如图所示,可得到如下的矩阵:
在这里插入图片描述
注意,由于z轴是负的,前后的顺序是颠倒的。

投影变换

我们采用改良正交投影的方法实现透视投影。
在这里插入图片描述
如图所示,我们将原来是视锥的透视投影压成一个长方体,也就是正交投影。
但是压缩的方式不唯一,也就是不确定能压成哪一个长方体。
因此在压缩前需要确定几个参数:
在这里插入图片描述
首先要确定两个平面,近平面和远平面,知道这两个平面与原点的距离,分别为n和f。
然后确定这两个平面的性质,近平面变换前后位置不变大小不变,原平面位置不变。
由此,我们列出以下式子:
在这里插入图片描述
这里的z其实是n到f的任意一值
在这里插入图片描述
这样就确定了这个矩阵的三行。
这一步利用的条件是变换后远离近处的平面会变得和近处的平面一样大(x,y方向上)。
然后,再利用近处的平面不变:将n带入z
在这里插入图片描述
在这里插入图片描述

推断出在近处,unknow是n2n^2n2,由此:
在这里插入图片描述
再由远平面中心不变得:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
得:
在这里插入图片描述
然后再进行正交投影。

http://www.dtcms.com/a/347209.html

相关文章:

  • Java22 stream 新特性 窗口算子:GathererOp 和 GatherSink
  • Flink2.0学习笔记:使用HikariCP 自定义sink实现数据库连接池化
  • 权限管理模块
  • 用 Ansible 优雅部署 Kubernetes 1.33.3(RedHat 10)
  • 第一章:启航篇 —— 新晋工程师的生存与扎根 (1)
  • TensorFlow 深度学习 开发环境搭建
  • 通过Java连接并操作MySQL数据库
  • 多智能体篇:智能体的“语言”——ACL协议与消息队列实现
  • 高斯分布的KL散度计算
  • STM32学习笔记19-FLASH
  • 标准浪涌测试波形对比解析
  • linux内核 - vmalloc 介绍
  • Unity 字符串输出文字一样但Equals 判断为false
  • 图论与最短路学习笔记
  • CH2 线性表
  • LeetCode 分类刷题:2529. 正整数和负整数的最大计数
  • IDEA控制台乱码(Tomcat)解决方法
  • 2-4.Python 编码基础 - 流程控制(判断语句、循环语句、break 语句与 continue 语句)
  • MySQL存储过程详解
  • `strlen` 字符串长度函数
  • GEO优化服务:智能时代的全球竞争新赛道
  • VS Code 中创建和开发 Spring Boot 项目
  • python企微发私信
  • Text2API与Text2SQL深度对比:自然语言驱动的数据交互革命
  • 【40页PPT】数据安全动态数据脱敏解决方案(附下载方式)
  • C/C++ 头文件命名约定
  • stack,queue以及deque的介绍
  • 【Java学习笔记】18.反射与注解的应用
  • [e3nn] 模型部署 | TorchScript JIT | `@compile_mode`装饰器 | Cython
  • TypeScript的构造函数constructor用法理解