快速计算向量位置,下文矩阵全是列主序四阶矩阵
- 定义向量vec=(x,y,z,w)
- 定义矩阵
mat4=m11m21m31m41m12m22m32m42m13m23m33m43m14m24m34m44
四阶矩阵
向量与矩阵相乘
x=x∗m11+y∗m21+z∗m31+w∗m41,y=x∗m12+y∗m22+z∗m32+w∗m42,z=x∗m13+y∗m23+z∗m33+w∗m43,w=x∗m14+y∗m24+z∗m34+w∗m44,=mat4×vec
x=x∗m11+y∗m12+z∗m13+w∗m14,y=x∗m22+y∗m22+z∗m23+w∗m24,z=x∗m33+y∗m32+z∗m33+w∗m34,w=x∗m44+y∗m42+z∗m43+w∗m44,=vec×mat4
矩阵与矩阵相乘
ma11ma21ma31ma41ma12ma22ma32ma42ma13ma23ma33ma43ma14ma24ma34ma44×mb11mb21mb31mb41mb12mb22mb32mb42mb13mb23mb33mb43mb14mb24mb34mb44
-
mc11=ma11×mb11+ma21×mb12+ma31×mb13+ma41×mb14
-
mc12=ma11×mb21+ma21×mb22+ma31×mb23+ma41×mb24
-
mc13=ma11×mb31+ma21×mb32+ma31×mb33+ma41×mb34
-
mc14=ma12×mb41+ma22×mb42+ma32×mb43+ma42×mb44
-
mc21=ma12×mb11+ma22×mb12+ma32×mb13+ma42×mb14
-
mc22=ma12×mb21+ma22×mb22+ma32×mb23+ma42×mb24
-
mc23=ma12×mb31+ma22×mb32+ma32×mb33+ma42×mb34
-
mc24=ma12×mb41+ma22×mb42+ma32×mb43+ma42×mb44
-
mc31=ma13×mb11+ma23×mb12+ma33×mb13+ma43×mb14
-
mc32=ma13×mb21+ma23×mb22+ma33×mb23+ma43×mb24
-
mc33=ma13×mb31+ma23×mb32+ma33×mb33+ma43×mb34
-
mc34=ma13×mb41+ma23×mb42+ma33×mb43+ma43×mb44
-
mc41=ma14×mb11+ma24×mb12+ma34×mb13+ma44×mb14
-
mc42=ma14×mb21+ma24×mb22+ma34×mb23+ma44×mb24
-
mc43=ma14×mb31+ma24×mb32+ma34×mb33+ma44×mb34
-
mc44=ma14×mb41+ma24×mb42+ma34×mb43+ma44×mb44
模型矩阵
x+x1,y+y1,z+z1,w,=100x1010y1001z10001×vec
x×x1,y×y1,z×z1,w,=x10000y10000z100001×vec
旋转
视图矩阵
通过目标点,视点,上方向,三个点计算视图矩阵。x,y 方向不变,z 方向相反。
- 目标点:target=(tx,ty,tz,tw)
- 视点:eye=(ex,ey,ez,ew)
- 上方向:up=(ux,uy,uz,uw)
- 以目标点为起点,视点为终点计算d=eye−target=(dx,dy,dz,dw)
- 将d归一化d∗=1/∣d∣
- 利用d与上方向叉乘求出a=d×up=(ax,ay,az,aw)
- 将a归一化a∗=1/∣a∣
- 利用d与上方向叉乘求出b=d×a=(bx,by,bz,bw)
- 利用d取反求出c=−d
- (a,b,c)即为视图矩阵中的(x,y,z)
正交投影矩阵
在裁剪空间内,物体大小不会因为距离远近而改变,通过上下边界,左右边界,近平面,远平面计算正交 投影矩阵。
- 上边界:top
- 下边界:bottom
- 左边界:left
- 右边界:right
- 近平面:near
- 远平面:far
- 计算裁剪空间的三轴方向长度与相机世界的三轴方向上的 1 个单位比例关系。
- 裁剪空间(用 1 表示) / 相机世界(用 2 表示,默认为 1)
- w1=w2w1=right−left2
- h1=h2h1=top−bottom2
- p1=p2p1=far−near2
- 通过比例关系求出矩阵与裁剪空间的位移量