GAMES101 现代计算机图形学入门(三)(四)
第三节课
本节主要讲了图形学的基本知识
Scale缩放
Reflection Matrix反射
Shear Matrix切边
Rotate旋转
Affine Transformations
Affine map = linear map + translation

Using homogenous coordinates:

Scale

Rotation

Translation

Composing Transforms
Sequence of affine transforms
- Compose by matrix multiplication
- Very important for performance!

我觉得这节课最精髓的地方就是对于变换组合的处理,比如,你可能已经想到,这里面提到的旋转都是绕原点进行的,那么怎么绕平面上非原点的一点c进行旋转,该怎么操作呢?
答案是:将图形移到原点进行操作后,再移回来

最后简单介绍了一下三维空间中的变换。
第四节课
因为第三节和第四节课的内容关联很大,所以笔记没有将两部分分割,
三维空间中的仿射变换,就是平移变换和线性变换与二维空间中的变换没有什么区别,十分相似。



绕y轴旋转和xz很不一样,闫老师解释的很清楚,xyzxyzxyz有循环对称的性质,在右手系的前提下,绕y轴旋转对于xz的坐标来说,逆时针是反向旋转角度,所以代入也应该代入的是负数。

roll:侧身
yaw:水平转圈
pitch:上下抬头
可以想象的是游戏里开飞机

罗德里格斯旋转公式

三维空间绕任意轴旋转矩阵的推导:说实话,我没有太看懂闫老师的推导过程,但是知乎上有一篇三维空间绕任意轴旋转矩阵的推导很不错。
接下来主要讲
- ==Viewing== transformation
- View / Camera transformation
- Projection transformation
- Orthographic projection
- Perspective projection
学了这么多东西,主要的目的是学会将三维空间中的东西变成二维,怎样呈现在显示器上
MVP变换:就是model,view,projection模型视图投影变换
闫老师举了一个非常好的例子,把MVP变换举例成如何去拍照片的过程
今天主要提到的就是视图变换VIEW


如何将相机从原有的摆放位置固定到想要的位置呢,首先将相机的位置移到原点,然后让原有的看的方向移到-z方向,注意这里是-z,然后将向上的方向移动到y的方向,最后x的方向肯定也重合了


为什么要先求逆变换呢,是因为原始的变换不好求,从数学上讲,好求的是求逆变换,再求逆变换的逆,这就很好理解了。
旋转矩阵是正交矩阵
RUA!一切为了投影变换!!!
首先来看正交投影

但这种操作不是一般的做法,一般的做法是要canonical(正则)化

空间中无论是啥长方体,统统映射到标准立方体上
为什么OpenGL里面会使用左手系是因为,在判断远近的时候,右手系中越远的点,z轴上的数越小,这一点与常识违背。

下面的部分就是透视投影

利用相似三角形的关系




同理我们还可以找远平面上的特殊点


最后很有意思的一个问题,就是在两个平面之间的点的z坐标是怎么变化的呢?
答案是都变得更远了,数值上(因为是往-z方向,所以数值上都变得更小了。
即,从n到f的过程中,慢慢变得更远然后再慢慢回归不变