SIGGRAPH 2000 Course Notes学习笔记

2016-06-21  本文已影响0人  bluefish_

网址在这里

Introduction

这个笔记由几位专业人士准备,因而感觉非常好读。主要关于subdivision,从最基础的数学介绍到应用,还有一些bonus代码。

Advantages:

比起样条(spline)更便利,同时是recursive structure,方便实现和计算,效率比较高。

Foundations I: Basic Ideas

细分思想

先从插值细分(Interpolating Subdivision)开始讲起。我个人理解是,在一段线段里再插入几个点,让线段变成几条小线段,从而使折线更平滑。原来的点不变,只是多了插入的点。

Subdivision defines a smooth curve or surface as the limit of a sequence of successive refinements.

也就是说,细分是想用有限的序列不断地精细化,来表现平滑曲线曲面。
在插值细分中,需要确定一个规则,即如何决定在哪里插入新的点。不同的规则自然会导致不同平滑度和不同形状的曲线曲面。
规则需要考虑到的点有以下几条:

细分与其他方式的对比:

An algorithm such as marching cubes is required to generate the polygonal approximation needed for rendering.Variational surfaces can be even worse: a global optimization problem has to be solved each time the surface is changed.

复习样条的内容

Splines are piecewise polynomial curves of some chosen degree.

样条是B-样条(即basis spline)的线性组合。这些B-样条是控制点的系数。想要连接样条,连接处的曲线段的各级导数最好是相等的,这样才能维持住spline整体的连续性。同时控制点的移动仅会影响一小部分的曲线。这里有一个小动画,通过拖动控制点,可以很清楚地看到其移动带来的影响是local的。p.s. 加载可能要vpn

下面介绍如何用repeated convolution构建B-splines。

x(t) = ∑x_iB^i_0(t)
_表示下标,^表示上标。目前没找到在markdown里加latex的方法……

如果 x(t) 是piecewise constant coordinate functions,那么 B_0(t) 就是一个box function,在 [0,1) 上为1,其他为0。然后上标 i 表示translation,即把 B_0(t) 右移 i。

the continuous convolution of two functions f and g: (f ⊗ g)(t) = integrate{ f(s) g(t−s) ds }.

于是B_1(t)= integrate{ B_0(s) B_0(t−s) ds },是一个linear hat function。

于是a B-spline of degree p可以归纳为:

B_p(t)= integrate{ B_p−1(s) B_0(t−s) ds }.

其连续性有以下定理:

Theorem 1 If f(t) is C^k continuous, then (B_0 ⊗ f )(t) is C^k+1 continuous.

即一个n级spline是C^n-1 continuous。

B-样条的微调能力

B-样条遵从一个refinement equation。这是一条连接样条和细分的性质。

In other words, the B-spline of degree l can be written as a linear combination of translated (k) and dilated (2t) copies of itself.

上一篇下一篇

猜你喜欢

热点阅读