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

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

什么是计算机图形学

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

什么是好的画面?

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

线性代数

向量

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

一、单位向量

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

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

二、向量的和

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

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

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

三、向量点乘

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

a⃗\vec{a}ab⃗\vec{b}b点乘表示为:
a⃗⋅b⃗=cosθ∣a⃗∣∣b⃗∣ {\vec{a}\cdot\vec{b}=cos \theta|\vec{a}||\vec{b}|} ab=cosθa∣∣b
如果a⃗\vec{a}ab⃗\vec{b}b都是单位向量即 a^\hat{a}a^ b^\hat{b}b^
cosθ=a^⋅b^ cos \theta=\hat{a}\cdot\hat{b} cosθ=a^b^
a⃗\vec{a}ab⃗\vec{b}b点乘还可以表示为:
a⃗⋅b⃗=a⃗Tb⃗=(xayaza)(xbybzb)=xaxb+yayb+zazb {\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 ab=aTb=(xayaza)xbybzb=xaxb+yayb+zazb
点乘的作用

  1. 求夹角

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

    即:

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

​ 余弦定理公式:
cosθ=∣AC⃗∣2+∣AB⃗∣2−∣BC⃗∣22∣AC⃗∣∣AB⃗∣ cos \theta={{|\vec{AC}|^2+|\vec{AB}|^2-|\vec{BC}|^2}\over{2|\vec{AC}||\vec{AB}|}} cosθ=2∣AC∣∣ABAC2+AB2BC2
​ 余弦定理推导过程:

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⃗∣2−2AC⃗⋅AB⃗+∣AB⃗∣2∣BC⃗∣2=∣AC⃗∣2−2cosθ∣AC⃗∣∣AB⃗∣+∣AB⃗∣2cosθ=∣AC⃗∣2+∣AB⃗∣2−∣BC⃗∣22∣AC⃗∣∣AB⃗∣ \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=ACABBC2=(ACAB)2BCTBC=(ACAB)T(ACAB)BC2=ACTAC2ACAB+ABTABBC2=AC22ACAB+AB2BC2=AC22cosθAC∣∣AB+AB2cosθ=2∣AC∣∣ABAC2+AB2BC2
​ 余弦定理也可以通过向量的点乘退导出来

  1. 求投影

    AB⃗\vec{AB}ABAC⃗\vec{AC}AC的投影AD⃗\vec{AD}AD

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

    ∣AD⃗∣=∣AB⃗∣cosθ|\vec{AD}|=|\vec{AB}|cos\thetaAD=ABcosθ

    AD⃗=AC^∣AD⃗∣\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)]

    AB⃗\vec{AB}AB越接近AC⃗\vec{AC}AC,θ约小的时候,cosθcos\thetacosθ越接近1

    AB⃗\vec{AB}ABAC⃗\vec{AC}AC方向相反时,θ大于90°,cosθcos\thetacosθ为负值,且越接近-1

四、向量叉乘

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

AD⃗\vec{AD}AD垂直于AC⃗\vec{AC}AC
AD⃗\vec{AD}AD垂直于AB⃗\vec{AB}AB

∣AD⃗∣=sinθ∣AB⃗∣∣AC⃗∣|\vec{AD}|=sin\theta|\vec{AB}||\vec{AC}|AD=sinθAB∣∣AC

公式:

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

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

a⃗×b⃗=(0,−za,yaza,0,−xa−ya,xa,0)(xbybzb)=(yazb−ybzazaxb−xazbxayb−yaxb)\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,0xbybzb=yazbybzazaxbxazbxaybyaxb

叉乘的作用

  1. 判断左右

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

  2. 判断内外

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

    ∵(AB⃗×AD⃗)⋅(BC⃗×BD⃗)\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⃗)世界坐标系向量在uvw坐标上的分量 |\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三个向量都是单位向量 uv=vw=wu=0三个向量两两夹角都是90° w=u×v向量w垂直于向量uv组成的平面 p=(pu)u(pv)v(pw)w世界坐标系向量在uvw坐标上的分量

矩阵

单位矩阵

(1,0,0,00,1,0,00,0,1,00,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

矩阵的乘积

(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.. \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,b33a00,a01,a02,a03a10,a11.a12,a13a20,a21,a22,a23a30,a31,a32,a33c00,c01,c02,c03c10,c11.c12,c13c20,c21,c22,c23c30,c31,c32,c33 c00=a00b00+a01b10+a02b20+a03b30c01=a00b01+a01b11+a02b21+a03b31..

ccc矩阵的第xxx行,第yyycxyc_{xy}cxy等于aaa矩阵的第xxx行和bbb矩阵的第yyy列相乘相加。

矩阵乘向量

(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) \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,a33b00b10b200=a00b00+a01b10+a02b20+0a10b00+a11b10+a12b20+0a20b00+a21b10+a22b20+0a30b00+a31b10+a32b20+0

矩阵变换

缩放矩阵
(S00,  0,  0,  0 0,S11,  0,  0 0,  0,S22,  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,  T04  0,  0,  0,  T14  0,  0,  0,  T24  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,  23,  45,  67,  8)T=(1,  3,  5,  72,  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,  8T=(1,  3,  5,  72,  4,  6,  8)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小生云木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值