跳到主要内容
腾讯题库 · Q33
先读 30 秒回答

第 33 题 / 50

学习状态 未开始

齐次坐标

面试官问

PDF 第 70 页

什么是“齐次坐标”?在 3D 变换中为何需要引入第四个维度?(常问题,理清逻辑)

数学基础 homogeneous-coordinates · transform 对应课程:transform-math

先把问题答上

你可以直接这样回答

约 30 秒

齐次坐标用第四维 w 把仿射变换和投影统一到矩阵乘法:点通常 w=1,会受到平移;方向 w=0,不应被平移;clip 后再除以 w 得 NDC。法线要用逆转置并归一化。

这道题真正想听什么?

先确认比较对象和回答边界,再决定要不要展开公式、工程实现或性能取舍。

考点是为什么平移、旋转、缩放和透视可以统一为矩阵乘法,以及 point 和 direction 为什么使用不同的 w。w=1 的点会被平移,w=0 的方向不应该被平移;透视除法后不同 w 还会产生远近关系。工程权衡是用统一矩阵换取清晰的空间契约,同时承担精度和带宽成本;遇到异常 w 时要验证并回退。

把答案讲到 2 分钟面试必答 · 约 2 分钟 · 补足因果、输入和取舍

我会先区分 point、direction、normal 的语义,再明确矩阵乘法顺序和坐标空间。透视阶段 w 不只是标记,还决定深度/远近;调试时直接显示中间 clip/NDC,而不是只看最终画面。

面试官可能继续追问什么?补充自测 · 约 3 分钟 · 检查自己是不是真的懂了
  • 问:w 只是多存一个数字吗? 答:它携带仿射/投影语义,让矩阵能表达平移并在最后做透视除法。
  • 问:法线也用 w=1 吗? 答:法线不是位置,通常使用逆转置矩阵并忽略平移,还要重新归一化。
  • 因果链: 语义(w) → 矩阵乘法 → clip/NDC → 屏幕位置/方向。
如果概念还是悬空,就去做实验关键证据 · 约 5–15 分钟 · 预测 → 单变量 → 观察

实验不是第二份答案,它只负责证明答案

如果上面的解释已经听懂,可以直接跳过。卡住时,再沿着这三步把抽象词变成画面证据。

  1. 先猜 先把变量画成箭头、角度或范围:它变大时,画面应该怎样变化?
  2. 去取证 固定其他条件,只改一个参数。先写下变化,不用“更真实”“更高级”这种空词代替证据。
  3. 再追问为什么 是哪一步造成这个结果?如果结果相反,先检查输入、空间、算法,还是显示输出?
我完全没头绪,给我一个起点

先截下默认状态,只动页面当前开放的那个参数。你只需要说清楚“原来怎样 → 改了什么 → 现在怎样”。

1. 先预测

Transform Math Labscene=matrixdebugMode=matrix,只改 translationX/Y,再切 perspective。这个页面实际展示的是 polygon 和一个 point,不提供 direction 或 w 滑杆;所以先把它当作“平移如何影响位置”的可视证据,再在代码页/DevTools 里手算同一矩阵对 (x,y,z,1)(x,y,z,0) 的结果。输入 → 变化 → 输出: Lab 的 polygon/point → 平移与透视变化 → 位置证据;代码阅读/手算的 w → 方向与点的语义。

老师追问

先别急着查答案: 先把每个符号翻译成方向、长度、夹角或范围:变量变大时,哪个边界会先被碰到?

为什么: 你刚才的预测依赖哪个前提?如果把“齐次坐标”里最关键的变量或约束关掉,画面/输出会先坏在哪里?

如果结果相反: 先排除哪一层,再谈结论?这个规则的边界是什么?

2. 再动手

固定 scaleX/Y 和角度,只把 translationX/Y 从 0 调到 1,观察 polygon 与 point 的位移;再切 debugMode=matrix 读列向量。读 MatrixHomogeneous,在纸上或 DevTools 里手算一组 w=1、w=0 输入并画小图;不要把这一步误认为页面已经输出了 direction 指标。

3. 最后对证据

平移会改变点的位置,不应改变纯方向;perspective 增大后远近比例变化。Lab 是二维教学视图,真实引擎还要确认矩阵存储行列、乘法顺序、handedness、深度范围和法线逆转置。

答案在代码哪里发生?实现定位 · 约 3 分钟 · 变量、函数和关键行
完整 5 分钟版本面试扩展 · 约 5 分钟 · 项目边界、验证与降级

在引擎/Shader 交付中,矩阵约定、列主序、深度范围和 handedness 写进接口与测试。移动端优化不能删掉必要的 w/逆转置保护;任何近零 w、非均匀缩放和负缩放都要有失败样例。Lab 只帮助建立语义。

哪些说法最容易答歪?必看陷阱 · 约 1 分钟 · 面试前最后检查
  • 把方向当点参与平移。
  • 忘了透视除法或近零 w。
  • 法线直接乘 model 矩阵。
  • 混淆行向量/列向量和乘法顺序。