对应Games101 Lecture 3~4
# 模型变换
# 齐次坐标
就是将
点 xyz 表示为 xwywzww,其中w0 = 0
向量 xyz 表示为 xyz0
除了点和点相加的结果为中点以外,其他加减运算法则
# 线性变换
满足f(a+b)=f(a)+f(b)的变换
其中f(x)可以表示为矩阵*向量
# 仿射变换
满足g(x)=f(x)+a的变换,a取0向量即线性变换
可以理解先线性变换再平移
g(x)可以表示为齐次坐标下的矩阵*向量
# 正交变换(optional)
变换矩阵为标准正交基组成的矩阵
变换前后长度、面积、体积的绝对值不变
# 刚体变换(optional)
仿射+正交+保持内部角度
# 常见案例
以下使用其次坐标的4*4矩阵
若第四行和第四列中近右下角元素为1,其余为0,可以删去第四行和第四列
# 旋转
正交矩阵
绕x轴
10000cosθ−sinθ00sinθcosθ00001
绕y轴
cosθ0sinθ00100−sinθ0cosθ00001
绕z轴
cosθ−sinθ00sinθcosθ0000100001
# 缩放
k为缩放系数
kx0000ky0000kz00001
# 平移
v为平移的向量
100001000010vxvyvz1
# 推导
因为所有仿射变换都可以用齐次坐标的变换矩阵表示
根据一些特殊值我们可以得到一些方程,就可以解出来这个变换矩阵了
# 拓展
那么问题来了,如果要沿着某一根特定的轴而非坐标轴又该如何变换呢
"只需要把未知的问题转化为已解决的问题"
"正难则反"
# 视点变换 Viewing
# 视图变换 View
摄像机拥有三个属性
所在位置e
观察方向g
向上方向t,摄像机向上的方向,垂直于观察方向,可以绕着观察方向旋转
视图变换将g, t, g×t 分别变换为−Z, Y, X
该矩阵不好推导
但是逆矩阵容易推倒
[g×t0t0−g001]
都是单位向量的话,就是正交矩阵了
逆矩阵就是他的转置!
视图变换完就可以投影了
# 正交投影
相当于无限大的焦距
所有平行线变换后平行交于无穷远点
相当于把视野内的物体转换到一个[-1,1]*[-1,1]的矩形里,并丢失z坐标
具体操作就是将要渲染的长方体空间通过平移和缩放转换为规范性,即-1到+1,中心在原点的立方体
# 透视投影
视野变为一个棱台
需要把它映射到一个长方体中,再进行正交投影
通过一些特殊的点,以及把齐次坐标下的w变为z这种骚操作
可得到变换矩阵(透视到正交)为
n0000n0000n+f100−nf0
n为靠近摄像机平面的z坐标,f为远离摄像机平面的z坐标
因为摄像机看向-Z轴,所以n>f
# 总结
先进行模型变换
再进行视口变换
最后进行投影
然后就可以光栅化了