[学习笔记]计算机图形学(一)

计算机图形学学习笔记(一)

什么是计算机图形学

计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。

什么是好的画面?

从技术层面简单的评判标准:直接看画面是否足够“亮”。体现了图形学中的全局光照是否做的好,如果光照做的好,画面就亮,相反就暗。

线性代数

向量

向量的两个基础内容,方向和长度。

一、单位向量

长度为一的向量,叫单位向量。

a ^ \hat{a} a^是单位向量
a ^ = a ⃗ ∣ a ⃗ ∣ \hat{a}= { {\vec{a}} \over {|\vec{a}|}} a^=a a

二、向量的和

a ⃗ \vec{a} a ( x a , y a ) (x_a,y_a) (xa,ya)

b ⃗ \vec{b} b ( x b , y b ) (x_b,y_b) (xb,yb)

a ⃗ + b ⃗ = ( x a + x b , y a + y b ) \vec{a}+\vec{b}=(x_a+x_b,y_a+y_b) a +b =(xa+xb,ya+yb)

三、向量点乘

a ⃗ \vec{a} a ( x a , y a , z a ) (x_a,y_a,z_a) (xa,ya,za)
b ⃗ \vec{b} b ( x b , y b , z b ) (x_b,y_b,z_b) (xb,yb,zb)

a ⃗ \vec{a} a b ⃗ \vec{b} b 点乘表示为:
a ⃗ ⋅ b ⃗ = c o s θ ∣ a ⃗ ∣ ∣ b ⃗ ∣ {\vec{a}\cdot\vec{b}=cos \theta|\vec{a}||\vec{b}|} a b =cosθa ∣∣b
如果 a ⃗ \vec{a} a b ⃗ \vec{b} b 都是单位向量即 a ^ \hat{a} a^ b ^ \hat{b} b^
c o s θ = a ^ ⋅ b ^ cos \theta=\hat{a}\cdot\hat{b} cosθ=a^b^
a ⃗ \vec{a} a b ⃗ \vec{b} b 点乘还可以表示为:
a ⃗ ⋅ b ⃗ = a ⃗ T b ⃗ = ( 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}\cdot\vec{b}=\vec{a}^T\vec{b}= \begin{pmatrix} x_a&y_a&z_a\\ \end{pmatrix}} \begin{pmatrix} x_b\\ y_b\\ z_b\\ \end{pmatrix} =x_ax_b+y_ay_b+z_az_b a b =a Tb =(xayaza) xbybzb =xaxb+yayb+zazb
点乘的作用

  1. 求夹角

    将两个向量归一化得单位向量,这单位向量的点乘就是夹角的余弦值。

    即:

c o s θ = a ^ ⋅ b ^ cos \theta=\hat{a}\cdot\hat{b} cosθ=a^b^
​ 补充一下余弦定理和推导过程:

​ 余弦定理公式:
c o s θ = ∣ A C ⃗ ∣ 2 + ∣ A B ⃗ ∣ 2 − ∣ B C ⃗ ∣ 2 2 ∣ A C ⃗ ∣ ∣ A B ⃗ ∣ cos \theta={ {|\vec{AC}|^2+|\vec{AB}|^2-|\vec{BC}|^2}\over{2|\vec{AC}||\vec{AB}|}} cosθ=2∣AC ∣∣AB AC 2+AB 2BC 2
​ 余弦定理推导过程:

