7

GAMES101 - 现代计算机图形学入门 - 原理总结(Updating)

 3 years ago
source link: http://luty.tech/posts/graphics/2020/11/27/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Preface

最近想好好打下计算机图形学的基础,于是掏出了收藏夹里积灰许久的GAMES101课程。GAMES101是GAMES ( Graphics And Mixed Environment Seminar )系列公益课程的第一部,授课老师为UCSB的助理教授闫令琪老师。GAMES101因为专注于原理的分析与解释,并提供了BBS、助教和作业提交系统等一套完备的学习设施,课程质量广受好评。官方地址: http://games-cn.org/intro-graphics/

本文章主要包括以下几个内容:

  • 计算机图形学基本原理和分析方法的记录
  • 该课程作业分析和解决方案
  • 该课程的部分涉及内容的拓展

因为本人比较容易遗忘原理类的知识,所以做好记录还是蛮有必要的。本文不属于详尽的内容笔记,更倾向于记录一些主观容易遗忘的重点难点。

Overview

ieUfqaB.png!mobile

Covered Topics

  • Rasterization
  • Curves and Meshes
  • Ray Tracing
  • Animation / Simulation

References

Fundamentals Of Computer Graphics 3th Edition

Transformation

图形学中 Transformation 的核心问题是找到一个变换矩阵 $ M $ ,使得空间中任意一个Vetcor可以利用$M$ 进行缩放、反转、切边、旋转和平移。其中平移变换的引入需要利用齐次坐标表示$M$的仿射变换,因此,在三维向量空间中$M$应为一个4x4的矩阵。 Transformation的所有内容将基于齐次坐标构建的变换矩阵。Transformation中一个重要假设是任何复合变换都可以依次分解为各个独立变换,复合变换中,优先平移,其次线性变换。

点和向量的表示

Point= $(x,y,z,1)^\intercal$ or $(wx,wy,wz,w)^\intercal$ subject to $w>0$

Vector= $(x,y,z,0)^\intercal$($w=0$实际上保护了Vector的平移不变性)

Scale

Reflection

  • 以x-axis为例, y-axis, z-axis 同理。

Rotation

  • Default
    • (0, 0, 0)为原圆心
    • 逆时针
  • 由于Rotation的输入为角度$\theta$,其变换矩阵的逆刚好等于转置,满足正交矩阵性质。该性质简化了视图变换$M$的推导。

以沿x-axis旋转为例, y-axis, z-axis 同理。

  • Rotation也满足Transformation复合叠加的假设

  • Rodrigues’ rotation formula

    罗德里格旋转公式是表达三维空间的另一种形式,其输入不再是三个轴上的旋转角度,而是选择一个单位向量 $n$ 作为旋转轴,以及 $\alpha$ 作为绕该单位向量旋转角度,公式如下:

    IbM3ym2.png!mobile

View Transform

问题描述

一个3D空间向2D投影的过程包括三步:

  1. model transform
  2. view transform
  3. projection transform

对于View Transform, 我们定义空间中的一个相机为 $(e,g,t)$,分别代表相机的Position, Look-at Direction, Up Direction(该向量定义正交于$g$)。View Transform的目标是找到一个变换矩阵

,使得相机的Position回到原点,Look-At Direction面向 , Up Direction面向

MV3yYrb.png!mobile

这里运用了旋转矩阵作为正交矩阵的性质,矩阵的逆等于矩阵的转置,更加直观。

Projection Transform

  • Orthographic Transform
  • Perspective Transform

aiYNJnA.png!mobile

jQbmUz7.png!mobile

问题描述

投影变换是将3D空间信息转换为2D信息,而投影分为正交投影和透视投影,两者区别就是相机与近视屏幕的距离是否为无限。实现投影变换一个简单的思路就是去轴,例如通过移除Z轴我们就得到了X-Y平面的投影信息。但是显然这种方法是有缺陷的,大多时候我们期望投影变换后不会损失三维空间的信息。换言之,投影变换需要保留近视平面到远视平面形成的整个可视空间的信息。

因此,投影变换的目的是 可视空间投影到一个以原点为中心的[1,1,1]的正则空间(canonical cube)

Orthographic Transform

6fm2Ajv.png!mobile

Perspective Transform

透视变换略微比正交变换复杂,因为透视相机的可视空间是一个截锥体(Frustum),这里闫老师给了一种很好理解的方式,我们先把Frustum转换为Cubiod,再使用Orthographic Transform的转换矩阵即可。而Frustum转换为Cubiod的推导也很有意思。

我们希望Frustum转换为Cubiod,首先需要使近远视平面大小一致,由于相机更接近于近视平面所以我们希望远视平面变小,就像四个手指头挤压远视平面一样。因此有如下条件

  1. 相机已完成视图变换
  2. 近视平面上的点恒定不变
  3. 远视平面上点的Z轴信息恒定不变

设近视平面上的点为$(x’,y’,z’)$,远视平面上的点$(x,y,z)$,分别以$-x$和$-y$的角度去观测Frustum,根据相似三角形的信息,我们可以得到

uiqEnaM.png!mobile

NF3Ufiz.png!mobile

对于远视平面上的任意点,在齐次坐标下我们可以表示为

ZZr6Vjf.png!mobile

可以腿短$M_{persp\rightarrow ortho}$满足

nEfqEfB.png!mobile

B3MfMnV.png!mobile

现在我们只有第三行的四个信息未知,再利用假设2可以得到

ZZ3qq2M.png!mobile

queiqi6.png!mobile

假设3可以得到

7ziUZv6.png!mobile

最后得出A,B

7ZnuaiR.png!mobile

本节的思考题是在可视空间中非视平面上的点的Z轴的值是如何变化的,直观的感受我们知道Z轴的值肯定是变大的(因为远小),也可以利用矩阵计算验证,如下。

zAnu2yV.png!mobile


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK