【CAD/CG笔记】关于Bezier曲面
Bezier曲面相关知识
贝塞尔曲面(Bézier Surfaces)
以16个控制点组成的控制网格为例。
其实在理解了贝塞尔曲线之后,贝塞尔曲面的原理也是十分容易理解的了,无非是一个从2维到3维的过渡。
如果说对于曲线来说只有一个参数 t∈[0,1]那么对于一个面来说,就应该有两个参数,分别设$ u∈[0,1]$,$v∈[0,1]$,具体过程如下图所示
首先规定一共4x4 = 16个控制点,其水平面位置如图中16个黑点所示(并未表示出高度,防止图形太乱),将这16个点分成4列,图中红色圈中的为一列的具体例子。
- 第1步 在这4个控制点之下利用第一个参数 u 运用第一章的计算贝塞尔曲线的方法得到蓝色点,因为有4列,所以一共可以得到如图所示的4个蓝色点。(灰色曲线分别为每列4个点所对应的贝塞尔曲线)
- 第2步 在得到4个蓝色顶点之后,在这四个蓝色顶点的基础之下利用第二个参数 v 便可以成功得出贝塞尔曲面上的正确一点
- 第3步 遍历所有的 u,v值就可以成功得到一个贝塞尔曲面
等参线(Isoparametric Line) 是指在参数曲面(如 Bézier 曲面、B-Spline 曲面或 NURBS 曲面)上,保持一个参数固定,而让另一个参数变化所形成的曲线。
矩形域贝塞尔曲面
先用一组贝塞尔曲线在$ t_1$ 位置得到一组对应在曲线上的点,然后将这些点再作为控制点来做曲线,所有的曲线组合起来,即可得到一个光滑的贝塞尔曲面。
贝塞尔曲面上的任意一点
有一个 $n$ 阶的贝塞尔曲线,给它复制 $m+1$ 份,那么在每个贝塞尔曲线的 $t_1$ 位置,我们可以得到 $m+1$ 个曲线上的点。我们再把这些点作为控制点,可以得到一个 $m$ 阶的贝塞尔曲线,而这个贝塞尔曲线就是最终贝塞尔曲面上的一条线,因此该曲线 $t_2$ 位置上的点就是贝塞尔曲面上的点。其中 $t_1$ 和 $t_2$ 通常会使用 $u$ 和 $v$ 来代替,它们的取值范围自然都是$0$到$1$,那么对应贝塞尔曲面上的任意一点,我们就可以用 $P(u,v)$ 来表示。
对于上面这种描述得到的曲面,我们称之为 $m$x$n$ 阶的贝塞尔曲面,即有 $m+1$ 条 $n$ 阶的贝塞尔曲线,一共会得到 $(n+1)*(m+1)$ 个顶点,这里我们定义第一个 $n$ 阶的贝塞尔曲线的第一个控制点为 $P_{0,0}$ ,该曲线往后的控制点为 $P_{0,1} \ldots P_{0,n}$ ,那么第 $i$ 条 $n$ 阶的贝塞尔曲线的第 $j$ 个顶点就是 $P_{i,j}$ ,最后一条的最后一个顶点自然是 $P_{m,n}$ 了。
要求贝塞尔曲面上的一点,先来回来贝塞尔曲线上一点的公式
$$
P(t) = \sum_{i=0}^{n} P_{i} B_{i}^{n}(t)
$$
那么第 $i$ 条 $n$ 阶的贝塞尔曲线上的点 $P(u)$ 即为:
$$
P(u) = \sum_{j=0}^{n} P_{ij} B_{j}^{n}(u)
$$
那么我们就可以得到 $m$ 个 $P(u)$,我们可以标记为$P(u){0} \ldots P(u){m}$,这些 $P(u)$ 会再形成贝塞尔曲线,也就是曲面上的曲线,
那么该曲线上的点$P(v)$ 即为:
$$
P(v) = \sum_{i=0}^{m} P(u){i} B{i}^{m}(v)
$$
那么两个公式合起来,就是我们求贝塞尔曲面上任意点 $P(u,v)$ 的公式了:
$$
P(u, v) = \sum_{i=0}^{m} \sum_{j=0}^{n} P_{ij} B_{j}^{n}(u) B_{i}^{m}(v)
$$
此外,我们还可以用矩阵的形式来表示,如下:
简单的解读下,首先是 $1$x$(n+1)$ 的矩阵乘以 $(n+1)$x$(m+1)$ 的矩阵,得到的结果是 $1$x$(m+1)$ 的矩阵,这一步其实就是在求 $m+1$ 条贝塞尔曲线 $u$ 位置的顶点。然后把 $1$x$(m+1)$ 的矩阵再乘以 $(m+1)$x$1$ 的矩阵,得到的结果就是一个值,这一步就是求新的曲线在 $v$ 位置上的点。
当然了,同样的,我们也可以用de Casteljau算法来算曲面上的任意一点的坐标。
端点性质
控制网格的四个顶点同样是贝塞尔曲面的顶点,即:
切平面
以下三角形指定了贝塞尔曲面四个角的切平面:
此外,贝塞尔曲线带有的凸包性,对称性,几何不变性,在贝塞尔曲面中也都有这些性质。
三角域Bezier曲面
前面介绍的贝塞尔曲面我们称之为矩形域贝塞尔曲面,u 和 v 都是 0 到 1,定义在矩形上。定义在三角形上的贝塞尔曲面,也就是三角域贝塞尔曲面。











