《Real-Time Rendering》第四版学习笔记——Chapter 4 Transforms

Posted 董小虫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Real-Time Rendering》第四版学习笔记——Chapter 4 Transforms相关的知识,希望对你有一定的参考价值。

引言

线性变换:保持向量加法和缩放操作:
f ( x ) + f ( y ) = f ( x + y ) , k f ( x ) = f ( k x ) \\mathbf f(\\mathbf x)+\\mathbf f(\\mathbf y)=\\mathbff(\\mathbf x+\\mathbf y),\\\\ k\\mathbf f(\\mathbf x)=\\mathbf f(k\\mathbf x) f(x)+f(y)=f(x+y),kf(x)=f(kx)

旋转和缩放变换都是对三维向量的线性变换,可以表示为 3 × 3 3\\times3 3×3矩阵。

平移变换是对一个向量执行加上另一个向量的操作; 3 × 3 3\\times3 3×3矩阵无法满足移动变换的表示。

仿射变换(affine transform)通过 4 × 4 4\\times4 4×4矩阵将平移变换与旋转、缩放变换结合起来。使用齐次(homogeneous)标记来表示思维向量:

  • 方向向量: v = ( v x v y v z 0 ) T \\mathbf v=(v_x\\quad v_y\\quad v_z\\quad 0)^T v=(vxvyvz0)T
  • 点: v = ( v x v y v z 1 ) T \\mathbf v=(v_x\\quad v_y\\quad v_z\\quad 1)^T v=(vxvyvz1)T

平移、旋转、缩放、反射、切变矩阵都是放射矩阵。仿射矩阵点特点就是保持线的平行性,但不保持长度和角度。仿射变换也可以表示为任意单独的仿射变换的串联。

一、基础变换

下表是大部分基础变换的汇总:

标记 名称 特点 T ( t ) 平 移 矩 阵 移 动 一 个 点 , 仿 射 R x ( ρ ) 旋 转 矩 阵 围 绕 x 轴 旋 转 ρ 弧 度 。 正 交 、 仿 射 S ( s ) 缩 放 矩 阵 根 据 s 沿 着 个 坐 标 轴 缩 放 。 仿 射 H i j ( s ) 切 变 矩 阵 将 i 分 量 进 行 为 s 倍 数 的 依 据 j 分 量 的 切 变 操 作 。 仿 射 E ( h , p , r ) 欧 拉 变 换 以 欧 拉 角 形 式 表 示 的 指 向 矩 阵 。 正 交 、 仿 射 P o ( s ) 正 交 投 影 向 平 面 或 空 间 内 进 行 平 行 投 影 。 仿 射 P p ( s ) 透 视 投 影 向 平 面 或 空 间 内 进 行 符 合 透 视 规 则 的 投 影 s l e r p ( q ^ , r ^ , t ) 球 面 线 性 插 值 根 据 四 元 数 q ^ 和 r ^ 以 及 参 数 t 来 创 建 插 值 的 四 元 数 \\beginarrayc|c|c \\textbf标记 & \\textbf名称 & \\textbf特点 \\\\ \\hline \\mathbf T(\\mathbf t) & 平移矩阵 & 移动一个点,仿射 \\\\ \\mathbf R_x(\\rho) & 旋转矩阵 & 围绕x轴旋转\\rho弧度。正交、仿射 \\\\ \\mathbf S(\\mathbf s) & 缩放矩阵 & 根据\\mathbf s 沿着个坐标轴缩放。仿射 \\\\ \\mathbf H_ij(s) & 切变矩阵 & 将i 分量进行为s倍数的依据j分量的切变操作。 仿射 \\\\ \\mathbf E(h,p,r) & 欧拉变换 & 以欧拉角形式表示的指向矩阵。正交、仿射\\\\ \\mathbf P_o(s) & 正交投影 & 向平面或空间内进行平行投影。仿射\\\\ \\mathbf P_p(s) & 透视投影 & 向平面或空间内进行符合透视规则的投影\\\\ \\mathrmslerp(\\mathbf\\hat q,\\mathbf\\hat r,t) & 球面线性插值 & 根据四元数\\mathbf\\hat q和\\mathbf\\hat r以及参数t来创建插值的四元数 \\endarray 标记T(t)Rx(ρ)S(s)Hij(s)E(h,p,r)Po(s)Pp(s)slerp(q^,r^,t)名称线特点仿xρ仿s沿仿isj仿仿仿q^r^t

1.1 平移

将一个实体沿着向量 v = ( t x , t y , t z ) \\mathbf v=(t_x,t_y,t_z) v=(tx,ty,tz)平移的变换矩阵可以表示为:
T ( t ) = T ( t x , t y , t z ) = ( 1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 ) \\mathbf T(\\mathbf t) = \\mathbf T(t_x,t_y,t_z) = \\beginpmatrix1 & 0 & 0 & t_x\\\\ 0 & 1 & 0 & t_y\\\\ 0 & 0 & 1 & t_z\\\\ 0 & 0 & 0 & 1 \\endpmatrix T(t)=T(tx,ty,tz)=100001000010txtytz1
需要注意的是,平移变换对向量 v = ( v x , v y , v z , 0 ) \\mathbf v=(v_x,v_y,v_z,0) v=(vx,vy,vz以上是关于《Real-Time Rendering》第四版学习笔记——Chapter 4 Transforms的主要内容,如果未能解决你的问题,请参考以下文章

《Real-Time Rendering》第四版学习笔记——Chapter 4 Transforms

《Real-Time Rendering》第四版学习笔记——Chapter 9 Physically Based Shading

《Real-Time Rendering》第四版学习笔记——Chapter 9 Physically Based Shading

《Real-Time Rendering》第四版学习笔记——Chapter 4 Transforms

《Real-Time Rendering》第四版学习笔记——Chapter 4 Transforms

《Real-Time Rendering》第四版学习笔记——Chapter 2 The Graphics Rendering Pipeline