计算机图形学入门笔记_GAMES101_Lecture01-02

计算机图形学入门笔记 | GAMES101 Lecture 01 & 02 学习总结

本文基于 UCSB 闫令琪老师 GAMES101 课程(B站播放量384万+)的前两讲内容整理而成,结合个人学习笔记与网上资料,适合图形学初学者阅读。


一、课程简介

GAMES101:现代计算机图形学入门 是由加州大学圣塔芭芭拉分校(UCSB)的闫令琪老师主讲的一门计算机图形学公开课。闫老师本科毕业于清华大学,博士毕业于UC Berkeley,2018年凭借在视觉特效领域的贡献获得奥斯卡技术奖提名。

这门课在B站上有超过384万播放量,是中文互联网上最受欢迎的图形学入门课程之一。课程涵盖23讲内容,系统介绍了现代计算机图形学的四大支柱:光栅化、几何表示、光线传播理论、动画与仿真。

课程主页:https://sites.cs.ucsb.edu/\~lingqi/teaching/games101.html

参考教材:Fundamentals of Computer Graphics (4th Edition)(俗称"Tiger Book")


二、Lecture 01:计算机图形学概述

2.1 什么是计算机图形学?

计算机图形学(Computer Graphics,简称CG)的核心定义是:使用计算机来合成并操控视觉信息。

简单来说,CG 和计算机视觉(Computer Vision,CV)是一对"镜像"关系:

方向 输入 输出 任务
计算机图形学 (CG) 3D模型/场景描述 2D图像 Rendering(渲染)
计算机视觉 (CV) 2D图像/视频 3D模型/理解 Modeling / Understanding

用一句话概括:CG 是从模型生成图像,CV 是从图像理解模型。

2.2 图形学的应用领域

图形学已经渗透到我们的日常生活方方面面:

  • 视频游戏:从《只狼》的全局光照到《无主之地3》的漫画风格渲染
  • 电影特效:《阿凡达》的面部捕捉、《疯狂动物城》的毛发模拟
  • 动画制作:《冰雪奇缘2》的布料与粒子模拟
  • 工业设计:奔驰概念车的CAD设计、家装效果图
  • 数据可视化:将抽象数据转化为直观的图形展示
  • 虚拟现实(VR)与增强现实(AR):完全虚拟 vs 虚实结合
  • 数码插画与字体设计:用电脑进行艺术创作
  • 仿真模拟:物理碰撞、流体、爆炸等特效

闫令琪老师在课上说了一句很经典的话:"Forget about the previous reasons. Computer Graphics is AWESOME!"

2.3 课程四大核心主题

GAMES101 课程围绕以下四大模块展开:

  1. 光栅化(Rasterization):将3D三角形/多边形投影到屏幕,分解为像素片段------这是游戏等实时应用的金标准
  2. 曲线与网格(Curves and Meshes):如何用数学方法表示三维几何形状
  3. 光线追踪(Ray Tracing):模拟光线传播路径,实现逼真的全局光照效果
  4. 动画与仿真(Animation / Simulation):物体运动、物理碰撞、布料/流体模拟等

注意:本课程不涉及图形API(如OpenGL/DirectX)、建模软件、游戏引擎或计算机视觉的具体实现。

2.4 技术挑战

实现一个完整的图形学系统面临诸多挑战:

  • 透视投影的数学原理
  • 光照与着色的物理建模
  • 三维形状的表示与操作
  • 动画与物理仿真
  • 3D图形编程与硬件实现

三、Lecture 02:线性代数回顾

图形学的底层数学基础主要是线性代数。这一讲快速回顾了图形学中最常用的向量与矩阵知识。

3.1 向量(Vector)

在图形学中,向量是一个具有方向 和长度的量。几个关键性质:

  • 图形学中统一使用列向量表示
  • 向量没有绝对的起点------平移不改变向量本身(只要方向和长度相同,就是同一个向量)
  • 单位向量:长度为1的向量,仅表示方向。任意向量 a 可单位化:â = a / |a|

向量加法遵循平行四边形法则和三角形法则,代数上就是对应坐标相加。

3.2 点乘(Dot Product)

点乘(也叫数量积、内积)的结果是一个标量(数值):

定义公式:

a · b = |a| |b| cos θ

由此可以计算两个向量的夹角:

cos θ = (a · b) / (|a| |b|)

如果是单位向量,则简化为:â · b̂ = cos θ

点乘的性质:

  • 交换律:a · b = b · a
  • 分配律:a · (b + c) = a · b + a · c
  • 结合律:(ka) · b = a · (kb) = k(a · b)

笛卡尔坐标系下的计算:

二维:a · b = xₐ·xᵦ + yₐ·yᵦ

三维:a · b = xₐ·xᵦ + yₐ·yᵦ + zₐ·zᵦ

点乘在图形学中的重要应用:

(1) 向量投影

计算向量 b 在向量 a 方向上的投影长度:

projₐ(b) = (a · b) / |a| = |b| cos θ

投影向量 = ((a · b) / |a|²) · a

通过投影,可以将任意向量分解为平行于 a 的分量和垂直于 a 的分量。

(2) 判断方向关系

  • a · b > 0:两向量方向基本一致(夹角 < 90°)
  • a · b < 0:两向量方向基本相反(夹角 > 90°)
  • a · b = 0:两向量垂直(正交)

3.3 叉乘(Cross Product)

叉乘的结果是一个向量 ,这个新向量与参与运算的两个向量都正交(垂直)。

定义公式:

|a × b| = |a| |b| sin θ

