
3D 原理
一、3D 渲染管线
模型空间 → 世界空间 → 摄像机空间 → 剪切空间 → 标准化设备坐标 → 视口
Local/Object Space ⸺ ModelView Matrix →
World Space ⸺ Viewing Matrix →
Eye/Camera Space ⸺ Projection Matrix →
Clip Space ⸺ Perspective Divide →
NDC Space ⸺ Viewport Matrix →
Screen Space
实现 3D 显现可以简化, 多数使用单位阵, 仅处理 2 个矩阵
World Space = Eye/Camera Space ⸺ Projection Matrix Perspective Divide →
Clip Space、NDC Space ⸺ Viewport Matrix →
Screen Space
然后取其乘积, 仅保存一个矩阵, 运动通过基本的平移、绕轴旋转、反射等等显现.
非常简单!
本程序实验上述思路.
1、 Eye/Camera Space ⸺ Projection Matrix Perspective Divide → Clip/NDC Space
Frustum → NDC
Frustum 的近远平面距离分别为 n,f.
近平面的举行参数为 l,r, t,b 即 left,right,top,bottom.
x'/n=x/z, y'/n=y/z.
z'=a/z+b: n→-1, f→-1. perspective divide,
--不知道为什么不用线性函数?
--用线性函数凑不出射影变换矩阵.
z' 的函数图形为
从 a/n+b=-1, a/f+b=1 得到
a=2/(1/f-1/n),
b= 1-2/(1 - f /n) = -(1+f/n)/(1 - f /n) = -(n+f)/(n-f).
故
z'=2fn/(n-f) /z + (f+n)/(f-n)
考虑到 x,y 的缩放 [l,r]↦[-1,1], [t,b]↦[-1,1],所以
x'=
y'=