计算机图形学入门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)=xa∗xb+ya∗yb
- 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⎠⎞=xa∗xb+ya∗yb+za∗zb
点乘主要就是为了找出夹角
投影的概念
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
=⎝⎛yazb−ybzazaxb−xazbxayb−yaxb⎠⎞
叉乘的主要目的是为了判定方向
变换
Scale(收缩变换)
变换中有一点很重要的就是缩放
举个例子:
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(反射)
Shear Matrix (切变)
这个图案,我们拉动的是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)
默认的选装方向是逆时针
下面的公式也就是默认情况下的旋转公式
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/w1⎠⎞w=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α0−sinα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⎠⎞