几何体
发表于|更新于|ComputerGraphics
|浏览量:
注:本文内容已全部移动到 顶点、图元与屏幕映射 的「模型的表示」与「网格几何体的操作」两节,此文件待删除。
相关推荐

2026-08-31
层次包围结构
需要预先学习: 光线追踪 剔除总结 层次包围结构 两个看似无关的问题,其实是同一件事: 剔除总结 里的视锥剔除,每帧要拿每个物体的包围体测六个平面——物体一多,CPU 逐个测试本身就成为开销; 光线追踪 里每条光线要与每个三角形求交——三角形数乘以光线数,直接相乘完全不可接受。 两者的共同点:绝大多数测试的结果都是"没有命中",但每一次"没有"都要花一次测试的代价换回来。层次包围结构(hierarchical bounding structure)的思路是让"没有"变得成片:把物体按空间位置组织成一棵树,每个节点用包围体框住它负责的所有内容;光线或视锥与某个节点的包围体不相交,整棵子树一次排除。单次查询的复杂度从 O(n)O(n)O(n) 降到 O(logn)O(\log n)O(logn)。 按"切的东西"不同,层次结构分两大族: 族类 切的是什么 代表结构 空间划分(spatial subdivision) 空间本身 均匀网格、八叉树、BS...

2026-08-28
阴影
需要预先学习: 深度缓冲 ShadowMapping(阴影贴图) 着色与渲染管线 里提过,着色是局部的:每个点只根据光源与自身材质计算颜色,完全不知道其他物体的存在。所以 Blinn-Phong 管线本身画不出阴影——被遮挡的点和直接被照亮的点会得到相同的着色结果。ShadowMapping(阴影贴图)为光栅化管线补上这块能力,出发点是一个关键观察: 一个点不在阴影中,当且仅当光源能直接看到这个点。 "从某个视点看,谁能被看见"正是 深度缓冲 解决的问题。ShadowMapping 的思路,就是把深度测试搬到光源的位置再做一遍。 算法流程 ShadowMapping 分两遍(two-pass)渲染。 Pass 1:从光源渲染场景,只记深度。把光源当作一台摄像机——平行光配正交投影,点光源配透视投影(见 视图(摄像机)与投影)——渲染整个场景,但不存颜色,只把深度缓冲存下来。这张深度图就是阴影贴图(shadow map):它记录了从光源看过去,每个方向上最近的表面有多远。 **Pass 2:从摄像机正常渲染场景。**着...

2026-10-27
顶点、图元与屏幕映射
需要预先了解: 模型、视图、投影(MVP)变换 模型的表示 我们想要在电脑里创建一个几何体,就是要想办法去存储一个模型。首先,不免要考虑一个模型应当用什么数据表示。表示方式决定了存储、处理和绘制的方方面面。 几何表示分两大类: 隐式表示(implicit representation):不直接给出表面上的点,而是给出点满足的关系。比如单位球面 x2+y2+z2=1x^2 + y^2 + z^2 = 1x2+y2+z2=1,以及距离场、水平集、CSG 等 显式表示(explicit representation):直接给出点,或者给出从参数到三维点的映射。比如点云、贝塞尔曲面、多边形网格。 两类表示正好互补: 表示方式 典型例子 判断点在内外 找到表面上的点 隐式 代数曲面、距离场 容易,代入函数看符号 困难,需求解方程 显式 点云、贝塞尔曲面、网格 困难 容易,直接给出或按参数计算 我们在实时渲染中更多地会使用显式表示,尤其是网格。因为显式表示可以直接送进 GPU 渲染管线,而隐式表示通常需要先离散化成显式表示才能渲染。 下面介绍几种常见...

2026-09-08
坐标空间总览
需要预先学习: 变换 视图(摄像机)与投影 光栅化 一个顶点的旅程 前面几篇笔记分别讲了变换(变换)、视图与投影(视图(摄像机)与投影)、光栅化(光栅化),每一篇都工作在某一个特定的坐标空间里。这篇笔记把它们串成一条完整的链:一个顶点从模型文件出发,到成为屏幕上的像素,中间经过哪些空间、每一步由哪个矩阵驱动、www 分量经历了什么。 空间 又称 变换矩阵 关键操作 模型空间 局部空间(local space) —(起点) 顶点属性定义于此 世界空间 world space 模型矩阵 MMM 摆放物体、光源与摄像机 视图空间 摄像机空间 / 眼睛空间(eye space) 视图矩阵 VVV 摄像机移到原点、看向 −z-z−z 裁剪空间 clip space 投影矩阵 PPP 可视区域规范化,www 携带深度 NDC 标准化设备坐标 透视除法(除以 www) 坐标落入 [−1,1]3[-1, 1]^3[−1,1]3 屏幕空间 screen space 视口变换 映射到像素网格,进入光栅化 整...

2026-08-27
纹理映射
需要预先学习: 着色与渲染管线 光栅化 插值 在渲染管线中,光栅化阶段(见 着色与渲染管线)需要为三角形内部的每个片元确定颜色、法线、纹理坐标等属性,而顶点只提供了属性在三个顶点处的值。三角形内部的属性要靠插值(interpolation)推算:已知离散的顶点值,估计连续区域内的值。 线性插值 线性插值(linear interpolation)是最基本的插值方式:在两个已知值之间按比例取中间值。一维情况下,在 aaa、bbb 之间按参数 t∈[0,1]t \in [0, 1]t∈[0,1] 插值: lerp(a,b,t)=(1−t)⋅a+t⋅blerp(a, b, t) = (1 - t) \cdot a + t \cdot b lerp(a,b,t)=(1−t)⋅a+t⋅b t=0t = 0t=0 得到 aaa,t=1t = 1t=1 得到 bbb,t=0.5t = 0.5t=0.5 得到中点。这个式子对二维点、三维向量同样成立,逐分量计算即可。 重心坐标 三角形内部任意一点的位置可以用重心坐标(barycentric coordinates...

2026-08-25
模型、视图、投影(MVP)变换
需要预先了解: 变换 模型变换(Model Transformation) 模型变换(model transformation)把顶点从模型空间(model space,也称局部空间 local space)变换到世界空间(world space),对应的矩阵称为模型矩阵(model matrix),一般用符号 MMM 来表示。 计算机图形学中,我们经常会提到“空间”的概念,这里可以把空间理解为一个坐标系,用于描述物体的位置和方向。 具体地讲,通常一个模型在建模软件里被创造出来,里面需要存储顶点之类的模型的数据,建模的过程其实就是在模型空间中,原点通常落在模型的中心或脚底,轴向由建模习惯决定(Blender 默认 zzz 轴向上,glTF 和多数引擎默认 yyy 轴向上)。这些数字只有在"这个模型自己"的语境下才有意义。世界空间则是整个场景(scene)共享的坐标系,物体的摆放、光源与摄像机的位置都在这里描述,后续会讲到的视图变换与光照计算也都在这个空间里进行。 模型矩阵的组成 模型矩阵一般由平移(translation)、旋转(rotat...

