GAMES101-现代图形学入门笔记:1-3

文章目录

该课程是 GAMES 开设的现代计算机图形学课程,系统而全面的介绍:光栅化、几何表示、光的传播理论、动画与模拟。每个方面都从基础原理出发讲解到实际应用,并介绍前沿的理论研究。本文是其 1 至 3 章(概述、线性代数复习、变换)的学习笔记。

课程链接

一、计算机图形学概述

1. 应用

  1. 电子游戏 Video Games
  2. 电影 Movies
  3. 动画 Animations
  4. 设计 Design
  5. 可视化 Visualization
  6. 虚拟现实 Virtual Reality
  7. 数字绘画 Digital Illustration
  8. 模拟 Simulation
  9. 字体 Typography

2. 技术挑战

  • 透视(perspective)、投射(projections)、曲线(curves)、面(surfaces)的数学
  • 光(lighting)和影(shading)的物理
  • 3D 形体的表达(representing)和操作(operating)
  • 动画(animation)和模拟(simulation)

3. 内容

光栅化 Rasterization

  • Porject geometry primitives(3D triangles/polygons) onto the screen
  • Break projected primitives into fragments(pixels)
  • Gold standard in Video Games(Real-time Applications)

曲线 Curves/曲面 Meshes

  • How to represent geometry in Computer Graphics

光线追踪 Ray Tracing

  • Shoot rays from the camera though each pixel
    • Calculate intersection and shading
    • Continue to bounce(反射) the rays till they hit light sources
  • Gold standard in Animations/Movies(Offline Applications)

动画 Animation/模拟 Simulation

  • Key frame Animation
  • Mass-spring System

4. 不会涉及的内容

  • OpenGL/DirectX/Vulkan 等图形学 API 的使用
  • Shaders 的语法
  • 3D 建模
  • 游戏开发
  • 计算机视觉
  • 深度学习

5. 其他要求

  • pre-reading/reading 材料:见网站
  • references:fundamentals of computer graphics(🐯书)
  • assignments
    • Mostly programming tasks with provided code skeletons and virtual machine image
    • Weekly,usually no more than 20 lines of code per week
    • Languages:C++

二、线性代数复习

略,提纲如下:

  1. 向量
    • 基本操作:加(addition)、乘(multiplication)
    • 点乘:前向/后向判定
    • 叉乘:左右关系的判定
  2. 矩阵

三、变换

1. 为何学习变换?

  • Modeling 模型变换
  • Viewing 视角变换:3D 到 2D,称为投影

2. 2D 变换:使用矩阵表示变换

矩阵可以表示线性变换。

Scale (Non-Uniform)

\left[\begin{matrix} x’\\y’ \end{matrix}\right] = \left[\begin{matrix} s&0\\0&s \end{matrix}\right]\left[\begin{matrix} x\\y \end{matrix}\right] \tag{1}

Reflection

\left[\begin{matrix} x’\\y’ \end{matrix}\right] = \left[\begin{matrix} -1&0\\0&1 \end{matrix}\right]\left[\begin{matrix} x\\y \end{matrix}\right] \tag{2}

Shear 切变

\left[\begin{matrix} x’\\y’ \end{matrix}\right] = \left[\begin{matrix} 1&a\\0&1 \end{matrix}\right] \left[\begin{matrix} x\\y \end{matrix}\right] \tag{3}

Rotate

忘记时,可以使用 (1,0)(0,1) 点的映射得到

R_{ \theta } =
\left[\begin{matrix}
\cos{\theta}&-\sin{\theta}\\
\sin{\theta}&\cos{\theta}
\end{matrix}\right]
\tag{4}

3. 齐次坐标 Homogeneous coordinates

3.1 Why using homogeneous coordinates?

平移(Translation)是一种简单而且典型的变换,可以使用如下方式表示:

x’ = x + t_x\\y’ = y + t_y \tag{5}

它不能使用简单的矩阵变换得到,而要通过以下形式:

\left[\begin{matrix} x’\\y’ \end{matrix}\right] =
\left[\begin{matrix} a&b\\c&d \end{matrix}\right]
\left[\begin{matrix} x\\y \end{matrix}\right] +
\left[\begin{matrix} t_x\\t_y \end{matrix}\right]
\tag{6}