方向由右手螺旋定则确定:右手四指从 a 转向 b,大拇指指向的方向就是 a × b 的方向。

叉乘的性质:

  • 反交换律:a × b = −(b × a)
  • 分配律:a × (b + c) = a × b + a × c
  • 结合律:a × (kb) = k(a × b)

笛卡尔坐标系下的展开:

a × b = (yₐ·zᵦ − yᵦ·zₐ, zₐ·xᵦ − xₐ·zᵦ, xₐ·yᵦ − yₐ·xᵦ)

叉乘的矩阵形式:

a × b 可以写成矩阵乘法的形式:a × b = a× · b,其中 a× 是由 a 的分量构成的反对称矩阵。

叉乘在图形学中的关键应用:

(1) 判断左右方向

在三维空间中,给定两个共面的向量 a 和 b,计算 a × b:

  • 结果的 z 分量 > 0:b 在 a 的左侧
  • 结果的 z 分量 < 0:b 在 a 的右侧
  • 结果的 z 分量 = 0:两向量共线

(2) 判断点在三角形内部(Barycentric 思想)

给定三角形 ABC 和任意点 P,分别计算:

  • AB × AP
  • BC × BP
  • CA × CP

如果三个叉乘结果的第三分量同号(全部向上或全部向下),则点 P 在三角形内部;否则在外部。

这个方法在光栅化中至关重要------用来判断一个像素点是否被三角形覆盖,从而决定是否着色。

3.4 矩阵(Matrix)

矩阵是图形学中实现变换的核心工具。

矩阵乘法:

  • 前提:第一个矩阵的列数 = 第二个矩阵的行数
  • 若 A 是 M×N 矩阵,B 是 N×P 矩阵,则 AB 是 M×P 矩阵
  • 计算方式:新矩阵第 i 行第 j 列的元素 = A 的第 i 行向量 · B 的第 j 列向量

矩阵运算性质:

  • 不满足交换律:AB ≠ BA(这是最重要的区别!)
  • 满足结合律:(AB)C = A(BC)
  • 满足分配律:A(B + C) = AB + AC

矩阵转置:

(AB)ᵀ = BᵀAᵀ

单位矩阵(Identity Matrix):

对角线全为1,其余为0的矩阵。任何矩阵乘以单位矩阵等于自身:AI = IA = A

逆矩阵:

AA⁻¹ = A⁻¹A = I

(AB)⁻¹ = B⁻¹A⁻¹

矩阵在图形学中的核心应用------坐标变换:

通过矩阵乘法可以实现平移、旋转、缩放等变换操作。例如,二维空间中沿 y 轴翻转(x 变号)的变换矩阵为:

| -1 0 |

| 0 1 |

作用于列向量 x, yᵀ 得到 -x, yᵀ。

3.5 正交标准坐标系(Orthonormal Frame)

在图形学中,我们常用三个互相正交的单位向量 (a, b, w) 来定义一个坐标系:

  • a · b = 0, a · w = 0, b · w = 0(正交)
  • |a| = |b| = |w| = 1(单位长度)
  • a × b = w(右手系)

任意向量 p 可以用这个坐标系表示为:

p = (p · a)a + (p · b)b + (p · w)w

这就是向量在正交基下的分解,是后续坐标变换的理论基础。


四、学习心得与资源推荐

4.1 学习心得

通过前两讲的学习,我对计算机图形学有了全新的认识:

  1. 图形学不只是"画图":它融合了数学(线性代数、微积分)、物理(光学、力学)、计算机科学等多个学科的知识
  2. 数学是基石:向量运算(点乘、叉乘)和矩阵变换是贯穿整个课程的核心工具
  3. 理论与实践结合:GAMES101 的特色在于每讲都配合编程作业(C++),通过实际代码加深理解

4.2 推荐资源

资源 说明
GAMES101 课程主页 https://sites.cs.ucsb.edu/\~lingqi/teaching/games101.html
B站视频合集 https://www.bilibili.com/video/BV1X7411F744
参考教材 Fundamentals of Computer Graphics (4th Edition)
GAMES平台 http://games-cn.org(计算机图形学与混合现实在线平台)

本文是个人学习笔记的整理分享,欢迎交流讨论。如有错误欢迎指正!

参考资料:GAMES101课程课件、The Tiger Book第四版、CSDN/博客园相关笔记等。

相关推荐
coolwest1 小时前
某游戏辅助完整破解复盘报告(仅用于本人学习记录)
笔记
Go Work1 小时前
npm 卡在 Step 7 七分钟,翻上去四行才看到 E404
经验分享·笔记
Hello World . .1 小时前
【嵌入式学习笔记 Day 1】
linux·数据结构·笔记
小向是个Der2 小时前
P02_你的变量住在哪里_教学文档
经验分享·笔记·stm32·单片机
叼烟扛炮2 小时前
Linux 学习笔记(三十一):线程概念、底层分页机制与初体验
linux·运维·服务器·笔记·学习·1024程序员节
星恒随风2 小时前
Linux Socket UDP编程(一):手写UDP回显服务器与客户端,从socket、bind、recvfrom到网络字典服务器完整实战
linux·服务器·网络·笔记
凉、介2 小时前
深入理解 ARMv7-M | 异常/中断处理
笔记·学习·嵌入式·arm
蒸蒸yyyyzwd2 小时前
工具、力扣、中间件学习笔记
笔记·八股
深圳老胡2 小时前
液面探测功能的硬件方案对比:原理、优缺点与选型建议
笔记·单片机