DirectX11 With Windows SDK--33 曲面细分阶段(Tessellation) (5)

DirectX11 With Windows SDK--33 曲面细分阶段(Tessellation)

然后从b1b2方向的线段使用同样的参数t来确定另一点,记为\(\mathbf{b_{1}^{1}}\)

DirectX11 With Windows SDK--33 曲面细分阶段(Tessellation)

\(b_{0}^{1}\)\(b_{1}^{1}\)连接起来,问题降级为一阶贝塞尔曲线(直线)。我们对其再使用一次参数t的线性插值即可得到在参数t下该贝塞尔曲线的对应一点\(\mathbf{b_{2}^{0}}\)

DirectX11 With Windows SDK--33 曲面细分阶段(Tessellation)

我们将t在[0, 1]的所有情况都求出来,就可以得到一条光滑的贝塞尔曲线。

DirectX11 With Windows SDK--33 曲面细分阶段(Tessellation)

三阶的贝塞尔曲线需要用到4个控制点,但做法也是类似的。首先求出b0b1b1b2b2到b3的线段在t时刻下的插值点\(\mathbf{b_{0}^{1}}, \mathbf{b_{1}^{1}}, \mathbf{b_{2}^{1}}\),此时问题就被转化成了这三个控制点下的二阶贝塞尔曲线。不断降阶最终算出目标点即可。

DirectX11 With Windows SDK--33 曲面细分阶段(Tessellation)

可以看到,三阶贝塞尔曲线需要进行6次插值运算,二阶贝塞尔曲线则需要进行3次插值运算。以此类推,我们可以知道n阶贝塞尔曲线需要n(n+1)/2次运算

DirectX11 With Windows SDK--33 曲面细分阶段(Tessellation)

计算过程

下图阐述了二阶贝塞尔曲线的计算过程

DirectX11 With Windows SDK--33 曲面细分阶段(Tessellation)

观察b0b1b2的各项系数,可以发现它们满足二项式定理。我们也可以用下面的一个金字塔来描述

DirectX11 With Windows SDK--33 曲面细分阶段(Tessellation)

从底端的这些控制点选取其中一个然后不断往上走,最终走到顶端点的过程中,如果走过一段朝着右上方向的路径,则给该控制点乘上因子(1-t),而朝着左上方向的路径则给该控制点乘上因子t。比如从b0走到顶端的项为\(t^3 b_{0}\)。我们将这所有8条路径都加起来就可以得到最后的结果:

\[\mathbf{b_0^3} = (1-t)^3\mathbf{b_0} + 3t(1-t)^2\mathbf{b_1} + 3t^2 (1-t)\mathbf{b_2} + t^3\mathbf{b_3} \]

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgdysg.html