B C ⃗ = A C ⃗ − A B ⃗ B C ⃗ 2 = ( A C ⃗ − A B ⃗ ) 2 B C ⃗ T B C ⃗ = ( A C ⃗ − A B ⃗ ) T ( A C ⃗ − A B ⃗ ) ∣ B C ⃗ ∣ 2 = A C ⃗ T A C ⃗ − 2 A C ⃗ ⋅ A B ⃗ + A B ⃗ T A B ⃗ ∣ B C ⃗ ∣ 2 = ∣ A C ⃗ ∣ 2 − 2 A C ⃗ ⋅ A B ⃗ + ∣ A B ⃗ ∣ 2 ∣ B C ⃗ ∣ 2 = ∣ A C ⃗ ∣ 2 − 2 c o s θ ∣ A C ⃗ ∣ ∣ A B ⃗ ∣ + ∣ A B ⃗ ∣ 2 c o s θ = ∣ A C ⃗ ∣ 2 + ∣ A B ⃗ ∣ 2 − ∣ B C ⃗ ∣ 2 2 ∣ A C ⃗ ∣ ∣ A B ⃗ ∣ \vec{BC}=\vec{AC}-\vec{AB} \\ \vec{BC}^2=(\vec{AC}-\vec{AB})^2 \\ \vec{BC}^T\vec{BC}=(\vec{AC}-\vec{AB})^T(\vec{AC}-\vec{AB}) \\ |\vec{BC}|^2=\vec{AC}^T\vec{AC}-2\vec{AC}\cdot\vec{AB}+\vec{AB}^T\vec{AB} \\ |\vec{BC}|^2=|\vec{AC}|^2-2\vec{AC}\cdot\vec{AB}+|\vec{AB}|^2 \\ |\vec{BC}|^2=|\vec{AC}|^2-2cos \theta|\vec{AC}||\vec{AB}|+|\vec{AB}|^2 \\ cos \theta={ {|\vec{AC}|^2+|\vec{AB}|^2-|\vec{BC}|^2}\over{2|\vec{AC}||\vec{AB}|}} BC =AC AB BC 2=(AC AB )2BC TBC =(AC AB )T(AC AB )BC 2=AC TAC 2AC AB +AB TAB BC 2=AC 22AC AB +AB 2BC 2=AC 22cosθAC ∣∣AB +AB 2cosθ=2∣AC ∣∣AB AC 2+AB 2BC 2
​ 余弦定理也可以通过向量的点乘退导出来

  1. 求投影

    A B ⃗ \vec{AB} AB A C ⃗ \vec{AC} AC 的投影 A D ⃗ \vec{AD} AD

    A C ^ \hat{AC} AC^ A B ⃗ \vec{AB} AB 的单位向量

    ∣ A D ⃗ ∣ = ∣ A B ⃗ ∣ c o s θ |\vec{AD}|=|\vec{AB}|cos\theta AD =AB cosθ

    A D ⃗ = A C ^ ∣ A D ⃗ ∣ \vec{AD}=\hat{AC}|\vec{AD}| AD =AC^AD

  2. 接近和前后

    cos在0°到180°上值的分布情况

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-egZWC9gH-1681284850478)(https://songimghost.oss-cn-nanjing.aliyuncs.com/img/desmos-graph1.png)]

    A B ⃗ \vec{AB} AB 越接近 A C ⃗ \vec{AC} AC ,θ约小的时候, c o s θ cos\theta cosθ越接近1

    A B ⃗ \vec{AB} AB A C ⃗ \vec{AC} AC 方向相反时,θ大于90°, c o s θ cos\theta cosθ为负值,且越接近-1

四、向量叉乘

在右手坐标系中: A D ⃗ = A B ⃗ × A C ⃗ \vec{AD}=\vec{AB} \times \vec{AC} AD =AB ×AC

A D ⃗ \vec{AD} AD 垂直于 A C ⃗ \vec{AC} AC
A D ⃗ \vec{AD} AD 垂直于 A B ⃗ \vec{AB} AB

∣ A D ⃗ ∣ = s i n θ ∣ A B ⃗ ∣ ∣ A C ⃗ ∣ |\vec{AD}|=sin\theta|\vec{AB}||\vec{AC}| AD =sinθAB ∣∣AC

公式:

a ⃗ = ( x a , y a , z a ) \vec{a}=(x_a,y_a,z_a) a =(xa,ya,za)

b ⃗ = ( x b , y b , z b ) \vec{b}=(x_b,y_b,z_b) b =(xb,yb,zb)

a ⃗ × b ⃗ = ( 0 , − z a , y a z a , 0 , − x a − y a , x a , 0 ) ( x b y b z 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}\times\vec{b}=\begin{pmatrix}0,-z_a,y_a\\z_a, 0 ,-x_a\\-y_a,x_a,0 \end{pmatrix}\begin{pmatrix}x_b\\y_b\\z_b\end{pmatrix}=\begin{pmatrix}y_az_b-y_bz_a\\z_ax_b-x_az_b\\x_ay_b-y_ax_b \end{pmatrix} a ×b = 0,za,yaza,0,xaya,xa,0 xbybzb = yazbybzazaxbxazbxaybyaxb

叉乘的作用

  1. 判断左右

    在左手坐标系中, b ⃗ × a ⃗ \vec{b}\times\vec{a} b ×a 和z轴为正值,说明 b ⃗ \vec{b} b a ⃗ \vec{a} a 的顺时针方向。

  2. 判断内外

    ∵ ( C A ⃗ × C D ⃗ ) ⋅ ( A B ⃗ × A D ⃗ ) \because(\vec{CA}\times\vec{CD} )\cdot(\vec{AB}\times\vec{AD}) (CA ×CD )(AB ×AD )的z轴为正值

    ∵ ( A B ⃗ × A D ⃗ ) ⋅ ( B C ⃗ × B D ⃗ ) \because (\vec{AB}\times\vec{AD} )\cdot(\vec{BC}\times\vec{BD}) (AB ×AD )(BC ×BD )的z轴为正值

    ∴ \therefore D点在ABC中间

坐标系定义

坐标分解
∣ u ⃗ ∣ = ∣ v ⃗ ∣ = ∣ w ⃗ ∣ = 1 三个向量都是单位向量   u ⃗ ⋅ v ⃗ = v ⃗ ⋅ w ⃗ = w ⃗ ⋅ u ⃗ = 0 三个向量两两夹角都是 90 °   w ⃗ = u ⃗ × v ⃗ 向量 w ⃗ 垂直于向量 u ⃗ 和 v ⃗ 组成的平面   p ⃗ = ( ( p ⃗ ⋅ u ⃗ ) u ⃗ ( p ⃗ ⋅ v ⃗ ) v ⃗ ( p ⃗ ⋅ w ⃗ ) w ⃗ ) 世界坐标系向量在 u v w 坐标上的分量 |\vec{u}|=|\vec{v}|=|\vec{w}|=1\\ \\三个向量都是单位向量 \\~ \\\vec{u}\cdot\vec{v}=\vec{v}\cdot\vec{w}=\vec{w}\cdot\vec{u}=0\\ \\三个向量两两夹角都是90°\\ \\~\\ \vec{w}=\vec{u}\times\vec{v} \\向量\vec{w}垂直于向量\vec{u}和\vec{v}组成的平面 \\~\\ \vec{p}=\begin{pmatrix}(\vec{p}\cdot\vec{u})\vec{u}\\(\vec{p}\cdot\vec{v})\vec{v}\\(\vec{p}\cdot\vec{w})\vec{w}\end{pmatrix} \\世界坐标系向量在uvw坐标上的分量 u =v =w =1三个向量都是单位向量 u v =v w =w u =0三个向量两两夹角都是90° w =u ×v 向量w 垂直于向量u v 组成的平面 p = (p u )u (p v )v (p w )w 世界坐标系向量在uvw坐标上的分量

矩阵

单位矩阵

( 1 , 0 , 0 , 0 0 , 1 , 0 , 0 0 , 0 , 1 , 0 0 , 0 , 0 , 1 ) \begin{pmatrix}1,0,0,0\\0,1,0,0\\0,0,1,0\\0,0,0,1\end{pmatrix} 1,0,0,00,1,0,00,0,1,00,0,0,1

矩阵的乘积

( a 00 , a 01 , a 02 , a 03 a 10 , a 11 . a 12 , a 13 a 20 , a 21 , a 22 , a 23 a 30 , a 31 , a 32 , a 33 ) × ( b 00 , b 01 , b 02 , b 03 b 10 , b 11 . b 12 , b 13 b 20 , b 21 , b 22 , b 23 b 30 , b 31 , b 32 , b 33 ) = ( c 00 , c 01 , c 02 , c 03 c 10 , c 11 . c 12 , c 13 c 20 , c 21 , c 22 , c 23 c 30 , c 31 , c 32 , c 33 )                                        ( b 00 , b 01 , b 02 , b 03 b 10 , b 11 . b 12 , b 13 b 20 , b 21 , b 22 , b 23 b 30 , b 31 , b 32 , b 33 ) ( a 00 , a 01 , a 02 , a 03 a 10 , a 11 . a 12 , a 13 a 20 , a 21 , a 22 , a 23 a 30 , a 31 , a 32 , a 33 ) ( c 00 , c 01 , c 02 , c 03 c 10 , c 11 . c 12 , c 13 c 20 , c 21 , c 22 , c 23 c 30 , c 31 , c 32 , c 33 )   c 00 = a 00 b 00 + a 01 b 10 + a 02 b 20 + a 03 b 30 c 01 = a 00 b 01 + a 01 b 11 + a 02 b 21 + a 03 b 31 . . \begin{pmatrix}a_{00},a_{01},a_{02},a_{03}\\a_{10},a_{11}.a_{12},a_{13}\\a_{20},a_{21},a_{22},a_{23}\\a_{30},a_{31},a_{32},a_{33}\end{pmatrix}\times\begin{pmatrix}b_{00},b_{01},b_{02},b_{03}\\b_{10},b_{11}.b_{12},b_{13}\\b_{20},b_{21},b_{22},b_{23}\\b_{30},b_{31},b_{32},b_{33}\end{pmatrix}=\begin{pmatrix}c_{00},c_{01},c_{02},c_{03}\\c_{10},c_{11}.c_{12},c_{13}\\c_{20},c_{21},c_{22},c_{23}\\c_{30},c_{31},c_{32},c_{33}\end{pmatrix}\\~\\ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\begin{pmatrix}b_{00},b_{01},b_{02},b_{03}\\b_{10},b_{11}.b_{12},b_{13}\\b_{20},b_{21},b_{22},b_{23}\\b_{30},b_{31},b_{32},b_{33}\end{pmatrix}\\\begin{pmatrix}a_{00},a_{01},a_{02},a_{03}\\a_{10},a_{11}.a_{12},a_{13}\\a_{20},a_{21},a_{22},a_{23}\\a_{30},a_{31},a_{32},a_{33}\end{pmatrix}\begin{pmatrix}c_{00},c_{01},c_{02},c_{03}\\c_{10},c_{11}.c_{12},c_{13}\\c_{20},c_{21},c_{22},c_{23}\\c_{30},c_{31},c_{32},c_{33}\end{pmatrix}\\~\\ c_{00}=a_{00}b_{00}+a_{01}b_{10}+a_{02}b_{20}+a_{03}b_{30}\\c_{01}=a_{00}b_{01}+a_{01}b_{11}+a_{02}b_{21}+a_{03}b_{31}\\.\\. a00,a01,a02,a03a10,a11.a12,a13a20,a21,a22,a23a30,a31,a32,a33 × b00,b01,b02,b03b10,b11.b12,b13b20,b21,b22,b23b30,b31,b32,b33 = c00,c01,c02,c03c10,c11.c12,c13c20,c21,c22,c23c30,c31,c32,c33                                       b00,b01,b02,b03b10,b11.b12,b13b20,b21,b22,b23b30,b31,b32,b33 a00,a01,a02,a03a10,a11.a12,a13a20,a21,a22,a23a30,a31,a32,a33 c00,c01,c02,c03c10,c11.c12,c13c20,c21,c22,c23c30,c31,c32,c33  c00=a00b00+a01b10+a02b20+a03b30c01=a00b01+a01b11+a02b21+a03b31..

c c c矩阵的第 x x x行,第 y y y c x y c_{xy} cxy等于 a a a矩阵的第 x x x行和 b b b矩阵的第 y y y列相乘相加。

矩阵乘向量

( a 00 , a 01 , a 02 , a 03 a 10 , a 11 . a 12 , a 13 a 20 , a 21 , a 22 , a 23 a 30 , a 31 , a 32 , a 33 ) ( b 00 b 10 b 20 0 ) = ( a 00 b 00 + a 01 b 10 + a 02 b 20 + 0 a 10 b 00 + a 11 b 10 + a 12 b 20 + 0 a 20 b 00 + a 21 b 10 + a 22 b 20 + 0 a 30 b 00 + a 31 b 10 + a 32 b 20 + 0 ) \begin{pmatrix}a_{00},a_{01},a_{02},a_{03}\\a_{10},a_{11}.a_{12},a_{13}\\a_{20},a_{21},a_{22},a_{23}\\a_{30},a_{31},a_{32},a_{33}\end{pmatrix}\begin{pmatrix}b_{00}\\b_{10}\\b_{20}\\0\end{pmatrix}=\begin{pmatrix}a_{00}b_{00}+a_{01}b_{10}+a_{02}b_{20}+0\\a_{10}b_{00}+a_{11}b_{10}+a_{12}b_{20}+0\\a_{20}b_{00}+a_{21}b_{10}+a_{22}b_{20}+0\\a_{30}b_{00}+a_{31}b_{10}+a_{32}b_{20}+0\end{pmatrix} a00,a01,a02,a03a10,a11.a12,a13a20,a21,a22,a23a30,a31,a32,a33 b00b10b200 = a00b00+a01b10+a02b20+0a10b00+a11b10+a12b20+0a20b00+a21b10+a22b20+0a30b00+a31b10+a32b20+0

矩阵变换

缩放矩阵
( S 00 ,    0 ,    0 ,    0   0 , S 11 ,    0 ,    0   0 ,    0 , S 22 ,    0    0 ,    0 ,    0 ,    1 ) \begin{pmatrix}S_{00},~~0,~~0,~~0\\~0,S_{11},~~0,~~0\\~0,~~0,S_{22},~~0\\~~0,~~0,~~0,~~1\end{pmatrix} S00,  0,  0,  0 0,S11,  0,  0 0,  0,S22,  0  0,  0,  0,  1
平移矩阵
(    0 ,    0 ,    0 ,    T 04    0 ,    0 ,    0 ,    T 14    0 ,    0 ,    0 ,    T 24    0 ,    0 ,    0 ,    1 ) \begin{pmatrix}~~0,~~0,~~0,~~T_{04}\\~~0,~~0,~~0,~~T_{14}\\~~0,~~0,~~0,~~T_{24}\\~~0,~~0,~~0,~~1\end{pmatrix}   0,  0,  0,  T04  0,  0,  0,  T14  0,  0,  0,  T24  0,  0,  0,  1
旋转矩阵

矩阵转置

( 1 ,    2 3 ,    4 5 ,    6 7 ,    8 ) T = ( 1 ,    3 ,    5 ,    7 2 ,    4 ,    6 ,    8 ) \begin{pmatrix}1,~~2\\3,~~4\\5,~~6\\7,~~8\end{pmatrix}^T=\begin{pmatrix}1,~~3,~~5,~~7\\2,~~4,~~6,~~8\end{pmatrix} 1,  23,  45,  67,  8 T=(1,  3,  5,  72,  4,  6,  8)

猜你喜欢

转载自blog.csdn.net/dxs1990/article/details/130108702