问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

GAMES101学习笔记:计算机图形学中的变换(仿射变换、模型、视图、投影)

创作时间:
作者:
@小白创作中心

GAMES101学习笔记:计算机图形学中的变换(仿射变换、模型、视图、投影)

引用
CSDN
1.
https://m.blog.csdn.net/qq_39281631/article/details/144815945

课程资源:GAMES101-现代计算机图形学入门-闫令琪
Lec3 ~ Lec4 学习笔记:
Lecture 03 :Transformation ——变换(二维与三维)
Lecture 04 :Transformation ——变换(模型、视图、投影)

二维变换

  • 缩放(Scale)
  • 反射(Reflection)
  • 切变(Shear)
  • 旋转(Rotation)
  • 平移(Translation)

线性变换&仿射变换

上图中缩放、反射、切变、旋转变换都可以表示为矩阵和向量相乘的形式,也就是线性组合形式,所以它们也被叫做是
线性变换(linear transformation)
。(一个矩阵即代表着一个变换)

但是对于位移变换来说,不能用矩阵的形式表达且不满足线性变换,因为它的原点改变了。而线性变换是原点不会改变的变换(保加法和保数乘的性质)。所以位移无法用线性变换表示。

在几何上定义为由一个非奇异的线性变换接上一个平移变换组成的变换,称之为
仿射变换(affine transformation)

齐次坐标

齐次坐标(homogeneous coordinates)就是将一个原本是n维的向量用一个n+1维向量来表示,是指一个用于投影几何里的坐标系统。

  • 增加的这个维度一般称为w坐标。
  • 其中对于点,增加的数为1;对于向量,增加的数为0。
  • 通过这样的定义,向量加向量还是向量,点减去点变成向量,符合各自的的定义。
  • 其中,点加点在齐次坐标中的含义为这两个点的中点。

使用齐次坐标,通过增加一个维度,在高维度用线性变换来完成低维度的仿射变换。

所有的仿射变换都可以用齐次坐标来表示。

对于二维仿射变换,齐次坐标形式的变换矩阵最后一行一般为
(0, 0, 1)

而在三维变换中,其还有其他特殊意义。

逆变换与组合变换

  • 逆变换(Inverse Transform)

通过乘上一个变换矩阵的逆,来实现这个变换的逆变换。

(旋转矩阵的逆 = 旋转矩阵的转置)(正交矩阵)

  • 组合变换(Composing Transforms)

不同的变换可以进行组合,组合的先后顺序会影响结果

  • 分解复杂变换(Decomposing Complex Transforms)

可以将复杂的变换分解为多个简单变换的组合。

三维变换

类比二维空间,三维空间变换同样使用齐次坐标进行定义。

  • 齐次坐标形式的变换矩阵最后一行一般为
    (0, 0, 0, 1)

  • 左上角3x3矩阵为线性变换矩阵

  • 最后一列为平移变换的值

  • 仿射变换顺序:先进行线性变换,再进行平移变换。

  • 缩放和平移类似二维变换

  • 旋转比较特殊。绕哪个轴旋转,对角线上对应的数字为1,其中绕y轴与绕x轴和绕z轴有所不同,由于需要满足右手螺旋定则,因此出现了一个循环对称的结果。(sin的负号位置)

组合绕各轴的旋转(欧拉角 Euler angles):

  • 俯仰角(Pitch):绕x轴旋转,描述我们如何往上或往下看的角

  • 偏航角(Yaw):绕y轴旋转,表示我们往左和往右看的程度

  • 滚转角(Roll):绕z轴旋转,代表我们如何翻滚摄像机

拓展内容:

  • 绕任意轴旋转:罗德里格斯旋转公式(Rodrigues’ Rotation Formula)

  • 多个旋转矩阵复合会导致一个问题:万向节死锁(Gimbal Lock)

  • 避免万向节死锁的真正解决方案是使用:四元数(Quaternion)

MVP变换

MVP 即 Model、View、Projection

  • Model Transformation (模型变换)

  • View Transformation (视图变换)

  • Projection Transformation (投影变换)

OpenGL中用于物体坐标变换的几个过渡坐标系:

  • 局部空间(Local Space,或者称为物体空间(Object Space))

  • 世界空间(World Space)

  • 观察空间(View Space,或者称为视觉空间(Eye Space))

  • 裁剪空间(Clip Space)

  • 屏幕空间(Screen Space)

模型变换

模型矩阵(Model Matrix)是一种变换矩阵,它能通过对物体进行位移、缩放、旋转来将它置于它本应该在的位置或朝向。(决定了场景中的所有模型的相对位置,包括摄像机)

视图变换

视图变换实际是在对摄像机做变换,也即View / Camera Transformation

定义相机:

  • 相机的位置

  • 相机的朝向 LookAt

  • 相机的向上方向(固定相机,避免相机绕LookAt方向旋转)

将相机设定到标准位置:

  • 相机放在原点

  • 相机LookAt方向为-Z方向

  • 将其他物体做同样的变换

旋转矩阵难以写出时,可以利用旋转矩阵是正交矩阵的性质,先求逆矩阵。

投影变换

Projection transformation(投影变换)在计算机图形学中用于从3D模型变换到2D图像

  • Orthographic projection (正交投影)

  • Perspective projecti (透视投影)

正交投影往往用于工程制图,用于描绘真实物体。

透视投影更贴近人眼的真实视觉(近大远小)。

正交投影

正交投影的步骤:

  • 先平移到原点

  • 再缩放到标准立方体中。

透视投影

透视投影是使用最广泛的投影,符合近大远小的规律,其中的平行线会相交于某一点。

做透视投影之前,回顾一条齐次坐标的性质:

(x, y, z, 1)

(kx, ky, kz, k!=0)

(xz, yz, z², z!=0)

都表示3D空间中的同一个点

透视投影的步骤:

  • 将平截头体“挤”成一个长方体

  • 再对这个长方体进行正交投影。

如何将平截头体变换为长方体?

求一个变换矩阵

M(persp->ortho)

首先做几点规定:n平面不变;f平面的z值不变;f平面的中心点不变。

对于x,y轴,我们可以轻易得到图中变换矩阵,但是z轴仍未知。

可以得出变换矩阵

M(persp->ortho)

的一部分

Observation: the third row is responsible for z’

  • Any point on the near plane will not change

  • Any point’s z on the far plane will not change

将z等于n的情况代入,我们可以得到以下式子,利用中心点不变的性质,我们得出A和B的值,其中f是最远处中心点的取值

最终我们可以得出变换矩阵

M(persp->ortho)

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号