2D与3D图形的基本变换

1. 2d transformations

1.1缩放(Scaling)

在这里插入图片描述

其实这个转换非常简单,如图所示就是把x与y进行s倍的缩放,而我们图中的这个矩阵正好满足这一算法。

1.2镜像(Reflection)

在这里插入图片描述

这个镜像变换可以和上面的做类比,简单看一下就行。

1.3错切(Shearing)

在这里插入图片描述

当然这里不得不提两句,这个错切可以这么看,如左图未转换前最左边的一条竖直直线,按照这样的转换思路在右边就变成了一条斜线,其他线段以此类推。

其实可以想象成如左边这条x等于0的竖直线,这上面的一个个点往右边平移了ay个单位,变成了这样一条斜线。

这里提一个有趣的想法:

如果把一条直线看成是由有限的等大小的点组成(在计算机中当然实际当中我们对直线的定义还是无数个点组成的图形),那么经过我们如上线性变换的时候,每个点的坐标发生了变换最后构成了一条斜线(比如说3个点构成了一条直线,现在把这三个点的位置挪动了下,这样点与点之间实际上会有距离间隔,但是实际我们的屏幕看不出这个距离间隔)

让我们在更加形象的来了解一下

我们知道计算机是由一个个像素组成的,如下图所示:

在这里插入图片描述

一条直线的长度等于这一个个正方形小像素的变成之和,而通过我们的图形变换我们改变了这一个个小像素的实际位置(可以把一个小像素看成一个单位坐标),如我们上面转换成的斜线的长度就是这一个个小像素的斜边加起来的值。

1.4旋转(Rotation)

在这里插入图片描述

