Skip to content

Lecture 11: Geometry 2(Curves and Surfaces)

Explicit Representations in Computer Graphics

Point Cloud

点云是最简单的表现形式,直接用一组离散的点来表示物体的形状。点云通常通过3D扫描仪获取,适用于捕捉复杂的几何形状,可以变成多边形网格。

Polygon Mesh

多边形网格是计算机图形学中最常用的几何表示方法。它由顶点、边和面组成,通常使用三角形或四边形来构建复杂的3D模型。多边形网格易于渲染和处理,广泛应用于游戏和动画制作。

.obj 文件格式是常见的多边形网格文件格式,支持顶点、纹理坐标和法线等信息。

格式示例:

Text Only
# 这是一个简单的立方体 (单位边长,从 (0,0,0) 到 (1,1,1))

# 顶点 (v x y z)
v 0.0 0.0 0.0
v 1.0 0.0 0.0
v 1.0 1.0 0.0
v 0.0 1.0 0.0
v 0.0 0.0 1.0
v 1.0 0.0 1.0
v 1.0 1.0 1.0
v 0.0 1.0 1.0

# 纹理坐标 (vt u v)
vt 0.0 0.0
vt 1.0 0.0
vt 1.0 1.0
vt 0.0 1.0
vt 0.0 0.0
vt 1.0 0.0
vt 1.0 1.0
vt 0.0 1.0

# 法线 (vn x y z) - 六个面法线
vn  0.0  0.0 -1.0   # 前面 (z = 0)
vn  0.0  0.0  1.0   # 后面 (z = 1)
vn -1.0  0.0  0.0   # 左面 (x = 0)
vn  1.0  0.0  0.0   # 右面 (x = 1)
vn  0.0 -1.0  0.0   # 底面 (y = 0)
vn  0.0  1.0  0.0   # 顶面 (y = 1)

# 面 (f v/vt/vn) - 每个四边面拆成两个三角形
# 前面 (1,2,3,4) 使用 vn 1
f 1/1/1 2/2/1 3/3/1
f 1/1/1 3/3/1 4/4/1

# 后面 (5,6,7,8) 使用 vn 2
f 6/6/2 5/5/2 8/8/2
f 6/6/2 8/8/2 7/7/2

# 左面 (1,4,8,5) 使用 vn 3
f 1/1/3 4/4/3 8/8/3
f 1/1/3 8/8/3 5/5/3

# 右面 (2,6,7,3) 使用 vn 4
f 2/2/4 6/6/4 7/7/4
f 2/2/4 7/7/4 3/3/4

# 底面 (1,5,6,2) 使用 vn 5
f 1/1/5 5/5/5 6/6/5
f 1/1/5 6/6/5 2/2/5

# 顶面 (4,3,7,8) 使用 vn 6
f 4/4/6 3/3/6 7/7/6
f 4/4/6 7/7/6 8/8/6

Curves

这里专门讲贝塞尔曲线(Bézier Curve)。

贝塞尔曲线是一种参数化曲线,广泛应用于计算机图形学和设计中。

Bézier Curve

通过de Casteljau算法来计算贝塞尔曲线。

这个算法的计算过程如下:

以三个点为例,给定点\(b_0, b_1, b_2\),以及参数\(t\),计算点\(b(t)\)

  1. 计算线性插值点:

  2. \(b_{0}^{1}(t) = (1-t)b_0 + t b_1\)

  3. \(b_{1}^{1}(t) = (1-t)b_1 + t b_2\)
  4. 再次线性插值:
  5. \(b_{0}^{2}(t) = (1-t)b_{0}^{1}(t) + t b_{1}^{1}(t)\)
  6. 代入化简得到:
  7. \(b_{0}^{2}(t) = (1-t)^2 b_0 + 2(1-t)t b_1 + t^2 b_2\)

扩充到\(n\)个点:

\[ b^n(t) = b_{0}^{n}(t) = \sum_{i=0}^{n} \binom{n}{i} (1-t)^{n-i} t^i b_i \]

曲线就是把这个点随着参数 t 在区间 \([0,1]\) 连续变化时得到的轨迹。

Properties of Bézier Curves

  1. 端点插值:曲线在\(t=0\)时通过\(b_0\),在\(t=1\)时通过\(b_n\)
  2. 凸包性质:曲线完全位于控制点的凸包内。
  3. 变换不变性:对控制点进行线性变换(如平移、旋转、缩放),曲线也会相应变换。

Piecewise Bézier Curves

Piecewise Bézier曲线是将多个Bézier曲线段连接起来形成的连续曲线。每个曲线段由一组控制点定义,通常使用4个控制点来定义一个三次Bézier曲线段,即Piecewise Cubic Bézier曲线。

原因是:对于起点和终点,曲线在这些点处的切线方向由相邻的控制点决定,可以使用类似操作杆的方式来控制曲线的形状。

1756051953564

当使用Piecewise Bézier曲线时,需要确保曲线段之间的连接处具有一定的连续性,常见的连续性有:

  • C0连续:曲线段在连接点处位置连续,即连接点相同。
  • C1连续:曲线段在连接点处一阶导数连续,需要连接点左右相邻的控制点共线且距离相等。
  • C2连续:曲线段在连接点处二阶导数连续。

其他曲线

  • Spline曲线:由多段低阶多项式拼接而成,常见的有B样条(B-spline)和NURBS(Non-Uniform Rational B-Splines)。其中B样条曲线具有局部控制性,也就是说,调整一个控制点只会影响曲线的局部形状,而不会影响整个曲线。

Surfaces

曲面是三维空间中的二维几何对象。

Bézier Surface

Bézier曲面是Bézier曲线的二维推广。它由一组控制点网格定义,通常使用双参数\((u, v)\)来表示曲面上的点。

如使用\(m \times n\)个控制点\(b_{ij}\),则Bézier曲面可以表示为:

\[ S(u, v) = \sum_{i=0}^{m} \sum_{j=0}^{n} B_{i}^{m}(u) B_{j}^{n}(v) b_{ij} \]

其中\(B_{i}^{m}(u)\)\(B_{j}^{n}(v)\)分别是Bézier基函数。

\[ B_{i}^{m}(u) = \binom{m}{i} (1-u)^{m-i} u^i\qquad B_{j}^{n}(v) = \binom{n}{j} (1-v)^{n-j} v^j \]

以4x4控制点为例,选定一个特定方向,如u方向,计算出4条Bézier曲线,然后在v方向上对这4条曲线再进行Bézier插值,得到曲面上的点。

Mesh Operations

常见的网格操作包括:

  • Subdivision:细分网格以增加其分辨率和光滑度。
  • Simplification:简化网格以减少其复杂度。
  • Regularization:调整网格以改善其质量和形状。