三维齐次坐标下变换的矩阵#
Scale#
S(sx,sy,sz)=sx0000sy0000sz00001Translation#
T(tx,ty,tz)=100001000010txtytz1Rotation#
Rx(α)=10000cosαsinα00−sinαcosα00001Ry(α)=cosα0−sinα00100sinα0cosα00001由于指定了z轴方向为z=x×y,因此x×z=−y
Rz(α)=cosαsinα00−sinαcosα0000100001
- 任意的3D旋转:Rxyz(α,β,γ)=Rx(α)Ry(β)Rz(γ)
- 罗德里格斯旋转公式:
R(n,α)=cos(α)I+(1−cos(α))n⊗nT+sin(α)0nz−ny−nz0nxny−nx0
将相机和模型一起移动,相机移动到世界坐标的原点
- 相机需要的要素:
- Position e
- Look-at/gaze direction g^
- Up direction t^
- 相机规定:
- g^为-Z方向
- t^为Y方向
- 相机变换:
1.平移回原点2.调整角度(g→−Z,t→Y,g×t→X)
Mview=RviewTview
Tview=100001000010−xe−ye−ze1Rview=xg^×t^xtx−g0yg^×t^yty−g0zg^×t^ztz−g00001可以先求Rview−1,再根据旋转矩阵为正交矩阵的性质求Rview=(Rview−1)T
Orthographic projection 正交投影#
Mortho=r−l20000t−b20000n−f200001100001000010−2r+l−2t+b−2n+f1Perspective Projection 透视投影#
将模型从空间坐标映射到摄像机近平面的坐标
- 规定挤压后的远平面z方向不变
- 规定近平面挤压后不变
- 规定挤压后远平面中心点位置不变
Mpersp→ortho=n0000n0000n+f100−nf0Mpersp=MorthoMpersp→ortho
y′=znyx′=znx
xyz1⟹nx/zny/zunknown1=nxnyunknownzMpersp→orthoxyz1=nxbyunknownz⟹Mpersp→ortho=n0?00n?000?100?0又因为近平面的性质(近平面上任何一个点变换后坐标都不变):
Mpersp→orthoxyn1=nxnyn2n故 Mpersp→ortho 第三行:
[00AB]xyn1=n2⟹An+B=n2又因为远平面中心点的性质(远平面的中心点的坐标值不变):
Mpersp→ortho00f1=00f2f⟹Af+B=f2故:
A=n+fB=−nf
即:
Mpersp→ortho=n0000n0000n+f100−nf0