GAMES101学习笔记(15)- 几何基础:分段贝塞尔曲线、曲面与样条函数
- 2026-11-08 10:18:22
“大家好,我是 Oo青花鱼,一名专注 WebGIS 与三维可视化方向的开发者,欢迎关注我,我们一起探索三维宇宙~”
前言
在上一篇中,我们学习了单条贝塞尔曲线,了解了控制点、曲线性质,以及 de Casteljau 算法如何用反复线性插值构造曲线。不过,当控制点增多时,单条贝塞尔曲线的迭代次数会上升,而且任何一个控制点都会全局影响整条曲线,不方便设计师操作。这一篇我们接着看分段贝塞尔曲线,看看它是如何解决这一问题的,并进一步了解曲面、样条函数等更复杂的几何。
分段贝塞尔曲线(Piecewise Bézier Curves)
分段贝塞尔曲线这个词听起来可能比较陌生,但它其实就是我们熟悉的 Photoshop 里的钢笔工具,使用它我们可以很方便的通过拖动控制点来构造各种各样光滑的曲线形状,且可以通过折断控制点来分段控制局部曲线的形状。

分段贝塞尔曲线的构成与优点
以最常见的三次贝塞尔曲线为例,每一段曲线由四个控制点决定:两个端点和两个中间控制点。端点决定曲线的起止位置,中间控制点则影响曲线在端点处的切线方向以及整体形状。

将曲线分成多段后,每一段都可以独立调整自己的控制点。这样一来,即使要构造复杂的轮廓,也不必依赖一条包含大量控制点的曲线,而是可以逐段调整,再将它们拼接起来。这种方式既便于控制局部形状,也让复杂曲线的构造更加灵活。
不过,多段曲线能够首尾相接,并不意味着它们看起来就是平滑的,在这里,Games101在课程中引出了曲线连续性的概念。
分段贝塞尔曲线的连续性
分段贝塞尔曲线在分段连接处,有以下几种连续性:
• 位置连续(C⁰ Continuity)—— 曲线的终点必须与下一段曲线的起点重合,也就是满足最基础的首尾相接。 • 几何连续(G¹ Continuity)—— 两段曲线在连接处具有相同的切线方向,对于分段三次贝塞尔曲线来说,这意味着他们的手柄在同一条直线上。 • 一阶参数连续(C¹ Continuity)—— 除了切线方向一致外,还要求连接处的切线向量也完全相同,这表现为他们的手柄除了共线,手柄长度也相等。

通过拼接多段贝塞尔曲线,并控制各段在连接处的连续性,我们就能在灵活调整局部形状的同时,构造出平滑、复杂的曲线。接下来,我们可以进一步把贝塞尔曲线的思想推广到曲面。
贝塞尔曲面(Bézier Surface)
前面介绍的贝塞尔曲线通过一组控制点构造一条曲线,而在三维建模中,我们还需要描述汽车外壳、产品表面等具有二维延展的几何形状。要将曲线的构造方式推广到曲面,一个自然的思路就是将控制点从一维排列扩展为二维网格。

控制点网格与曲面构造
与贝塞尔曲线通过一组控制点定义形状不同,贝塞尔曲面(Bézier Surface)通过排列成网格的控制点来描述曲面的形状。
以常见的三次贝塞尔曲面为例,它由一个 的控制点网格定义,共有 16 个控制点。我们可以先沿一个方向,利用每一行控制点分别构造贝塞尔曲线;再沿另一个方向,将这些曲线上的对应点进行贝塞尔插值。随着两个方向的参数不断变化,最终就能生成一整片曲面。

双参数与曲面方程
贝塞尔曲线只需要一个参数 ,就能确定曲线上的一个点。而贝塞尔曲面需要两个参数 和 ,分别控制沿两个方向的位置。给定一组参数值 ,就可以计算出曲面上的一个三维点。
以最常见的双三次贝塞尔曲面为例,它由 个控制点组成,其曲面方程可以写成:
其中, 表示控制网格中的控制点, 和 分别是两个方向上的三次贝塞尔基函数。它们共同决定每个控制点对当前曲面位置的影响权重。
通过遍历不同的 参数组合,我们就可以计算出曲面上的一系列点,最终构造出完整的贝塞尔曲面。
贝塞尔曲面的几个重要性质
贝塞尔曲面继承了贝塞尔曲线的许多性质:
• 角点插值: 曲面会经过控制网格的四个角点,但通常不会经过其他控制点。 • 凸包性质: 曲面位于所有控制点构成的凸包之内,因此控制点网格可以直观地反映曲面的大致形状。 • 整体控制: 每个控制点都会影响整片曲面,而不仅仅是它附近的区域。调整控制点可以改变曲面的弯曲程度,但这种全局影响也会增加复杂形状的局部调整难度。 • 边界曲线: 曲面的四条边界本身就是贝塞尔曲线,因此可以通过控制边界控制点来调整曲面的轮廓。
贝塞尔曲面将控制点与参数化曲线的思想进一步推广,使我们能够用相对简单的控制点网格构造平滑的三维表面。不过,单个贝塞尔曲面片在控制点数量增加时,同样会面临整体控制不够灵活的问题。对于更复杂的形状,通常需要将多个曲面片拼接起来,或者使用样条曲面等方法来改善局部控制能力。
样条曲线
除了贝塞尔曲线外,计算机图形学中还有一类常见的曲线表示方法,叫作样条函数(Spline Function)。
样条曲线的灵感来自早期的工程制图领域。在计算机辅助设计出现之前,制图师会使用一根有弹性的细木条,并用几个金属重物将它固定在指定位置。木条在弹性作用下自然弯曲,形成一条平滑的曲线,制图师便可以沿着木条描绘出需要的轮廓。这种工具后来被抽象成数学模型,也就有了我们现在所说的样条函数。


B 样条(B-Spline)
B 样条是计算机图形学中非常常见的一种样条曲线。它通过一组控制点和对应的基函数来构造曲线,但曲线通常并不会经过所有控制点,而是在控制点的共同约束下形成平滑的形状。

B 样条最重要的特点是局部控制性:每个控制点通常只会影响曲线的一部分,而不会改变整条曲线。此外,B 样条还可以在不提高曲线次数的情况下增加控制点,从而更加灵活地构造复杂曲线。
插值样条(Interpolating Spline)
与 B 样条不同,插值样条要求曲线经过给定的所有数据点。它会根据这些点的位置计算曲线形状,在保证曲线平滑的同时,也满足经过指定位置的需求。Catmull–Rom 样条就是一种常见的插值样条,在路径动画、轨迹绘制等场景中都有应用。

总结
本篇从分段贝塞尔曲线出发,了解了分段贝塞尔曲线以及曲线连接处的连续性要求,并进一步将贝塞尔曲线的思想推广到了曲面,最后介绍了 B 样条和插值样条这两种常见的样条曲线。通过这些内容,我们可以看到,计算机图形学中有多种不同的几何表示方法,它们各有特点,适用于不同的建模需求。下一章,我们将进一步探索曲面、了解曲面细分相关知识,欢迎持续关注本系列文章~