这里的推导非常简单,通过两个特例点`来将变换的矩阵推导出来,因为过于简单这里就不做过多赘述。(旋转我们默认是按圆点逆时针旋转)

这里留一个问题给大家,你怎么知道你特例点推出来矩阵后,你的图像整体都是如图上的规律变换的?

1.5平移(Translation)

在这里插入图片描述

按照我们上面的例子依葫芦画瓢就可以很轻易的得出如图所示的式子,但是这个式子后面多了一个矩阵,这样的表达式看着不是很简明了,为了处理这样的问题,我们的图形学引入了对向量和点的新的表达形式来解决了这一问题。

在这里插入图片描述

1.6逆变换(Inverse Transform)

在这里插入图片描述

2. 3d transformations

2.1 3d空间中点与向量的表达方式

在这里插入图片描述

2.2 3d空间当中的旋转
绕轴旋转:

在这里插入图片描述

上面的式子分别是一个实际的物体绕着不同轴旋转所对应的线性变换,那么实际应用当中我们是如何处理旋转的呢?

物体实际旋转的处理公式:

在这里插入图片描述

实际我们在处理一个物理旋转时,我们会将其拆分为该物体与各个轴之间的旋转变换,我们把如图上的那三个角称作欧拉角。

罗德里格旋转公式(Rodrigues’ rotation formula)

在这里插入图片描述

解释一下这个公式的一些参数:n为物体绕着旋转的轴(默认起点为原点,默认旋转方向为逆时针),a为旋转角度。

2.3四元数

最基本的定义:i的二次方 = j的二次方 = -1 且 ij = -ji = k (意味着不满足交换律)

q(四元数) = a + bi + cj + dk 且满足 i的平方 = j的平法 = k的平方 = ijk = -1

这里只展示四元数最基本的定义,后面我会出一篇文章详细讲解一下四元数的实际运用。

3.视图变换(ViewingTransformation)

​ 思考我们拍照的过程:我们的现实是3d坐标系,而我们用相机所拍摄到的照片是二维的,那么如何3d坐标系的影像处理成二维照片呢?这就是我们视图变换所做的事情。

在这里插入图片描述

如这副图所示,为了完成我们的变换我们首先得确定相机的位置和确定一个相机的正方向。

当然在我们的实际使用当中我们默认相机固定在原点,y轴为正方向,往-Z轴看。

3.1相机的摆放问题( 摄像机变换(camera tranformation))

在这里插入图片描述

​ 当然我们的相机不可能一直会在原点,就比如如图这样的情况,我们应该如何把相机回归原点呢?(实际上就是把etg坐标系所对应的图像对应到xy-z坐标所对应的图像)

这里可以这么理解:将我们etg坐标系的三个方向进行线性转换变成了xy-z坐标系的三个方向,那么其所对应到的图片经过这样的转换后效果是不变的(不同坐标系与图像的对应关系没有发生变化),这样的过程就好比把计算机从一个随机的位置移动到了原点。

当然我们求etg到对应xy-z这样过程比较困难,不妨先求其逆,也就是xy-z到etg这一线性变换的过程。

在这里插入图片描述

正交矩阵的逆等于其转置矩阵,为什么呢?

这里偷一张大佬的图

在这里插入图片描述

3.2 投影变换(projection tranformation)
3.21正交投影(Orthographic projection)

在这里插入图片描述

按照视觉效果来说正交投影应该是如上图所示的样子,但是实际处理起来太麻烦,因此我们在实际当中采用如下步骤:

在这里插入图片描述

实际上就是先进行了一个平移和一个缩放(缩放成一个边长为2中心在原点的正方形)

3.22透视投影(Perspective projection)

在这里插入图片描述

透视投影这一过程其实分为两个部分如上图所示先进行挤压,然后在进行我们上面所说的正交投影来完成这一过程,需要说明的是透视投影在挤压过程中,整个图像上的各个点z坐标是不变的,只是x和y轴上的坐标在发生变化。

那么究竟如何得到这一挤压矩阵呢?不急我们分成了3个步骤。

步骤1

在这里插入图片描述

首先在上面我们就强调了每个点的z值不会变化,通过观察我们得到了如上图所示的规律,因此我们可以获得我们的第一个特例,在我们获得的这个特里中乘以z,在通过推导可知,我们能够已知的矩阵信息如右边的矩阵图示。

(这里的乘以z其实两边应该都乘以z等式才能成立,这个乘以z的效果隐藏在那个4乘4矩阵里)

步骤2

在这里插入图片描述

​ 当z等于n时,也就是对应最上面那个挤压图最左边小的那个面,这个时候我们同样在右边乘以z(当然我们这边的z这个常数等于常数n)

步骤三

远处最中心的点在挤压过程中没有改变因此有了如图以下推导:
在这里插入图片描述

(tips:中心点的坐标得看坐标系,这里是特意这么设计的)

至此推导结束。

  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本人资源全部免费,更多资源请查看我的上传资源 ====================================================== 书 名:3D数学基础:图形与游戏开发 作 者:[美] 邓恩(Dunn F.),[美] 帕贝利(Parberry I.) 著;史银雪,陈洪,王荣静 译 出 版 社: 清华大学出版社 出版时间:2005-07-01 ISBN:9787302109464 纸书页数:380页 定 价:¥ 42.00 内容简介:《3D数学基础:图形与游戏开发》专业培训机构指定教学参考书,多家游戏开发企业共同推荐,游戏业界,探索游戏开发背后的核心秘密。《3D数学基础:图形与游戏开发》主要介绍了基本3D数学概念,这对电脑游戏开发人员和编程人员来说尤为重要。作者详尽地讨论了数学理论,并在必要时提供几何说明,帮助读者形成直观的3D感。书中还提供了将理论应用于实践的C++类,并且在每章结尾处提供练习。《3D数学基础:图形与游戏开发》介绍了基础概念,如向量、坐标空间、矩阵、变换、欧拉角、齐次坐标空间、几何图元、相交性检测和三角网格。 作者简介:Fletcher Dunn,是著名游戏开发公司Terminal Reality的主要开发人员,所参与开发的游戏包括《4×4DVO 2)、《夜曲》(Noturne),并且是《吸血莱恩》(BloodRayne)的主要负责人。他所开发的游戏遍及家用PC机的Windows、Machintosh、Dreamcast、PSⅡ、Xbox和GameCube几种主流平台。   Ian Parberry,是北德克萨斯大学计算机科学系的教授,在国际上被公认为是教授DirectX游戏开发的专家之一。 编辑推荐:《3D数学基础:图形与游戏开发》主要研究隐藏在3D几何世界背后的数学问题。涵盖了理论知识和C++实现代码。理论部分解释3D中数学和几何之间的关系,列出的技巧与公式可以当做参考手册以方便查找。实现部分演示了怎样用代码来实现这些理论概念。读者论论了3D中的方位,包括四元数和对不同表示技术之间的优劣比较。   描述了数学和几何的实际应用示例,提供了一些C++类和不同的矩阵类,每个类都完成特定的几何任务。   所有基本变换矩阵的完整来历。      专门用Python讲解计算机视觉编程 目录 第1章 简介 1.1 什么是3D数学 1.2 为什么选择本书 1.3 阅读本书需要的基础知识 1.4 概览 第2章 笛卡尔坐标系统 2.1 1D数学 2.2 2D笛卡尔数学 2.3 从2D3D 2.4 练习 第3章 多坐标系 3.1 为什么要使用多坐标系 3.2 一些有用的坐标系 3.3 嵌套式坐标系 3.4 描述坐标系 3.5 坐标系转换 3.6 练习 第4章 向量 4.1 向量——数学定义 4.2 向量——几何定义 4.3 向量与点 4.4 练习 第5章 向量运算 5.1 线性代数与几何 5.2 符号约定 5.3 零向量 5.4 负向量 5.5 向量大小(长度或模) 5.6 标量与向量的乘法 5.7 标准化向量 5.8 向量的加法和减法 5.9 距离公式 5.10 向量点乘 5.11 向量叉乘 5.12 线性代数公式 5.13 练习 第6章 3D向量类 …… 第7章 矩阵 第8章 矩阵和线性变换 第9章 矩阵的更多知识 第10章 3D中的方位与角位移 第11章 C++实现 第12章 几何图元 第13章 几何检测 第14章 三角网络 第15章 图形数学 第16章 可见性检测 第17章 后记 附录A 简单的数学概念 附录B 参考文献

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值