【GAMES101】课堂笔记2--计算机图形学概述
文章目录
- 前言
- 课堂笔记
- 1 向量
- 1.1 向量点积
- 1.1.1 点积
- 1.1.2 点乘的图形学意义
- 1.2 向量叉乘
- 1.2.1 叉乘
- 1.2.2 叉乘的图形学意义
- 1.3 建立直角坐标系
- 2 矩阵
- 矩阵乘法
- 矩阵乘法 与 向量点乘叉乘的相互转换
前言
本文为GAMES101现代计算机图形学入门 的学习笔记系列。
我们的系列笔记将分为两部分:
- 课堂笔记
- 作业
原课程为2020年2月闫令琪所教授的 GAMES101 现代计算机图形学入门。
课程主页:https://sites.cs.ucsb.edu/~lingqi/teaching/games101.html
(幻灯片和课程录像均在此处)
课程共计22节。作业共计8次。
针对人群:计算机图形学入门新手
教材:
Steve Marschner and Peter Shirley的"Fundamentals of Computer Graphics"
第三版或更新版本。目前无官方中文版。
民间翻译:https://www.stubbornhuang.com/1812/
笔记目录
2022-6-3
本节课阅读教材:第 2 章(Miscellaneous Math);第 5 章(Linear Algebra)
课堂笔记
本节课快速简要介绍所需的线性代数。
分为两部分:
- 向量:点乘和叉乘
- 矩阵:矩阵与矩阵乘和矩阵与向量乘
1 向量
向量的长度:∣∣a⃗∣∣||\vec a||∣∣a∣∣
向量的方向:$||\hat a|| = \vec a / $
读作a hat
1.1 向量点积
1.1.1 点积
a⃗⋅b⃗=∣∣a⃗∣∣∣∣a⃗∣∣cosθ\vec a \cdot \vec b = ||\vec a|| ||\vec a|| \cos \theta a⋅b=∣∣a∣∣∣∣a∣∣cosθ
故而可得其夹角theta
cosθ=a⃗⋅b⃗∣∣a⃗∣∣∣∣a⃗∣∣\cos \theta = \frac{\vec a \cdot \vec b} { ||\vec a|| ||\vec a|| } cosθ=∣∣a∣∣∣∣a∣∣a⋅b
对于单位向量,只要点乘就得到了夹角余弦
cosθ=a^⋅b^\cos \theta = \hat a \cdot \hat b cosθ=a^⋅b^
点乘符合交换律、结合律和分配律
(因为点乘得到一个数,所以怎么交换都无所谓)
1.1.2 点乘的图形学意义
- 找夹角
- 找投影
向量b在向量a方向上的投影为ka^k \hat aka^
其大小为k=∣∣b⃗∣∣cosθk = ||\vec b|| \cos\thetak=∣∣b∣∣cosθ
方向为向量a的方向
点乘的用处:
- 用投影将一个向量分解
- 衡量两个向量有多接近(夹角),例如计算高光
- 正负决定了两个向量是否是反向的
1.2 向量叉乘
1.2.1 叉乘
- 叉乘结果是一个向量,它的方向与叉乘的两者都垂直,并遵守右手法则。
- 用于建立直角坐标系
- 叉乘不满足交换律,但是交换顺序只需要加一个负号: a⃗×b⃗=−b⃗×a⃗\vec a\times \vec b =-\vec b \times \vec aa×b=−b×a
用叉乘建立坐标系
例如知道x 与 y轴,找到z轴
x⃗×y⃗=z⃗\vec x \times \vec y = \vec z x×y=z
知道z轴与x轴,找到y轴
z⃗×x⃗=y⃗\vec z \times \vec x = \vec y z×x=y
知道z轴与x轴,找到y轴
(注意,OpenGL采用左手系,与叉乘的右手系恰好相反)
(x y z轮转)
叉乘满足结合律和分配律
叉乘的大小
∣a⃗×b⃗∣∣=∣∣a⃗∣∣∣∣b⃗∣∣sinθ|\vec a \times \vec b|| = ||\vec a|| ||\vec b|| \sin \theta ∣a×b∣∣=∣∣a∣∣∣∣b∣∣sinθ
叉乘的方向:与两者垂直,满足右手法则
故可见a⃗×a⃗=0\vec a \times \vec a=0a×a=0, 因为自己与自己的夹角正弦为0.
分量形式
a⃗×b⃗=(yazb−zaybzaxb−xazbxayb−yaxb)\vec a \times \vec b =\begin{pmatrix} y_a z_b - z_a y_b \\ z_a x_b - x_a z_b \\ x_a y_b - y_a x_b \end{pmatrix} a×b=⎝⎛yazb−zaybzaxb−xazbxayb−yaxb⎠⎞
(记忆方法:下标都是a b - a b; 主体是x y z轮转的, 例如第一行是没有x, yz轮转, 第二行是没有y, z x轮转, 第三行是没有z, xy轮转;减号前后只是交换位置)
叉乘写成矩阵形式
a⃗×b⃗=A∗b=(0−zayaza0−xa−yaxa0)(xbybzb)\vec a\times \vec b = A^*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} a×b=A∗b=⎝⎛0za−ya−za0xaya−xa0⎠⎞⎝⎛xbybzb⎠⎞
记忆方法:也是xyz轮转的。第一行x为0,第二行y处为0,第三行z处为0。负号总是在0的后一个位置。
1.2.2 叉乘的图形学意义
- 判定左右
- 判定内外
例如判断b是在a的左边还是右边
只需要计算
a⃗×b⃗\vec a \times \vec b a×b
假如该向量的方向与z轴方向相同,则b在a的左侧
(或者规定垂直纸面向外为正,则ab叉乘为正确定b在a左侧)
例如判断一个点是在三角形的内部还是外部
如果P点都在向量AB, BC, CA的同一侧(左侧或者右侧),那么P在三角形的内部。
所以P点在三角形内部需要同时满足三组判断
{AB→×AP→>0BC→×BP→>0CA→×CP→>0\left\{ \begin{matrix} \overrightarrow{AB} \times \overrightarrow{AP} >0 \\ \overrightarrow{BC} \times \overrightarrow{BP} >0 \\ \overrightarrow{CA} \times \overrightarrow{CP} >0 \end{matrix} \right . ⎩⎪⎪⎨⎪⎪⎧AB×AP>0BC×BP>0CA×CP>0
或者
{AB→×AP→<0BC→×BP→<0CA→×CP→<0\left\{ \begin{matrix} \overrightarrow{AB} \times \overrightarrow{AP}<0 \\ \overrightarrow{BC} \times \overrightarrow{BP} <0 \\ \overrightarrow{CA} \times \overrightarrow{CP} <0 \end{matrix} \right . ⎩⎪⎪⎨⎪⎪⎧AB×AP<0BC×BP<0CA×CP<0
(注:这里规定垂直纸面向外为正,实际上叉乘得到的是向量。)
光栅化一个三角形时,要判断像素点在三角形的内部还是外部,就按照这种方法判断。
1.3 建立直角坐标系
规定直角坐标系的三个基满足
∣∣u⃗∣∣=∣∣v⃗∣∣=∣∣w⃗∣∣=1u⃗⋅v⃗=v⃗⋅w⃗=u⃗⋅w⃗=0w⃗=u⃗×v⃗\begin{matrix} ||\vec u|| =||\vec v|| =||\vec w|| = 1 \\ \vec u \cdot \vec v = \vec v \cdot \vec w = \vec u \cdot \vec w = 0 \\ \vec w =\vec u \times \vec v \end{matrix} ∣∣u∣∣=∣∣v∣∣=∣∣w∣∣=1u⋅v=v⋅w=u⋅w=0w=u×v
就认为u v w可组成一个直角坐标系
任何一个向量可以表示为
p⃗=(p⃗⋅u⃗)u⃗+(p⃗⋅v⃗)v⃗+(p⃗⋅w⃗)w⃗\vec p =(\vec p \cdot \vec u) \vec u + (\vec p \cdot \vec v) \vec v +(\vec p \cdot \vec w) \vec w p=(p⋅u)u+(p⋅v)v+(p⋅w)w
2 矩阵
图形学中,矩阵用于变换,包括
- 平移
- 旋转
- 剪切
- 缩放
矩阵乘法
矩阵
AB=C
矩阵A、B只有满足特定行数和列数才能相乘(mxn)(nxp)=mxp
相乘后的每一个元素是A的行向量点乘B的列向量
例如C的第3行第四列是 A的第三行行向量乘以B的第四列列向量矩阵乘法没有交换律!
矩阵的转置
矩阵的互逆
矩阵向量相乘
矩阵乘法 与 向量点乘叉乘的相互转换
点乘:
a⃗⋅b⃗=a⃗Tb⃗\vec a \cdot \vec b = \vec a^T \vec b a⋅b=aTb
左边是点乘,右边是矩阵乘
叉乘
a⃗×b⃗=A∗b=(0−zayaza0−xa−yaxa0)(xbybzb)\vec a\times \vec b = A^*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} a×b=A∗b=⎝⎛0za−ya−za0xaya−xa0⎠⎞⎝⎛xbybzb⎠⎞
这在上面写过一次。其中A*称为 dual matrix of vector a
【GAMES101】课堂笔记2--计算机图形学概述相关推荐
- GAMES101笔记_Lec01_计算机图形学概述 Overview of Computer Graphics
作为一名想要了解图形学的学生,已经在无数地方看到有人推荐闫令琪老师的GAMES101课程,但由于自己是美术专业,在笼统看过这门课程之后认为这门课有一定学习难度,所以为了打下比较扎实的基础和方便自己日后 ...
- 计算机图形学——游戏方向 第一章 计算机图形学概述
计算机图形学--游戏方向 第一章 计算机图形学概述 前言 第一章 计算机图形学概述 1.为什么设计专业要学习计算机图形学? 计算机图形学与计算机视觉等领域的关系 计算机图形学基础自学体系 2.计算机图 ...
- 《Computer Graphics with OpenGL》计算机图形学读书笔记 02——计算机图形学软件
这里是<Computer Graphics with OpenGL>英文原版第四版的读书笔记,预计每一章写一篇读书笔记.本篇为第二章,简要介绍计算机图形学的相关软件.图形学相关软件可分为两 ...
- 计算机图形学入门——笔记(一):计算机图形学概述
四大主题 Rasterization Curves and Meshes Ray Tracing Animation / Simulation 相关语言(API) OpenGL / DirectX / ...
- 【考研计算机网络】课堂笔记1 第一章 概述
文章目录: 一:计算机网络的概述 1.计算机网络的基本概念 2.计算机网络的组成
- 计算机图形学 学习笔记(一):概述,直线扫描转换算法:DDA,中点画线算法,Bresenham算法
前言 本笔记基于 http://www.icourse163.org/learn/CAU-45006?tid=1001746004#/learn/announce 感谢中国农大 赵明老师的分享~ 现在 ...
- 计算机图形学基础学习笔记-其一:向量与线性代数
计算机图形学基础学习笔记-其一:向量与线性代数 前言 计算机图形学概述 向量(矢量) 点乘 叉乘 点乘,叉乘与直角坐标系 矩阵 前言 GAMES101现代计算机图形学入门的学习笔记 正在为TA实习攒作 ...
- 计算机图形学入门-线性代数复习
本专栏内容整理了GAMES101的计算机图形学课程的主要内容,作为我学习计算机图形学的一份复习备份或叫做笔记.内容中如有错误,或有其他建议,欢迎大家指出. 附上GAMES101计算机图形学课程:GAM ...
- 计算机图形学-走样与反走样
本专栏内容整理了GAMES101的计算机图形学课程的主要内容,作为我学习计算机图形学的一份复习备份或叫做笔记.内容中如有错误,或有其他建议,欢迎大家指出. 附上GAMES101计算机图形学课程:GAM ...
- 计算机图形学-光栅化(三角形的离散化)
本专栏内容整理了GAMES101的计算机图形学课程的主要内容,作为我学习计算机图形学的一份复习备份或叫做笔记.内容中如有错误,或有其他建议,欢迎大家指出. 附上GAMES101计算机图形学课程:GAM ...
最新文章
- 股价相对于转股价溢价的时候,可转债就是折价状态。这就意味着只要正股保持目前的价格,赚钱的概率较高。...
- ubuntu下解决oracle sqlplus不能查看历史命令问题
- 经典蓝牙和低功耗蓝牙(BLE)有什么区别?
- Python全栈工程师(字符串/序列)
- 从链表中删除数据的时间复杂度真的是O(1)吗?
- dreamweaver 正则表达式为属性值加上双引号_PHP正则表达式核心技术完全详解 第2节...
- netty中的引导Bootstrap服务端
- wifi传输信息需要连接服务器,基于近场通信的WiFi传输连接方案.pdf
- 关于类的入门例子(1): 继承窗体
- 辽宁工业大学计算机复试经验,辽宁工业大学车辆工程考研经验
- 学习韩顺平java基础笔记 (自用)
- Python实现借助聚合数据API接口生成某一年的节假日对照表
- excel表格的绝对引用和相对引用
- 领猫SCM完成近亿元A轮融资,服装供应链SaaS赛道前景几何?
- ccs 动态梦幻西游
- PHP服务端 苹果支付(IAP)处理
- python字母对应序号_python获取字母在字母表对应位置的几种方法及性能对比较
- 浅谈计通银行机房集中监控系统功能
- 那些年,你看过有哪些让你记忆犹新的书
- 万豪国际集团旗下福朋喜来登品牌首度亮相苏州吴中