Shader理论(3):变换相关的矩阵

目录

前言:

一、什么是矩阵的本质?

二、矩阵的几个基本变换应用

2.1 Scale 缩放

2.2 Reflection 镜像

2.3 Shear 斜切

2.4 Rotate 旋转

2.5 Translation 平移

三、齐次坐标 Homogenous Coordinates

3.1 Scale

3.2 Rotation

3.3 Translation 

四、其他

参考资料


前言:

该部分为GAMERS101课程(第三讲 Transformation)中关于矩阵转换的基础知识整理,前置知识为矩阵的基本运算

一、什么是矩阵的本质?

Q: What is the essence of matrix?

A: Transform.

二、矩阵的几个基本变换应用

说明:以下所有操作都是暂时基于二维变换,不涉及三维变换操作

2.1 Scale 缩放

\begin{pmatrix} x'\\ y' \end{pmatrix} = \begin{pmatrix} s&0 \\ 0&s \end{pmatrix} * \begin{pmatrix} x\\ y \end{pmatrix}=\begin{pmatrix} sx\\ sy \end{pmatrix}

其中s为缩放系数

2.2 Reflection 镜像

\begin{pmatrix} x'\\ y' \end{pmatrix}=\begin{pmatrix} -1&0\\ 0&1 \end{pmatrix}*\begin{pmatrix} x\\ y \end{pmatrix}=\begin{pmatrix} -x\\ y \end{pmatrix}

沿着y轴做镜像

2.3 Shear 斜切

\begin{pmatrix} x'\\ y' \end{pmatrix}=\begin{pmatrix} 1&a\\ 0&1 \end{pmatrix}*\begin{pmatrix} x\\ y \end{pmatrix}=\begin{pmatrix} x+ay\\ y \end{pmatrix}

沿着x轴做斜切,a控制着斜切程度

2.4 Rotate 旋转

\begin{pmatrix} x'\\ y' \end{pmatrix}=\begin{pmatrix} cos\theta &-sin\theta\\ sin\theta&cos\theta \end{pmatrix}*\begin{pmatrix} x\\ y \end{pmatrix}=\begin{pmatrix} x*cos\theta-sin\theta\\ sin\theta+y*cos\theta \end{pmatrix}

θ为旋转角度,默认以逆时针,绕原点为准

以上四种变换为线性变换(Linear Transform),他们的形式可以统一写为\begin{pmatrix} x'\\ y' \end{pmatrix}=M*\begin{pmatrix} x\\ y \end{pmatrix}


2.5 Translation 平移

平移不是线性变换,其矩阵的形式与上面四种不同

x' = x + t_{x}

y' = y + t_{y}

\begin{pmatrix} x'\\ y' \end{pmatrix} = \begin{pmatrix} x\\ y \end{pmatrix}+\begin{pmatrix} t_{x}\\ t_{y} \end{pmatrix}

因此引入齐次坐标的概念

三、齐次坐标 Homogenous Coordinates

即在原先矩阵的基础上多加一行一列,这样可以使平移变换也写成\begin{pmatrix} x'\\ y' \end{pmatrix}=M*\begin{pmatrix} x\\ y \end{pmatrix}的形式

 因此平移变换可以写为以下形式:

\begin{pmatrix} x'\\ y'\\ w' \end{pmatrix}=\begin{pmatrix} 1&0&t_{x}\\ 0&1&t_{y}\\ 0&0&1 \end{pmatrix}*\begin{pmatrix} x\\ y\\ 1 \end{pmatrix}=\begin{pmatrix} x+t_{x}\\ y+t_{y}\\ 1 \end{pmatrix}

注:w的含义可以理解为,当其为1时,是一个齐次坐标写法的点point;当其为0时,是一个向量vector

vector + vector = vector

point - point = vector

point + vector = point

point + point = midpoint*2

因此,上述变换矩阵M可以写为以下所示:

3.1 Scale

S(s_{x},s_{y}) = \begin{pmatrix} s_{x}&0&0\\ 0&s_{y}&0\\ 0&0&1 \end{pmatrix}

3.2 Rotation

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

3.3 Translation 

T(t_{x},t_{y}) = \begin{pmatrix} 1&0&t_{x}\\ 0&1&t_{y}\\ 0&0&1 \end{pmatrix}


由于矩阵运算不满足交换律,但是满足结合律,所以

A_{n}(...A_{2}(A_{1})(X)) = (A_{n}...A_{2}A{1})X

最后,在三维空间中点的变换矩阵如下所示:

\begin{pmatrix} x'\\ y'\\ z'\\ 1 \end{pmatrix}=\begin{pmatrix} a&b&c&t_{x}\\ d&e&f&t_{y}\\ g&h&i&t_{z}\\ 0&0&0&1 \end{pmatrix}*\begin{pmatrix} x\\ y\\ z\\ 1 \end{pmatrix}


四、其他

在做C# for Grasshopper开发中,物体有scale和rotation方法,但是时常没有translation方法,就是因为此时的坐标使用了float3来储存,所以难以进行平移变换。此时需要定义一个变量(一般var xf),将所有变换操作写在一个Transform中应用,其原理就在于此。

参考资料:

[1] GAMES101-现代计算机图形学入门-闫令琪_哔哩哔哩_bilibili

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值