Lecture 10: Geometry 1 (Introduction)¶
几何表示概述¶
在计算机图形学中,如何表示三维几何形状是一个基本问题。主要分为两大类:隐式表示(Implicit) 和 显式表示(Explicit)。
| 特性 | 隐式表示 | 显式表示 |
|---|---|---|
| 表达方式 | \(f(x,y,z)=0\) 的形式 | 直接给出点的位置 |
| 内外判断 | 容易(代入看符号) | 困难 |
| 采样渲染 | 困难 | 容易 |
| 布尔运算 | 容易 | 困难 |
| 拓扑变化 | 自然处理 | 需要额外处理 |
Implicit Representation¶
隐式表示法使用一个函数来表示几何图形。如一个球,可以表示为:
隐式表示难以进行渲染,但很方便进行布尔运算,如两个球的并集、交集等,也可以方便地判断点是否在图形内部。
隐式表示的布尔运算
给定两个隐式曲面 \(f(\mathbf{x}) = 0\) 和 \(g(\mathbf{x}) = 0\),可以通过如下方式构造布尔运算:
- 并集(Union):\(h(\mathbf{x}) = \min(f(\mathbf{x}), g(\mathbf{x})) = 0\)
- 交集(Intersection):\(h(\mathbf{x}) = \max(f(\mathbf{x}), g(\mathbf{x})) = 0\)
- 差集(Difference):\(h(\mathbf{x}) = \max(f(\mathbf{x}), -g(\mathbf{x})) = 0\)
这就是 构造实体几何(CSG) 的数学基础。
常见的隐式表示形式:
多项式方程 \(f(x,y,z) = 0\),如球面、圆柱面、圆锥面。
用一组基函数的和来定义表面,适合模拟液态、有机形状:
其中 \(\mathbf{c}_i\) 是各球体中心,\(T\) 是阈值。
\(f(\mathbf{x})\) 的值等于点 \(\mathbf{x}\) 到表面的最短距离(内部为负,外部为正),零等值面 即为几何表面。
Explicit Representation¶
显式表示法使用顶点、边、面等基本元素来表示几何图形。常见的显式表示法有多边形网格(polygon mesh)、曲面(surface)等。
所有的点都是直接给出或者通过参数映射给出。
如:
显式表示法便于渲染,但不方便进行布尔运算,也不方便判断点是否在图形内部。
实际应用中要根据实际需求选择合适的表示法。
多边形网格(Polygon Mesh)
在实时渲染中,最常用的显式表示是 三角形网格。它由以下元素组成:
- 顶点(Vertex):空间中的点,存储位置坐标
- 边(Edge):连接两个顶点的线段
- 面(Face):由三条或更多边围成的多边形(通常为三角形)
存储结构通常使用 索引数组(Indexed Face Set):一个顶点数组 + 一个索引数组,避免重复存储共享顶点。
Constructive Solid Geometry (CSG)¶
构造实体几何(CSG)使用布尔运算来构建复杂的几何图形。常见的布尔运算有并集、交集和差集。
graph TD
A["基本体素\n(球、立方体、圆柱等)"] --> B["并集 (Union)"]
A --> C["交集 (Intersection)"]
A --> D["差集 (Difference)"]
B --> E["复杂几何体"]
C --> E
D --> E
CSG 通常以 二叉树 的形式组织:叶节点是基本体素,内部节点是布尔运算。渲染时从根节点递归求值。
Distance Function¶
距离函数(Distance Function) 用于表示几何图形的距离信息。对于一个点 \((x, y, z)\),距离函数 \(f(x, y, z)\) 表示该点到几何图形表面的最短距离。
可以用于混合一个移动的边界。比如A情况下,边界移动了 \(\frac{1}{3}\),B情况下,边界移动了 \(\frac{2}{3}\),那么可以通过距离函数来混合这两种情况,得到一个新的边界,结果为边界移动了 \(\frac{1}{2}\)。
找到距离函数的零点即可得到边界。
距离函数的混合操作
给定两个几何体的 符号距离函数 \(f(\mathbf{x})\) 和 \(g(\mathbf{x})\),可以通过插值实现平滑过渡(Blend):
其中 \(t \in [0, 1]\) 控制混合比例。这种方法在动画中非常有用——可以实现一个物体平滑变形为另一个物体的效果。
与 CSG 的硬布尔运算不同,距离函数混合产生的是 光滑过渡面,适合模拟有机形状。
Level Sets¶
水平集(Level Sets) 用于表示几何图形的等值面。对于一个距离函数 \(f(x, y, z)\),其水平集 \(f(x, y, z) = c\) 表示距离为 \(c\) 的等值面。
在CT扫描中,可以通过水平集来重建三维图像。
水平集在医学影像中的应用
CT 扫描得到的是逐层的密度数据,将这些数据看作三维标量场,取适当的等值面(如骨骼密度阈值),即可重建出器官的三维表面。这就是 Marching Cubes 算法的基本思路。
Fractals¶
分形(Fractals) 是自相似的几何图形,可以通过递归的方法来生成。常见的分形有曼德布罗集(Mandelbrot Set)、朱利亚集(Julia Set)等。
分形的核心特征是 自相似性——无论放大多少倍,局部结构与整体结构相似。
表示方法对比¶
| 表示方法 | 类型 | 优点 | 缺点 | 典型应用 |
|---|---|---|---|---|
| 代数曲面 | 隐式 | 布尔运算简单 | 复杂形状难表达 | 基本体素 |
| 距离函数 / SDF | 隐式 | 混合平滑、内外判断快 | 精确求交困难 | 体素渲染、CSG |
| 多边形网格 | 显式 | GPU 渲染高效 | 布尔运算复杂 | 实时渲染 |
| 点云 | 显式 | 采集方便 | 无拓扑信息 | 三维扫描 |
| 参数曲面 | 显式 | 光滑连续 | 交线计算复杂 | CAD 建模 |