计算机图形学入门0

本文是我再B站上GAMES101上的学习地址-地址如下:

地址

基础

向量:

向量表示的是一个方向

向量的两个属性:

①:方向(核心属性)

②:长度(非核心)

单位向量的定义

就是长度为1的向量

向量的求和

一个向量,在图形学中,默认的就是列向量.

举个例子

A(0,0) B(2,3)

A B ⃗ \vec{AB} AB

就可以表示为:

A = ( x y ) A=\begin{pmatrix} x \\y \end{pmatrix} A=(xy)

然后就是逆置,逆置
A T = ( x , y ) A^{T}=\begin{pmatrix} x ,& y \end{pmatrix} AT=(x,y)
向量的点乘(Dot product)和叉乘(Cross product)

Dot product

给两个向量,然后他们之间的夹角

a ⃗ . b ⃗ = ∣ ∣ a ⃗ ∣ ∣ ∣ ∣ b ⃗ ∣ ∣ C o s Θ \vec{a}.\vec{b}=||\vec{a}|| ||\vec{b}|| Cos\Theta a .b =a b CosΘ

向量点乘的属性

a ⃗ . b ⃗ = b ⃗ . a ⃗ \vec{a}.\vec{b}=\vec{b}.\vec{a} a .b =b .a

a ⃗ . ( b ⃗ + c ⃗ ) = a ⃗ . b ⃗ + a ⃗ . c ⃗ \vec{a}.(\vec{b}+\vec{c})=\vec{a}.\vec{b}+\vec{a}.\vec{c} a .(b +c )=a .b +a .c

( k a ⃗ ) . b ⃗ = a ⃗ . ( k b ⃗ ) = k ( a ⃗ . b ⃗ ) (k\vec{a}).\vec{b}=\vec{a}.(k\vec{b})=k(\vec{a}.\vec{b}) (ka ).b =a .(kb )=k(a .b )

然后我去好好的复习了一下,矩阵的乘法

下面是一些古老的原则.

矩阵一开始就是为了方便的表达 多项式之间的关系而出来的

矩阵的乘法是很重要的.

矩阵的乘法可以通过多项式之间的乘积来推导得出.

Cartesian 笛卡尔积

Coordiantates 坐标

  • In2D

a ⃗ . b ⃗ = A = ( x a y a ) . ( x b y b ) = x a ∗ x b + y a ∗ y b \vec{a}.\vec{b}=A=\begin{pmatrix} x_{a} \\ y_{a} \end{pmatrix}.\begin{pmatrix} x_{b} \\ y_{b} \end{pmatrix}=x_{a}*x_{b}+y_{a}*y_{b} a .b =A=(xaya).(xbyb)=xaxb+yayb

  • In3D

a ⃗ . b ⃗ . c ⃗ = A = ( x a y a z a ) . ( x b y b z b ) = x a ∗ x b + y a ∗ y b + z a ∗ z b \vec{a}.\vec{b}.\vec{c}=A=\begin{pmatrix} x_{a} \\ y_{a}\\z_{a} \end{pmatrix}.\begin{pmatrix} x_{b} \\ y_{b}\\z_{b} \end{pmatrix}=x_{a}*x_{b}+y_{a}*y_{b}+z_{a}*z_{b} a .b .c =A=xayaza.xbybzb=xaxb+yayb+zazb

点乘主要就是为了找出夹角

投影的概念

计算机图形学入门0

Cross product 叉乘

向量的叉乘不满足交换律

向量叉乘的公式
a ⃗ . b ⃗ = ( y a z b − y b z a z a x b − x a z b x a y b − y a x b ) \vec{a}.\vec{b}=\begin{pmatrix} y_{a}z_{b} - y_{b}z_{a}\\ z_{a}x_{b} - x_{a}z_{b}\\x_{a}y_{b} - y_{a}x_{b} \end{pmatrix} a .b =yazbybzazaxbxazbxaybyaxb

叉乘的主要目的是为了判定方向

变换

Scale(收缩变换)

变换中有一点很重要的就是缩放

举个例子:

