文章目录

  • 前言
  • 课堂笔记
    • 1 向量
      • 1.1 向量点积
        • 1.1.1 点积
        • 1.1.2 点乘的图形学意义
      • 1.2 向量叉乘
        • 1.2.1 叉乘
        • 1.2.2 叉乘的图形学意义
        • 1.3 建立直角坐标系
    • 2 矩阵
      • 矩阵乘法
        • 矩阵乘法 与 向量点乘叉乘的相互转换

前言

本文为GAMES101现代计算机图形学入门 的学习笔记系列。

我们的系列笔记将分为两部分:

  1. 课堂笔记
  2. 作业

原课程为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=⎝⎛​ya​zb​−za​yb​za​xb​−xa​zb​xa​yb​−ya​xb​​⎠⎞​
(记忆方法:下标都是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​​−za​0xa​​ya​−xa​0​⎠⎞​⎝⎛​xb​yb​zb​​⎠⎞​
记忆方法:也是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​​−za​0xa​​ya​−xa​0​⎠⎞​⎝⎛​xb​yb​zb​​⎠⎞​
这在上面写过一次。其中A*称为 dual matrix of vector a

【GAMES101】课堂笔记2--计算机图形学概述相关推荐

  1. GAMES101笔记_Lec01_计算机图形学概述 Overview of Computer Graphics

    作为一名想要了解图形学的学生,已经在无数地方看到有人推荐闫令琪老师的GAMES101课程,但由于自己是美术专业,在笼统看过这门课程之后认为这门课有一定学习难度,所以为了打下比较扎实的基础和方便自己日后 ...

  2. 计算机图形学——游戏方向 第一章 计算机图形学概述

    计算机图形学--游戏方向 第一章 计算机图形学概述 前言 第一章 计算机图形学概述 1.为什么设计专业要学习计算机图形学? 计算机图形学与计算机视觉等领域的关系 计算机图形学基础自学体系 2.计算机图 ...

  3. 《Computer Graphics with OpenGL》计算机图形学读书笔记 02——计算机图形学软件

    这里是<Computer Graphics with OpenGL>英文原版第四版的读书笔记,预计每一章写一篇读书笔记.本篇为第二章,简要介绍计算机图形学的相关软件.图形学相关软件可分为两 ...

  4. 计算机图形学入门——笔记(一):计算机图形学概述

    四大主题 Rasterization Curves and Meshes Ray Tracing Animation / Simulation 相关语言(API) OpenGL / DirectX / ...

  5. 【考研计算机网络】课堂笔记1 第一章 概述

    文章目录: 一:计算机网络的概述 1.计算机网络的基本概念 2.计算机网络的组成

  6. 计算机图形学 学习笔记(一):概述,直线扫描转换算法:DDA,中点画线算法,Bresenham算法

    前言 本笔记基于 http://www.icourse163.org/learn/CAU-45006?tid=1001746004#/learn/announce 感谢中国农大 赵明老师的分享~ 现在 ...

  7. 计算机图形学基础学习笔记-其一:向量与线性代数

    计算机图形学基础学习笔记-其一:向量与线性代数 前言 计算机图形学概述 向量(矢量) 点乘 叉乘 点乘,叉乘与直角坐标系 矩阵 前言 GAMES101现代计算机图形学入门的学习笔记 正在为TA实习攒作 ...

  8. 计算机图形学入门-线性代数复习

    本专栏内容整理了GAMES101的计算机图形学课程的主要内容,作为我学习计算机图形学的一份复习备份或叫做笔记.内容中如有错误,或有其他建议,欢迎大家指出. 附上GAMES101计算机图形学课程:GAM ...

  9. 计算机图形学-走样与反走样

    本专栏内容整理了GAMES101的计算机图形学课程的主要内容,作为我学习计算机图形学的一份复习备份或叫做笔记.内容中如有错误,或有其他建议,欢迎大家指出. 附上GAMES101计算机图形学课程:GAM ...

  10. 计算机图形学-光栅化(三角形的离散化)

    本专栏内容整理了GAMES101的计算机图形学课程的主要内容,作为我学习计算机图形学的一份复习备份或叫做笔记.内容中如有错误,或有其他建议,欢迎大家指出. 附上GAMES101计算机图形学课程:GAM ...

最新文章

  1. 股价相对于转股价溢价的时候,可转债就是折价状态。这就意味着只要正股保持目前的价格,赚钱的概率较高。...
  2. ubuntu下解决oracle sqlplus不能查看历史命令问题
  3. 经典蓝牙和低功耗蓝牙(BLE)有什么区别?
  4. Python全栈工程师(字符串/序列)
  5. 从链表中删除数据的时间复杂度真的是O(1)吗?
  6. dreamweaver 正则表达式为属性值加上双引号_PHP正则表达式核心技术完全详解 第2节...
  7. netty中的引导Bootstrap服务端
  8. wifi传输信息需要连接服务器,基于近场通信的WiFi传输连接方案.pdf
  9. 关于类的入门例子(1): 继承窗体
  10. 辽宁工业大学计算机复试经验,辽宁工业大学车辆工程考研经验
  11. 学习韩顺平java基础笔记 (自用)
  12. Python实现借助聚合数据API接口生成某一年的节假日对照表
  13. excel表格的绝对引用和相对引用
  14. 领猫SCM完成近亿元A轮融资,服装供应链SaaS赛道前景几何?
  15. ccs 动态梦幻西游
  16. PHP服务端 苹果支付(IAP)处理
  17. python字母对应序号_python获取字母在字母表对应位置的几种方法及性能对比较
  18. 浅谈计通银行机房集中监控系统功能
  19. 那些年,你看过有哪些让你记忆犹新的书
  20. 万豪国际集团旗下福朋喜来登品牌首度亮相苏州吴中

热门文章

  1. 服务器临时维护什么意思,6月16日服务器临时维护及开服公告
  2. 钛媒体联合创始人万宁:市场剧变下,企业数字化转型的新逻辑 | 钛媒体T-EDGE...
  3. Alexa排名对新闻网站的参考作用(转)
  4. 查询练习:按等级查询
  5. 初识Selenium一种自动化工具
  6. 戴尔540服务器光驱在什么位置,戴尔Dell 500 官方拆机图解教程
  7. iOS Crash日志分析必备:符号化系统库方法
  8. 【jeecg学习记录】SAAS多租户配置
  9. 抖音seo源码,抖音矩阵,抖音搜索排名
  10. Netskope报告显示:云勒索软件日益猖獗