基础变换(二维)

三维变化与二维变换矩阵类似

齐次坐标下的基础变换

Scale:

\[S(s_x,s_y) =\begin{pmatrix}
s_x &0 &0\\
0 & s_y & 0 \\
0&0&1
\end{pmatrix}\]

Rotation:

\[R(\alpha) = \begin{pmatrix}
\cos\alpha& - \sin\alpha & 0 \\
\sin\alpha & \cos \alpha &0 \\
0&0&1
\end{pmatrix}\]

Translation:

\[T(t_x,t_y)=\begin{pmatrix}
1 & 0 & t_x \\
0 &1& t_y\\
0 &0& 1
\end{pmatrix}\]

组合变换(Compositon Transform)

矩阵变换把先变化的矩阵放到右边:矩阵运算是从右向左

四元数与旋转公式

四元数

留个坑,下周再填

罗德里格斯旋转公式

Rodrigue's Rotation Formula: Raotation by angle \(\alpha\) around axis \(\vec{n}\)

\[R(\vec{n},\alpha)=cos(\alpha)I+(1-cos(\alpha))nn^{T}+\sin(\alpha)
\begin{matrix} \underbrace{
\begin{pmatrix}
0 & -n_z & n_y \\
n_z & 0 & -n_x \\
-n_y & n_x & 0
\end{pmatrix}
} \\ N\end{matrix}\]

In the formula

I :Identity matrix

最后乘积的结果是一个3*3的矩阵

MVP变换

Model Transformation

引用博客:MVP变换

对模型进行模型变换时,需要注意坐标系是在世界坐标系原点。当绕模型中心进行变换时,首先要将模型的中心点移动到世界坐标系的原点,之后在进行模型变换,之后移回到原来的位置。

矩阵描述为:$$M=M_t^{-1} M_r M_s M_t$$

View/Camera Transformation

这个过程是将确定相机的位置:将相机的位置通过下面的过程移动到固定的点和方向。

(1) 相机的位置固定在世界坐标系的原点: \(\vec{e}\)

(2) 相机的朝向 \(-\vec{Z}\): \(\hat{g}\)

(3) 相机的向上方向\(\vec Y\): \(\hat t\)

基于上述过程,要求视图变换矩阵\(M_{view}\)分别求相机的平移矩阵\(T_{view}\)、旋转矩阵\(R_{view}\)

\[T_{view} = \begin{bmatrix}
1 & 0 & 0 & -x_{\vec{e}} \\
0 & 1 & 0 & -y_{\vec{e}} \\
0 & 0 & 1 & -z_{\vec{e}} \\
0 & 0 & 0 & 1
\end{bmatrix}\]

求旋转矩阵时,直接求相机旋转到原点的矩阵不容易求解,但求原点到相机位置的旋转矩阵容易求。

所以先求原点到相机的旋转矩阵:Z To \(-\hat{g}\)、Y To \(\hat{t}\)、最后保证\(\vec{X}\) To \((\hat g \times \hat t)\) 朝向的方向,原因是保证符合右手坐标系。

\[R_{view}^{-1}=\begin{bmatrix}
x_{\hat{g} \times \hat{t}}&x_{t}&x_{-g}&0\\
y_{\hat{g} \times \hat{t}}&x_{t}&y_{-g}&0\\
z_{\hat{g} \times \hat{t}}&x_{t}&z_{-g}&0\\
0&0&0&1
\end{bmatrix}\]

因为\(R_{view}^{-1}\)是正交矩阵,所以逆矩阵和旋转矩阵相同。

\[R_{view} =\begin{bmatrix}
x_{\hat{g} \times \hat{t}}&y_{\hat{g} \times \hat{t}}&z_{\hat{g} \times \hat{t}}&0\\
x_{t}&y_{t}&z_{t}&0\\
x_{-g}&y_{-g}&z_{-g}&0\\
0&0&0&1
\end{bmatrix}\]

所以

\[M_{view} = R_{view} T_{view}=
\begin{bmatrix}
x_{\hat{g} \times \hat{t}}&y_{\hat{g} \times \hat{t}}&z_{\hat{g} \times \hat{t}}&0\\
x_{t}&y_{t}&z_{t}&0\\
x_{-g}&y_{-g}&z_{-g}&0\\
0&0&0&1
\end{bmatrix}
\]
\[\begin{bmatrix}
1 & 0 & 0 & -x_{\vec{e}} \\
0 & 1 & 0 & -y_{\vec{e}} \\
0 & 0 & 1 & -z_{\vec{e}} \\
0 & 0 & 0 & 1
\end{bmatrix}\]

Projection Transformation

个人理解投影变换的终极目的是让物体挤压在一个单位大小的平面(空间)内。原因先挖个坑。

Orthographic Projection

简单理解就是将物体的忽略z坐标,将模型通过Scale To [-1,-1]^2平面内。

真正的操作:

(1) 移动模型的位置到原点

(2) 缩放模型到空间[-1,1]^3中

Perspective Projection

正视投影的光线可以看成是一个立方体,如上图。透视投影的光线可以看成一个视锥,如下图。

透视变换可以分为两个步骤进行:

(1) 将视锥挤压到立方体内\(M_{persp->ortho}\)

(2) 将挤压后的视锥进行正视投影变换$M_{ortho}

挤压时的变换矩阵\(M_{persp->ortho}=\begin{bmatrix}
n&0&0&0\\
0&n&0&0\\
0&0&n+f&-nf\\
0 & 0&1&0
\end{bmatrix}\)