计算机图形学入门0
x ′ = s x _x{'}=sx x=sx

y ′ = s y _y{'}=sy y=sy

矩阵形式如下:
$$
\begin{bmatrix}
{x}’\ {y}’

\end{bmatrix}=\begin{bmatrix}
s & 0\
0 & s
\end{bmatrix} \begin{bmatrix}
x\ y

\end{bmatrix}
$$
S就是缩放的比例.

这个式子还不是很完善的,X和Y的缩放比例不一定是一样的啊.
$$
\begin{bmatrix}
{x}’\ {y}’

\end{bmatrix}=\begin{bmatrix}
s_{x} & 0\
0 & s_{y}
\end{bmatrix} \begin{bmatrix}
x\ y

\end{bmatrix}
$$

Reflection Matrix(反射)

计算机图形学入门0

Shear Matrix (切变)

计算机图形学入门0

这个图案,我们拉动的是x轴,y轴都是不变的
$$
\begin{bmatrix}
{x}’\ {y}’

\end{bmatrix}=\begin{bmatrix}
1 & a\
0 & 1
\end{bmatrix} \begin{bmatrix}
x\ y

\end{bmatrix}
$$

Rotate(旋转)

默认情况下,我们默认旋转中心为(0,0)

默认的选装方向是逆时针

下面的公式也就是默认情况下的旋转公式

计算机图形学入门0

Linear Transforms 线性变换

Matrices 矩阵

Linear Transforms = Matrices 是可以相互转换的 注意维度的问题

Homogeneous coordinates 专有名词,齐次坐标

Homogeneous coordinates 其次坐标

首先我们要需要知道.平移变换的公式是什么

公式如下: 非常的好理解,不理解的,可以问我.
$$
\begin{bmatrix}
{x}’\ {y}’

\end{bmatrix}=\begin{bmatrix}
a & b\
c & d
\end{bmatrix} \begin{bmatrix}
x\ y
\end{bmatrix}+
\begin{bmatrix}
t_{x}\ t_{y}

\end{bmatrix}
$$

平移变换并不是一个线性变换.

那怎么解决这个问题呢.

这时候,其次坐标就出现了.

Homogenous Coordinates

我们增加一个维度在x,y上
2 D p o i n t = ( x y 1 ) 2D point=\begin{pmatrix} x \\y\\1 \end{pmatrix} 2Dpoint=xy1

2 D v e c t o r = ( x y 0 ) 2D vector=\begin{pmatrix} x \\y\\0 \end{pmatrix} 2Dvector=xy0

平移的变换公式

$$
\begin{pmatrix}
{x}’\{y}’\{w}’
\end{pmatrix}

\begin{pmatrix}
1& 0 & t_{x}\
0& 1 & t_{y}\
0& 0 & 1
\end{pmatrix}
\cdot
\begin{pmatrix}
x\y \ 1
\end{pmatrix}

\begin{pmatrix}
x+t_{x}\ y+t_{y}\1
\end{pmatrix}
$$

Homogenous Coordinates calculate 其次坐标 计算

vector + vector =vector

point - point =vector

point +vector=point

point+point=??

In homogeneous coordinates.
( x y w ) = ( x / w y / w 1 ) w ≠ 0 \begin{pmatrix} x\\y \\w \end{pmatrix}=\begin{pmatrix} x/w\\y/w \\1 \end{pmatrix} w\neq 0 xyw=x/wy/w1w=0

Affine Transformations 仿射变化

$$
\begin{pmatrix}
{x}’\ {y}’

\end{pmatrix}=\begin{pmatrix}
a & b\ c& d
\end{pmatrix} \cdot \begin{pmatrix}
x\ y
\end{pmatrix}+\begin{pmatrix}
t_{x}\t_{y}

\end{pmatrix}
$$

我们把原来的变换变成其次变换.

Scale Coordinates

S ( S x , S y ) = ( S x 0 0 0 S y 0 0 0 1 ) S(S_{x},S_{y})=\begin{pmatrix} S_{x}& 0 &0 \\ 0& S_{y} & 0\\ 0& 0 &1 \end{pmatrix} S(Sx,Sy)=Sx000Sy0001

Rotation Coordinates

R ( α ) = ( cos ⁡ α − sin ⁡ α 0 sin ⁡ α cos ⁡ α 0 0 0 1 ) R( \alpha )=\begin{pmatrix} \cos \alpha & -\sin\alpha &0 \\ \sin\alpha& \cos \alpha & 0\\ 0& 0 &1 \end{pmatrix} R(α)=cosαsinα0sinαcosα0001

Translation

T ( t x . t y ) = ( 1 0 t x 0 1 t y 0 0 1 ) T(t_{x}.t_{y})=\begin{pmatrix} 1 & 0 & t_{x}\\ 0 & 1 & t_{y}\\ 0 & 0 & 1 \end{pmatrix} T(tx.ty)=100010txty1