空间变换
Last updated
Last updated
空间变换:任何为每个点分配新位置的函数。关注常见的基于线性映射 (linear maps) 的空间变换,如旋转 (rotation)、缩放 (scaling) 等
一个线性是映射的:
线性变换是廉价/高效的操作,通常很容易求解(线性系统)。线性变换的组合还是线性的,多个矩阵的乘积是一个矩阵,能够给出变换的统一表示。
一个变换是由它保留的不变性决定的:
旋转由三个基本特性决定:保持原点固定、保持距离、保持方向
前两个性质已表明旋转是线性的。
沿着x3坐标轴旋转,对x1和x2应用相同的转换,保持x3不变。
旋转矩阵将标准基映射到另一个正交基。
不是所有的正交矩阵均能描述一个旋转,比如上面的矩阵代表了一个沿着y轴的反射,未能保持方向。
缩放是线性变换。
一般来说,没有唯一的方法可以将给定的线性变换分解成基本变换的组合。然而,存在很多有用的分解:
奇异值分解,适合信号处理
LU分解,适合求解线性系统
极性分解,适合空间变换
极性分解将任何矩阵A分解为正交矩阵Q和对称半正定矩阵P:A = QP
源于透视的相关研究,一种为直线指定坐标的自然方式。
图像上的点是不能知道它的具体位置的,只能知道它属于哪一条线。
光栅化过程中需要的最后一个变换:从观察平面到像素坐标的变换。假设我们想将z=1平面上的正方形[0,1]x[0,1]内的所有点绘制成WxH像素的图像。
对于一些复杂的场景(比如多个立方体),场景图可以帮助我们管理不同的变换。加入我们想通过变换一个单位立方体来创造一个立方体生物,但是很难指定具体的变换,相反地,我们可以利用底层的变换来进一步构建上层的变换:
场景图在有向图中存储相对变换,每条边(加上根)存储一个线性变换。变换的组合应用于节点。
基于某一点做旋转: