小镇上有两位手艺人。老画师阿罗总是眯起一只眼,把眼前的街道画进画布,铁路的钢轨在他笔下越远越靠拢,最终在云端汇成一个点。工程师老陈则端坐在绘图桌前,用丁字尺和三角板一笔一笔画出楼宇的三视图——正面的墙多宽就是多宽,侧面的窗多高就是多高,从不玩“近大远小”的把戏。两个人面对的是同一个难题:如何把立体的世界装进平面的纸里。阿罗的选择叫透视投影,老陈的选择叫正交投影。今天我们要聊的,正是这两种投影的区别——它们各自如何工作、背后的数学长什么样、又该在什么场景下选用。读完之后,你再看游戏画面和建筑图纸时,目光都会变得不一样。

岗位关联

掌握透视与正交投影的区别,是图形学工程师必备的基础功。它直接决定你在游戏渲染、CAD 制图、医学影像等方向上的项目选型能力。

目录
  1. 可视化演示
  2. 投影的本质
  3. 透视投影原理
  4. 正交投影原理
  5. 矩阵推导对比
  6. 投影参数选择
  7. 应用场景对比
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示透视投影视锥体近大远小效果、正交投影平行保持特性、以及两种投影方式的并排对比分析。

本节配有交互动效(进入视口后自动加载,约 3KB)。

透视投影:视锥体与近大远小 EYE=视点 N=近裁剪面 F=远裁剪面 近处物体投影大 远处物体投影小 size_screen = size_world / z 投影线汇聚于视点产生纵深效果

投影的本质

老画师阿罗和老工程师老陈是邻居。阿罗给游客画肖像,老陈给工地画图纸。两人每天做同一件事:把立体的世界落在平面的纸上。可阿罗的画纸上,远处的山逐渐变小,铁轨汇聚成一个点;老陈的图纸上,柱子的间距分毫不差,平行线永远是平行线。两人用的都是“画”,却各有各的学问——差别从“投影”的第一步就开始了。

在 3D 图形学里,投影就是把三维空间中的点,按照某种规则映射到二维平面上。这个“规则”用数学语言描述,就是一个投影矩阵 \(M\)。物体每个顶点的三维坐标 \(p\),经过矩阵乘法 \(p' = M \cdot p\),得到投影后的坐标。投影的三大要素是:视点(眼睛或相机的位置)、投影面(画布或屏幕)、投影线(光线或视线)。若投影线从视点放射状射出,物体离视点越远成像越小,这就是透视投影;若投影线彼此平行,物体无论远近成像大小不变,这就是正交投影。

所以,阿罗和老陈之间的差异,从一开始就藏在那支“笔”——投影矩阵里。下一节,我们先看看阿罗的画笔是怎么工作的。

p′=M⋅p\displaystyle p' = M \cdot p
这个公式是投影的总开关:左边的 \(p'\) 是结果,右边的矩阵 \(M\) 决定了我们是在“画家的画布”上作画,还是在“工程师的图纸”上制图。
  1. 原始顶点扩展把三维坐标 \((x, y, z)\) 补一个分量变成四维齐次向量,便于用统一矩阵表达变换。
    p=[xyz1]\displaystyle p = \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix}
  2. 矩阵乘法变换投影矩阵与顶点向量相乘,得到投影后的齐次坐标,其中包含了缩放、平移与深度信息。
    p′=M⋅p\displaystyle p' = M \cdot p
  3. 齐次归一化如果 \(p'\) 的第四个分量不为 1,还要整体除以该分量,这一步叫透视除法,是透视投影的灵魂。
    pndc=p′w′\displaystyle p_{ndc} = \frac{p'}{w'}

透视投影原理

阿罗站在铁轨中间,看着两条锃亮的钢轨伸向远方,最后在天边汇成一个点。他太熟悉这个现象了:枕木越远越密,电线杆越远越矮。他给这个现象起了个名字——近大远小。这正是透视投影的签名,也是人眼看世界的默认方式。

透视投影模拟人眼的成像。想象你站在窗前,透过玻璃看街道:近处的汽车在玻璃上的投影大,远处的楼宇投影小。玻璃是投影面,你的眼睛是视点,从眼睛射向物体每一点的视线必然穿过玻璃,这个交点就是物体在投影面上的像。数学上,透视投影的关键一步发生在裁剪空间:每个顶点的 \(w\) 分量不再恒为 1,而是等于观察空间深度的相反数 \(-z_{view}\)。随后 GPU 执行透视除法,把所有分量统一除以 \(w\)。

阿罗画布上铁轨的汇聚点叫灭点(Vanishing Point),在图形学中,所有平行于某个方向的直线,透视投影后都会收敛到同一个灭点。阿罗说:“我不是在画铁轨,我是在画光的汇聚。”

xndc=xclipwclip,yndc=yclipwclip\displaystyle x_{ndc} = \frac{x_{clip}}{w_{clip}}, \quad y_{ndc} = \frac{y_{clip}}{w_{clip}}
远处的物体 \(|z|\) 很大,\(w\) 也大,\(x\) 和 \(y\) 被一个大数除,于是成像变小。近大远小的魔法,全在这一除。
  1. 获得裁剪坐标顶点乘以透视矩阵后,得到 \((x_{clip}, y_{clip}, z_{clip}, w_{clip})\),其中 \(w_{clip}\) 恰好等于观察空间深度 \(z_{view}\) 的相反数。
    wclip=−zview\displaystyle w_{clip} = -z_{view}
  2. 执行透视除法将前三个分量统一除以 \(w_{clip}\)。深度绝对值越大,除数越大,坐标被压缩得越小,远方的物体自然就变小了。
    xndc=xclip−zview\displaystyle x_{ndc} = \frac{x_{clip}}{-z_{view}}

正交投影原理

老陈不画画,他画“三视图”:从正前方看,把建筑物的正面轮廓原原本本描下来;从正上方看,把楼顶平面图也描下来。在他的图纸上,相隔十米的柱子,远的那根绝不会比近的那根矮一毫米。老陈对阿罗的近大远小不屑一顾:“我要的是能拿去施工的尺寸。”

正交投影的成像方式,可以想象成一束来自无穷远处的平行光,垂直照射物体,把影子投在墙壁上。因为没有视点的放射效果,投影线彼此平行,无论物体距投影面多远,影子大小都不改变。在数学实现上,正交投影直接对坐标做线性搬移:把视域体——一个立方体盒子——的 \(x\)、\(y\) 线性映射到屏幕范围,整个过程不涉及除法,平行线的斜率关系因此原封不动。

老陈的尺子从不撒谎:十米就是十米,一毫米就是一毫米。正交投影正是这样一把“永不缩水”的尺子,把三维世界的尺寸忠实地复制到二维图纸上。

xndc=2r−l⋅xview−r+lr−l\displaystyle x_{ndc} = \frac{2}{r-l} \cdot x_{view} - \frac{r+l}{r-l}
其中 \(l\)、\(r\) 分别是视域体左、右边界。公式只做缩放和平移,不做除法,所以没有近大远小,平行线依然平行。
  1. 等比缩放将视域体在 \(x\) 方向上的宽度 \([l, r]\) 映射到长度为 2 的标准区间,缩放因子是 \(2/(r-l)\)。
    2r−l⋅xview\displaystyle \frac{2}{r-l} \cdot x_{view}
  2. 中心平移对齐当左右边界不对称时,用 \(-(r+l)/(r-l)\) 把区间中心移到原点,保证 NDC 范围两侧对称。
    −r+lr−l\displaystyle -\frac{r+l}{r-l}

矩阵推导对比

现在,让我们把阿罗的画布和老陈的图纸摊开,用手电筒照着背面,看看层层叠叠的算法到底长什么样。原来两人各有一本“翻译词典”:阿罗的词典把深度翻译成缩小比例,老陈的词典把深度翻译成线性编号。两本词典的差异,集中在矩阵的最后一行。

要理解这两本词典,得先认识齐次坐标。所谓齐次坐标,就是在原有三维坐标后面补一个 \(w=1\),变成四维向量,这样平移、缩放、旋转就能统一用矩阵乘法表达。正交投影矩阵保持 \(w = 1\) 不变,因此不做透视除法;透视投影矩阵则让 \(w = -z\),从而触发随深度缩放的透视除法。正交投影矩阵(参数为视域体左右上下远近边界):

而透视投影矩阵(参数为视场角、宽高比、近裁剪面、远裁剪面):

阿罗的词典用“深度”控制“大小”的翻译;老陈的词典对深度视而不见。两本词典最后一行的那串数字,就是两位手艺人最核心的秘密。

Mortho=[2r−l00−r+lr−l02t−b0−t+bt−b002near−farfar+nearnear−far0001]\displaystyle M_{ortho} = \begin{bmatrix} \frac{2}{r-l} & 0 & 0 & -\frac{r+l}{r-l} \\ 0 & \frac{2}{t-b} & 0 & -\frac{t+b}{t-b} \\ 0 & 0 & \frac{2}{near-far} & \frac{far+near}{near-far} \\ 0 & 0 & 0 & 1 \end{bmatrix}
透视矩阵前三行的作用与正交矩阵类似,但第四行埋了一个伏笔:它不再保持 \(w=1\),而是令 \(w=-z\),为透视除法铺路。
  1. 水平与垂直缩放前两行由视场角正切和宽高比决定,把可见锥体压进 NDC 的 \([-1,1]\) 范围。
    1aspect⋅tan⁡(fov2),1tan⁡(fov2)\displaystyle \frac{1}{aspect \cdot \tan(\frac{fov}{2})}, \quad \frac{1}{\tan(\frac{fov}{2})}
  2. 深度映射第三行把近平面 \(near\) 到远平面 \(far\) 的深度映射到 NDC 的 \([-1,1]\),这个映射包含倒数项,所以是非线性的。
    −far+nearfar−near,−2⋅far⋅nearfar−near\displaystyle -\frac{far+near}{far-near}, \quad -\frac{2 \cdot far \cdot near}{far-near}
  3. w 分量的秘密第四行 \((0,0,-1,0)\) 才是透视矩阵的“灵魂”,它让 \(w_{clip}=-z_{view}\),GPU 随后执行除法,自动完成近大远小。
    wclip=−zview\displaystyle w_{clip} = -z_{view}

投影参数选择

同一个街道,阿罗站在不同的位置、用不同焦距的望远镜观察,画出的街景宽窄各异。老陈虽然不关心站哪,却会在图纸角落标上“比例尺 1:100”和“图幅大小”。投影参数的调整,就是两位手艺人给自己的工具做的校准。

使用透视投影时,你需要调三组参数:视场角 FOV(镜头的广角程度)、宽高比 aspect(画布是宽屏还是竖屏)、近远平面 near/far(能看多远、舍掉多近)。其中视场角与“焦距” \(f\) 的关系非常直接:\(f = 1/\tan(fov/2)\)。FOV 越大,焦距越短,镜头越“广角”,画面边缘的拉伸畸变也越明显;FOV 越小,越像长焦镜头,物体看起来被“压扁”。宽高比必须与屏幕一致,否则圆形物体会被拉伸成椭圆。

更关键的是,近远平面的比值会直接影响深度缓冲(z-buffer)的精度。透视投影的深度映射是非线性的,大量精度集中在近平面附近,远平面附近两个很远的物体如果深度差很小,就可能映射到同一个值,产生 z-fighting 闪烁。正交投影的深度映射是线性的,完全没有这个烦恼。阿罗调的是“镜头的脾气”,老陈调的是“尺子的刻度”——选好参数,画才不歪。

tan⁡(fov2)=1f\displaystyle \tan\left(\frac{fov}{2}\right) = \frac{1}{f}
这个公式把镜头参数和投影矩阵联系起来:\(f\) 越大,表示焦距越长、视野越窄;\(f\) 越小,视野越宽、畸变越强。
  1. 半角正切在针孔相机模型中,半视角的正切等于成像平面半高与焦距之比,经过归一化后恰为 \(1/f\)。
    tan⁡(fov2)=1f\displaystyle \tan\left(\frac{fov}{2}\right) = \frac{1}{f}
  2. 反解焦距用上式反解 \(f\),得到的值直接填入透视矩阵的第二行对角线,决定垂直方向的缩放。
    f=1tan⁡(fov/2)\displaystyle f = \frac{1}{\tan(fov/2)}

应用场景对比

阿罗的画被挂在美术馆里,人们驻足赞叹“真像”;老陈的图纸被送进工地,工人们按它浇筑混凝土,分毫不差。两位手艺人各有各的战场,图形学里的选型也一样:追求视觉沉浸感就选透视投影,追求测量精确度就选正交投影。

游戏、VR、电影特效追求沉浸感,必须用透视投影——人眼就是这样看世界的,用透视渲染出的画面才自然。CAD、建筑制图、医学影像(CT/核磁)追求测量准确,必须用正交投影——医生和工程师需要从画面中读取真实比例,而不是被透视扭曲误导。实际工程中还会出现“混合使用”:游戏场景叠加 UI 界面时,UI 用正交投影、3D 场景用透视投影;一些 2.5D 视角的游戏也在固定角度下用正交投影来保持手绘感。理解深度映射的非线性,还能帮你诊断渲染中的视觉 bug:

所以下次打开游戏设置,看到 FOV 滑块时,你就知道那是阿罗在调“镜头的脾气”;打开 CAD 软件出三视图时,你也知道那是老陈在展示“尺子的刻度”。两者没有高下之分,只有是否适合当下的任务。

zndc=far+nearfar−near+2⋅far⋅near(far−near)⋅zcamera\displaystyle z_{ndc} = \frac{far+near}{far-near} + \frac{2 \cdot far \cdot near}{(far-near) \cdot z_{camera}}
这个公式揭示了一个重要的工程规律:透视投影下,深度缓冲的精度大多分给了近处物体,远处的物体越远越容易“打架”。
  1. 常数偏移项第一项 \((far+near)/(far-near)\) 是常数,把整体深度偏置到 NDC 原点附近,保证近处对应 \(-1\)、远处对应 \(+1\)。
    far+nearfar−near\displaystyle \frac{far+near}{far-near}
  2. 非线性缩放项第二项含 \(1/z_{camera}\),当相机距离 \(z_{camera}\) 很大时该项趋近于 0,深度几乎不再变化——这就是远处物体 z-fighting 的根源。
    2⋅far⋅near(far−near)⋅zcamera\displaystyle \frac{2 \cdot far \cdot near}{(far-near) \cdot z_{camera}}

AI 应用场景

游戏引擎的相机渲染管线

阶段:GPU 渲染管线的顶点处理阶段

解决的问题:传统游戏开发中,把 3D 场景映射到 2D 屏幕需要手写大量矩阵运算,容易出错且难以适配不同视角。现代引擎结合 AI 超分与畸变校正技术,能依据透视矩阵参数自动优化画面清晰度。

具体案例:在 Unity 中,主相机的 Field of View 参数(透视投影)决定玩家视野,而 UI 相机用正交投影保证界面元素不受场景远近干扰。当 AI 驱动的智能运镜系统调整 FOV 时,会同步更新透视矩阵,让玩家获得自然无畸变的视角。

CAD 三视图自动出图

阶段:几何建模与制图自动化

解决的问题:建筑和机械设计需要精确的三视图,传统方式由工程师手动切换视角、逐个标注尺寸,效率低且易漏标。AI 辅助模块在正交投影下自动生成三视图并标注尺寸。

具体案例:在 AutoCAD 中,模型完成后选择“三视图”指令,引擎用正交投影矩阵自动计算正视图、俯视图、侧视图,AI 再根据模型特征自动添加尺寸标注,整套流程从半小时缩短到几秒。

医学影像三维重建

阶段:医学图像后处理与可视化

解决的问题:医生在 PACS 工作站查看 CT/MRI 的冠状面、矢状面切片时,必须看到无变形的真实解剖结构,任何透视畸变都可能导致肿瘤尺寸误判。因此医学软件强制使用正交投影渲染。

具体案例:医学影像工作站中,医生拖动滑块切换切片平面,引擎即时用正交投影矩阵重新切片渲染;AI 辅助分割模型在正交视图下标注器官轮廓,通过多平面重建直观呈现病灶的立体形态。

Python 演示

python55 行
"""对比透视投影与正交投影对 3D 立方体的成像效果。"""import math def perspective_matrix(fov, aspect, near, far):    """构造透视投影矩阵(4x4,OpenGL 约定)。"""    f = 1.0 / math.tan(math.radians(fov) / 2.0)    return [        [f / aspect, 0, 0, 0],        [0, f, 0, 0],        [0, 0, (far + near) / (near - far), 2 * far * near / (near - far)],        [0, 0, -1, 0],    ] def orthographic_matrix(l, r, b, t, near, far):    """构造正交投影矩阵(4x4,OpenGL 约定)。"""    return [        [2 / (r - l), 0, 0, -(r + l) / (r - l)],        [0, 2 / (t - b), 0, -(t + b) / (t - b)],        [0, 0, -2 / (far - near), -(far + near) / (far - near)],        [0, 0, 0, 1],    ] def mul(mat, vec):    """4x4 矩阵乘以 4 维列向量。"""    return [sum(mat[i][j] * vec[j] for j in range(4)) for i in range(4)] def project(pts, mat):    """对顶点列表做投影,返回 NDC 二维坐标。"""    ndc = []    for p in pts:        clip = mul(mat, [p[0], p[1], p[2], 1.0])        w = clip[3]        ndc.append((clip[0] / w, clip[1] / w))    return ndc def main():    # 立方体 8 个顶点:x,y in [-1,1],z 在相机前方 -3 与 -5 之间    pts = [        (-1, -1, -3), (1, -1, -3), (1, 1, -3), (-1, 1, -3),        (-1, -1, -5), (1, -1, -5), (1, 1, -5), (-1, 1, -5),    ]    persp = perspective_matrix(60.0, 1.5, 0.1, 100.0)    ortho = orthographic_matrix(-2, 2, -1.5, 1.5, 0.1, 10)    p_ndc = project(pts, persp)    o_ndc = project(pts, ortho)    names = ["左前下", "右前下", "右前上", "左前上",             "左后下", "右后下", "右后上", "左后上"]    print("顶点    透视投影 (x, y)        正交投影 (x, y)")    print("-" * 52)    for i, n in enumerate(names):        print(f"{n}: ({p_ndc[i][0]:+.4f}, {p_ndc[i][1]:+.4f})  "              f"({o_ndc[i][0]:+.4f}, {o_ndc[i][1]:+.4f})") if __name__ == "__main__":    main()
目的:用同一组立方体顶点分别乘以透视矩阵和正交矩阵,直观展示“近大远小”与“尺寸不变”的差异。
  1. perspective_matrix(60.0, 1.5, 0.1, 100.0)构造 60° 视场角、1.5 宽高比的透视矩阵,近裁剪面 0.1,远裁剪面 100
  2. orthographic_matrix(-2, 2, -1.5, 1.5, 0.1, 10)构造左右各 2、上下各 1.5 的立方体视域,深度范围 0.1 到 10
  3. clip = mul(mat, [p[0], p[1], p[2], 1.0])把三维顶点补成齐次坐标后乘以投影矩阵,得到裁剪空间坐标
  4. w = clip[3]取出 w 分量:透视投影时它等于 -z,正交投影时恒为 1
  5. ndc.append((clip[0] / w, clip[1] / w))执行透视除法,这里透视与正交的命运分道扬镳

常见误区

误区总觉得 3D 就该用透视投影,一看到正交投影的画面就觉得“怪怪的”,认为它是被扭曲的、不真实的效果。

正解两者没有高低之分,只是用途不同。透视投影适合模拟人眼的视觉真实感,正交投影适合需要精确测量的工程场景。就像阿罗的画布和老陈的图纸各有各的价值,你不能说工程图纸“失真”,因为它的使命本来就是忠实记录尺寸。

为何常见:日常接触的游戏、视频大多是透视投影渲染的,潜移默化让人以为“看起来像照片”才是唯一正确的方式。

误区以为正交投影很简单,就是把三维坐标的 z 值扔掉,x 和 y 原样输出到屏幕。

正解正交投影同样需要对 x、y、z 做缩放和平移,把任意矩形视域映射到 NDC 的标准立方体 \([-1,1]^3\)。它只是不做除法,并不意味着“什么都不做”。老陈的尺子虽然不缩小物体,但依然要归零校准、换算比例尺。

为何常见:正交投影的数学形式比透视简单,容易让人误以为它只是一个“忽略深度”的懒操作。

误区把透视投影的 near 参数调得很小,以为这样可以把镜头怼到物体脸上还不裁剪,能看到更多场景。

正解near 过小会严重挤压深度缓冲的精度。透视投影的深度分布是非线性的,大量精度集中在近平面附近,near 越小,远平面附近的精度越差,远处的物体容易互相闪烁(z-fighting)。这就像阿罗把画笔怼在眼睛上画,近处的细节是清楚了,远处的风景却糊成一团。

为何常见:人们凭直觉认为参数范围越大越好,忽略了浮点精度在非线性映射下的分布规律。

误区追求广角镜头带来的震撼感,把 FOV 调到 120° 甚至更大,觉得看到的东西越多越爽。

正解FOV 过大(超过 100°)会引入明显的边缘拉伸畸变,画面边缘的物体会被拉长变形,反而破坏沉浸感。主流 FPS 游戏通常使用 60°–90° 的 FOV,正是为了在人眼舒适区和视野广度之间取平衡。

为何常见:容易把“视野广”和“效果好”画等号,忽略了人眼对透视畸变的敏感度。

误区既然正交投影尺寸精确、没有畸变,干脆所有场景都用正交投影,反正数学还更简单。

正解正交投影让远近物体一样大,画面缺乏深度线索,人眼会产生强烈的“平面感”和“不真实感”。在需要空间认知、距离判断的场景(游戏、VR、驾驶模拟)中,正交投影会让人完全丧失方向感。数学上正确不等于体验上正确。

为何常见:单纯从“数学精确”的角度推导结论,忽略了视觉心理和人类感知的基本规律。

面试题

Q1. 透视投影最显著的特征是什么?

单选题 · easy

  • A.保持平行线互相保持平行
  • B.产生近大远小的视觉效果← 正确答案
  • C.保持物体的真实尺寸比例
  • D.完全忽略场景的深度信息

答案:B。透视投影通过透视除法把远处的物体缩小,形成近大远小效果。A、C 是正交投影的特征,D 说“完全忽略深度”不符合事实,透视投影不仅不忽略深度,还把深度当作缩放因子。

Q2. 在正交投影中,两条平行的铁轨投影后应该?

单选题 · easy

  • A.汇聚于同一个远方的灭点
  • B.保持平行且间距处处一致← 正确答案
  • C.在远处逐渐变成点状虚线
  • D.在近端发生明显的弯曲变形

答案:B。正交投影的投影线彼此平行,不随距离改变几何关系,因此平行线投影后依然平行。A 是透视投影的灭点效果,C、D 与投影方式无关。

Q3. 透视投影中,近裁剪面与远裁剪面之间的空间被称为?

单选题 · easy

  • A.立方体视域区域
  • B.投影锥体视域← 正确答案
  • C.平行投影光带
  • D.场景包围球体

答案:B。透视投影的近远平面之间形成一个四棱锥截断体,称为视锥体。A 是正交投影的视域形状,C、D 在投影上下文中并不存在。

Q4. 以下哪个场景最适合使用正交投影?

单选题 · mid

  • A.第一人称射击游戏相机
  • B.CAD 机械制图的视图窗口← 正确答案
  • C.VR 虚拟现实头显画面
  • D.大型 3D 开放世界游戏

答案:B。CAD 制图需要保持几何尺寸精确,正交投影不改变比例、平行线保持平行,是工程图纸的标准选择。游戏、VR、大世界渲染追求视觉沉浸感,必须用透视投影模拟人眼。

Q5. 在其他参数不变时,增大视场角 FOV 最直接的影响是什么?

单选题 · mid

  • A.画面中央的物体变得更大
  • B.所有物体的像素尺寸不变
  • C.画面边缘的畸变感增强← 正确答案
  • D.渲染帧率获得显著提升

答案:C。FOV 越大,焦距 \(f=1/\tan(fov/2)\) 越小,物体整体投影更小,同时画面边缘的拉伸畸变更明显。A、B 与增大 FOV 的实际效果相悖,D 与几何投影无关。

Q6. 透视投影中,齐次坐标除法所用的 w 分量值取决于什么?

单选题 · mid

  • A.顶点的不透明度数值
  • B.顶点在观察空间的 -z 深度← 正确答案
  • C.顶点的纹理坐标 U 分量
  • D.顶点的光照强度数值

答案:B。透视矩阵第四行令 \(w=-z_{view}\),所以透视除法除以的是观察空间的深度。A、C、D 都是渲染管线的其他属性,与几何投影无关。

Q7. 正交投影矩阵中的对角元素 \(2/(r-l)\) 的几何含义是什么?

单选题 · hard

  • A.将 x 范围 [l, r] 映射到 NDC [-1,1]← 正确答案
  • B.将 x 方向的坐标值放大两倍
  • C.将 x 方向的坐标值缩小一半
  • D.让 x 方向的坐标值保持不变

答案:A。正交矩阵的缩放项把 \([l, r]\) 线性映射到 \([-1,1]\),缩放因子是 \(2/(r-l)\)。B、C 忽略了映射的目标区间,D 只有在 \(r-l=2\) 的特殊情况下才成立。

Q8. 透视投影矩阵的最后一行写成 (0, 0, -1, 0),它的核心作用是什么?

单选题 · hard

  • A.将颜色值进行归一化处理
  • B.生成透视除法所需的除数← 正确答案
  • C.对模型做整体的平移变换
  • D.直接计算裁剪空间深度值

答案:B。第四行让 \(w=-z\),为透视除法提供除数,是“近大远小”的数学根源。A 是颜色管线的操作,C 是模型变换的职责,D 的深度映射由第三行完成。

Q9. 正交投影具备以下哪些特点?

多选题 · mid

  • A.保持物体的真实比例关系← 正确答案
  • B.平行线投影后依然平行← 正确答案
  • C.远处的物体自然变小
  • D.不产生任何透视变形← 正确答案

答案:ABD。正交投影不做透视除法,远近物体大小一致,因此保持真实比例、平行线平行、无透视变形。C 是透视投影的效果,与正交投影正好相反。

Q10. 要构造一个透视投影矩阵,需要用到以下哪些参数?

多选题 · mid

  • A.视场角 FOV 的大小← 正确答案
  • B.画布宽高比 aspect 值← 正确答案
  • C.近裁剪面与远裁剪面距离← 正确答案
  • D.纹理的过滤采样模式

答案:ABC。透视矩阵由 fov、aspect、near、far 四个参数决定:fov 与 aspect 确定 x、y 缩放,near/far 确定深度映射范围。D 是纹理采样设置,与投影矩阵无关。