你可以直接这样回答
投影矩阵把 view space 点变成 clip space,除以 w 得 NDC,viewport 再映射到像素。分辨率变化要同步 aspect、render scale、深度范围和质量预算;我会用位置/深度 debug 和真实设备 profile 验证。
这道题真正想听什么?
先确认比较对象和回答边界,再决定要不要展开公式、工程实现或性能取舍。
考 clip → NDC → viewport 的边界:投影矩阵把相机空间送到裁剪空间,透视除法得到 NDC,视口再映射到像素。分辨率变化不只是“把画布拉伸”,还会影响 aspect、render scale、深度精度和带宽。
把答案讲到 2 分钟面试必答 · 约 2 分钟 · 补足因果、输入和取舍
我会明确 point 的 w、near/far、正交/透视和左/右手约定,再根据目标分辨率调 buffer scale 或动态分辨率。降低像素只影响部分 GPU 工作,不能掩盖 CPU/提交瓶颈;UI、抗锯齿和 TAA 需要独立验收。
面试官可能继续追问什么?补充自测 · 约 3 分钟 · 检查自己是不是真的懂了
- 问:忘了除以 w 会怎样? 答:透视远近关系消失或位置异常;必须把 clip xyz 除以 w 才进入 NDC。
- 问:分辨率越高一定越清楚吗? 答:通常像素和带宽更多,但瓶颈可能在 CPU/Shader;还要看 render scale 与动态分辨率策略。
- 因果链: view/projection → clip/w → NDC → viewport/resolution → 位置、深度与成本。
如果概念还是悬空,就去做实验关键证据 · 约 5–15 分钟 · 预测 → 单变量 → 观察
实验不是第二份答案,它只负责证明答案
如果上面的解释已经听懂,可以直接跳过。卡住时,再沿着这三步把抽象词变成画面证据。
- 先猜 先把变量画成箭头、角度或范围:它变大时,画面应该怎样变化?
- 去取证 固定其他条件,只改一个参数。先写下变化,不用“更真实”“更高级”这种空词代替证据。
- 再追问为什么 是哪一步造成这个结果?如果结果相反,先检查输入、空间、算法,还是显示输出?
我完全没头绪,给我一个起点
先截下默认状态,只动页面当前开放的那个参数。你只需要说清楚“原来怎样 → 改了什么 → 现在怎样”。
1. 先预测
在 Transform Math Lab 选 scene=matrix、debugMode=matrix,调 translationX/Y、scaleX/Y、perspective;在 Screen Space Lab 改 projection、bufferScale、nearPlane、farPlane。输入 → 变化 → 输出: 相机/投影/分辨率 → clip/NDC/viewport → 屏幕位置、深度和像素预算。
老师追问
先别急着查答案: 先把每个符号翻译成方向、长度、夹角或范围:变量变大时,哪个边界会先被碰到?
为什么: 你刚才的预测依赖哪个前提?如果把“Projection 与 Viewport”里最关键的变量或约束关掉,画面/输出会先坏在哪里?
如果结果相反: 先排除哪一层,再谈结论?这个规则的边界是什么?
2. 再动手
固定模型,先改变 perspective,再改变 Screen Space 的 nearPlane/farPlane 和 bufferScale;切 debugMode=position/depth/linear-depth。记录投影位置、device depth、GPU/带宽估算和边界,写一条“降 render scale 没解决 CPU 瓶颈”的验证。
3. 最后对证据
透视强度影响远近大小;near/far 比例大时远处深度可用精度更紧;buffer scale 降低像素工作但会损失清晰度。教学视口不等于完整引擎动态分辨率系统,真实项目还要测 aspect、TAA、UI、MSAA 和重建质量。
答案在代码哪里发生?实现定位 · 约 3 分钟 · 变量、函数和关键行
- 矩阵/齐次坐标:看平移、缩放、透视参数。
- Projection:读 clip 到屏幕 UV 的入口。
- Reconstruct:理解深度与位置的逆过程。
完整 5 分钟版本面试扩展 · 约 5 分钟 · 项目边界、验证与降级
生产方案按 GPU frame budget 动态调 scale,有滞回避免来回闪;记录清晰度、边缘、深度精度、带宽、温度和恢复时间。移动端按设备档位设置最小 scale,并在关键镜头锁定质量。Lab 只展示变换链,不伪装成完整引擎缩放算法。
哪些说法最容易答歪?必看陷阱 · 约 1 分钟 · 面试前最后检查
- 把 clip 坐标直接当屏幕坐标。
- 改宽高却不更新 aspect/viewport。
- near 太小、far 太大造成深度精度浪费。
- 降分辨率掩盖了非 GPU 瓶颈。