所以投影变换矩阵

\[M_{proj}=M_{ortho}M_{persp->ortho}
\]

【Notes_3】现代图形学入门——基础变换、MVP变换模型的更多相关文章

  1. [计算机图形学]视图变换:MVP变换、视口变换

    目录 一.MVP变换 1. 模型变换 1.1 缩放矩阵 1.2 旋转矩阵 1.3 平移矩阵 2. 视角变换 3. 投影变换 二.Viewport变换 一.MVP变换 MVP变换是模型变换(M).视角变 ...

  2. SVG 2D入门6 - 坐标与变换

    坐标系统 SVG存在两套坐标系统:视窗坐标系与用户坐标系.默认情况下,用户坐标系与视窗坐标系的点是一一对应的,都为原点在视窗的左上角,x轴水平向右,y轴竖直向下:如下图所示: SVG的视窗位置一般是由 ...

  3. 【Notes】现代图形学入门_01

    跟着闫令琪老师的课程学习,总结自己学习到的知识点 课程网址GAMES101 B站课程地址GAMES101 课程资料百度网盘[提取码:0000] 计算机图形学概述 计算机图形学是一门将模型转化到屏幕上图 ...

  4. 浅入kubernetes(1):Kubernetes 入门基础

    目录 Kubernetes 入门基础 Introduction basic of kubernetes What Is Kubernetes? Components of Kubernetes Kub ...

  5. 【Notes_4】现代图形学入门——光栅化、离散化三角形、深度测试与抗锯齿

    光栅化 Viewport Transform(视口变换) 将经过MVP变换后得到的单位空间模型变换到屏幕上,屏幕左边是左下角为原点. 所以视口变换的矩阵 \[M_{viewport}=\begin{p ...

  6. mybatis入门基础(二)----原始dao的开发和mapper代理开发

    承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...

  7. 01shell入门基础

    01shell入门基础 为什么学习和使用shell编程 shell是一种脚本语言,脚本语言是相对于编译语言而言的.脚本语言不需要编译,由解释器读取程序并且执行其中的语句,而编译语言需要编译成可执行代码 ...

  8. Markdown入门基础

    // Markdown入门基础 最近准备开始强迫自己写博文,以治疗严重的拖延症,再不治疗就“病入骨髓,司命之所属,无奈何”了啊.正所谓“工欲善其事,必先利其器”,于是乎在写博文前,博主特地研究了下博文 ...

  9. JavaScript入门基础

    JavaScript基本语法 1.运算符 运算符就是完成操作的一系列符号,它有七类: 赋值运算符(=,+=,-=,*=,/=,%=,<<=,>>=,|=,&=).算术运 ...

随机推荐

  1. (22)zip命令:压缩文件或目录&&unzip命令:解压zip文件

    1.zip 命令基本格式如下: [root@localhost ~]#zip [选项] 压缩包名 源文件或源目录列表 注意,zip 压缩命令需要手工指定压缩之后的压缩包名,注意写清楚扩展名,以便解压缩 ...

  2. .Net Core 使用 CSRedisCore 访问 Redis 的哨兵和主从复制

    一.创建Redis服务 运行环境是Window,安装Redis请看:安装教程. 直接开始创建Redis服务,演示就创建两个一主一从,先把安装路径下的 redis.windows.conf 文件复制一份 ...

  3. MySQL 中的自增主键

    MySQL 的主键可以是自增的,那么如果在断电重启后新增的值还会延续断电前的自增值吗?自增值默认为1,那么可不可以改变呢?下面就说一下 MySQL 的自增值. 特点 保存策略 1.如果存储引擎是 My ...

  4. CPU中的程序是怎么运行起来的(预告篇)

    总述     最近一位朋友问我,我开发的代码是怎么运行起来的,我就开始给他介绍代码的预编译.汇编.编译.链接然后到一般的文件属性,再到代码运行.但是大佬问了我一句,CPU到底是怎么执行到每一个逻辑的, ...

  5. python+fiddler 抓取抖音数据包并下载抖音视频

    这个我们要下载视频,那么肯定首先去找抖音视频的url地址,那么这个地址肯定在json格式的数据包中,所以我们就去专门查看json格式数据包 这个怎么找我就不用了,直接看结果吧 你找json包,可以选大 ...

  6. Codeforces Round #670 (Div. 2) B. Maximum Product (暴力)

    题意:有一长度为\(n\)的序列,求其中任意五个元素乘积的最大值. 题解:先排序,然后乘积能是正数就搞正数,模拟一下就好了. 代码: int t; ll n; ll a[N]; int main() ...

  7. 梨子带你刷burp练兵场(burp Academy) - 服务器篇 - Sql注入 - SQL injection UNION attack, determining the number of columns returned by the query

    目录 SQL injection UNION attack, determining the number of columns returned by the query SQL injection ...

  8. Base64 编码原理

    什么是 Base64 编码 Base64 编码是最常见的编码方式,基于 64 个可打印字符来表示任意二进制数据的方法,是从二进制转换到可见字符的过程. 使用场景 数据加密或签名通过 Base64 转换 ...

  9. python之字符串replace的方法

    1.描述 replace()方法把字符串中的old(旧字符串)替换成new(新字符串),如果有指定第三个参数max,则替换的不超过max次 2.语法 str.replace(old,new[,max] ...

  10. MD5强碰撞

    关卡一         md5弱比较,为0e开头的会被识别为科学记数法,结果均为0 payload param1=QNKCDZO&param2=aabg7XSs 关卡二         md5 ...