[简化版 GAMES 101] 计算机图形学 07:图形学投影完全推导
- Bilibili 同步视频
- 0. 前置约定 📌
- 一、正交投影 Orthographic Projection
- 1.1 直观理解
- 1.2 变换两步走
- 平移矩阵
- 缩放矩阵
- 正交投影矩阵(最终)
- 二、透视投影 Perspective Projection
- 2.1 核心思路
- 2.2 挤压规则
- 2.3 相似三角形推导 XY 变换
- ✍️ 补充:第三行为什么是 [0,0,A,B]
- 2.4 解方程求 A、B
- 2.5 透视→正交矩阵
- 2.6 完整透视投影矩阵
- 三、关键结论 💡
- 四、经典思考题 🤔
Bilibili 同步视频
[简化版 GAMES 101] 计算机图形学 07:图形学投影完全推导
在计算机图形学中,投影变换是连接 3D 世界与 2D 屏幕的唯一桥梁✨。正交投影(Orthographic)与透视投影(Perspective)是所有渲染、相机、视图系统的底层根基。本文严格依照经典图形学推导,完整复现矩阵由来,不跳步、不省略,带你一次吃透两种投影的数学本质。
0. 前置约定 📌
相机位于原点 (0,0,0)
看向-Z 方向
向上为+Y 方向
使用右手坐标系
近平面:
n(较大 Z),远平面:f(较小 Z)
➡️n > f
一、正交投影 Orthographic Projection
1.1 直观理解
正交投影 = 相机在无限远处
平行光线射入 →无近大远小→ 平行线永远平行
适合:工程制图、CAD、蓝图
核心:把一个任意长方体映射到标准立方体 NDC。
1.2 变换两步走
平移:把长方体中心移到原点
缩放:把长宽高缩到 [-1,1]
平移矩阵
c x = f r a c l + r 2 , c y = f r a c b + t 2 , c z = f r a c n + f 2 c_x = frac{l+r}{2}, c_y = frac{b+t}{2}, c_z = frac{n+f}{2}cx=fracl+r2,cy=fracb+t2,cz=fracn+f2
KaTeX parse error: Expected 'EOF', got '&' at position 21: …egin{bmatrix}1 &̲ 0 & 0 & -c_x …
缩放矩阵
KaTeX parse error: Expected 'EOF', got '&' at position 32: …x}frac{2}{r-l} &̲ 0 & 0 & 0 0 &…
正交投影矩阵(最终)
KaTeX parse error: Expected '}', got '&' at position 46: …x}frac{2}{r-l} &̲ 0 & 0 & -frac{…
二、透视投影 Perspective Projection
2.1 核心思路
透视投影观测空间是视锥体 Frustum,直接求矩阵很难 →拆成两步
把 Frustum 挤成长方体(Perspective → Ortho)
做正交投影
2.2 挤压规则
近平面任意点完全不变
远平面 Z 不变,仅 XY 收缩
中心点不变
2.3 相似三角形推导 XY 变换
x ′ = x c d o t f r a c n z , y ′ = y c d o t f r a c n z x' = x cdot frac{n}{z}, y' = y cdot frac{n}{z}x′=xcdotfracnz,y′=ycdotfracnz
齐次坐标同乘 z:
( x , y , z , 1 ) t o ( n x , n y , ? , z ) (x,y,z,1) to (nx, ny, ?, z)(x,y,z,1)to(nx,ny,?,z)
得到矩阵雏形:
KaTeX parse error: Expected 'EOF', got '&' at position 27: …egin{bmatrix}n &̲ 0 & 0 & 0 0 &…
✍️ 补充:第三行为什么是 [0,0,A,B]
第三行计算输出深度z',z' 只和原深度 z 相关,与 x、y 无关,因此前两位必须为 0,只保留 z 与常数项的系数 A、B。
2.4 解方程求 A、B
近平面条件:
A n + B = n 2 A n + B = n^2An+B=n2
远平面中心点条件:
A f + B = f 2 A f + B = f^2Af+B=f2
联立解得:
b o x e d A = n + f , q u a d b o x e d B = − n f boxed{A = n+f},quad boxed{B = -n f}boxedA=n+f,quadboxedB=−nf
2.5 透视→正交矩阵
KaTeX parse error: Expected '}', got '&' at position 33: …egin{bmatrix}n &̲ 0 & 0 & 0 0 &…
2.6 完整透视投影矩阵
b o x e d M p e r s p = M o r t h o c d o t M p 2 o boxed{M_{persp} = M_{ortho} cdot M_{p2o}}boxedMpersp=MorthocdotMp2o
三、关键结论 💡
正交:无近大远小,仅平移 + 缩放
透视:有近大远小,先挤压再正交
右手系下:n > f
挤压矩阵第三行前两位为 0,因深度与 x、y 无关
四、经典思考题 🤔
视锥体中间点 z=(n+f)/2,挤压后会被推向远平面,这是深度精度与 Z‑fighting 的核心原因。