平移操作不是一种典型的线性变换,但是出于统一的考量,希望使用某种统一的方式能表示多种变换。

3.2 解决方案:齐次坐标

添加第三轴(w-coordinate)

  • 2D point = (x, y, 1)^T
  • 2D vector = (x, y, 0)^T

\left(\begin{matrix} x’\\y’\\w’ \end{matrix}\right) =
\left(\begin{matrix} 1&0&t_x\\0&1&t_y\\0&0&1 \end{matrix}\right) \cdot
\left(\begin{matrix} x\\y\\1 \end{matrix}\right) =
\left(\begin{matrix} x + t_x\\y + t_y\\1 \end{matrix}\right)
\tag{7}

设计机理

  1. vector + vector = vector
  2. point – point = vector
  3. point + vector = point
  4. point + point = ?
  5. vector 的平移不会改变

对点 4,齐次坐标的定义被扩充:

\left(\begin{matrix} x\\y\\w \end{matrix}\right) is the 2D point \left(\begin{matrix} x/w\\y/w\\1 \end{matrix}\right), w \neq 0

于是,在齐次坐标表示下,两点之和两点的中点。

这是一种用空间换表示的做法:

3.3 仿射变换 Affine Transformation

仿射变换 = 线性变换 + 平移;

\left[\begin{matrix} x’\\y’ \end{matrix}\right] =
\left[\begin{matrix} a&b\\c&d \end{matrix}\right] \cdot
\left[\begin{matrix} x\\y \end{matrix}\right] +
\left[\begin{matrix} t_x\\t_y \end{matrix}\right]
\tag{8}

其齐次坐标表示为:

\left[\begin{matrix} x’\\y’\\1 \end{matrix}\right] =
\left[\begin{matrix} a&b&t_x\\c&d&t_y\\0&0&1 \end{matrix}\right] \cdot
\left[\begin{matrix} x\\y\\1 \end{matrix}\right]
\tag{9}

3.4 齐次坐标下的 2D 变换

  • Scaling

S(s_x, s_y) =
\left[\begin{matrix}
s_x&0&0 \
0&s_y&0 \
0&0&1
\end{matrix}\right]
\tag{10}

  • Rotation

R(\alpha) =
\left[\begin{matrix}
\cos{\alpha}&-\sin{\alpha}&0 \
\sin{\alpha}&\cos{\alpha}&0 \
0&0&1
\end{matrix}\right]
\tag{11}

  • Translation

T(t_x, t_y) =
\left[\begin{matrix}
1&0&t_x \
0&1&t_y \
0&0&1
\end{matrix}\right]
\tag{12}

4. 其他变换的表示

4.1 Inverse transform 逆变换

M^{-1}

逆变换在矩阵和几何学的意义上都代表逆。

4.2 变换的合成

将操作的合成变换转换成矩阵乘法链。

  • 由于矩阵乘法的顺序很重要,显然变换的顺序也很重要
  • 对于仿射变换的序列 A_1A_n,其应用的方式和顺序为:A_n(…A_2(A_1(\vec{x}))) = A_n … A_2 \cdot A_1 \cdot \left(\begin{matrix} x\\y\\1 \end{matrix}\right)
  • 矩阵的结合律可以帮助优化运算,比如在编译期预先运算好、或者计算空间
  • 运用固定大小的矩阵表示极其复杂的变换

4.3 分解(Decomposing)复杂的变换

通过矩阵的分解将运动进行分解

5. 3D 变换

5.1 3D 齐次坐标

再次使用齐次坐标表示:

  • 3D point = (x, y, z, 1)^T
  • 3D vector = (x, y, z, 0)^T

In general, (x, y, z, w) (w \neq 0) is the 3D point (x/w, y/w, z/w).

其变换形式为:

\left(\begin{matrix} x’\\y’\\z’ \end{matrix}\right) =
\left(\begin{matrix} a&b&c&t_x\\d&e&f&t_y\\g&h&i&t_z\\0&0&0&1 \end{matrix}\right) \cdot
\left(\begin{matrix} x\\y\\z\\1 \end{matrix}\right)
\tag{13}

在三维空间中,变换向矩阵算法的转换及应用规律一致。

Tagged with:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据