金小刚 Email: jin@cad.zju.edu.cn
http://www.cad.zju.edu.cn/home/jin 浙江大学CAD&CG国家重点实验室
Where there is matter, there is geometry. –Johannes Kepler
本章的目的是介绍曲线曲面在实时绘制中的作用.特别 是许多曲面类型即将变成或者已经变成了图形APIs的一 部分,并且有直接的加速器支持.
三角形是一种基本的绘制图元.图形硬件支持三角形的 直接绘制.然而曲线曲面可以使用方程简要地描述几何 物体.这些方程可以求值,然后生成三角形集合并且送 入流水线进行绘制.
使用曲线曲面的优点
它们有比多边形集合更加紧凑的表达式; 它们提供可以缩放的几何图形; 它们提供比直线和平面多边形更加光滑更加连续的图 形; 动画和碰撞检测更加简单更加快速.
对于具体的应用,使用一个紧凑的曲线曲面表示的优点:
对于模型的保存,可以节省存储空间. 对于一个函数曲面的变换比对网格表示的曲面的变换矩阵的复杂 度更小. 使用少量的控制多边形能得到比较真实的效果. 可以很容易生成模型的LOD结构.因而在实时绘制时根据实际情 况提高绘制质量或者提高帧速率. 动画中,曲面只有少量的点需要去运动.这些点然后去形成一张 曲面,生成一张光滑的曲面. 对于碰撞检测,趋向于更加有效更加精确. 可以使实时计算机图形应用更快速,编码更快速,生存期更长. ………
参数曲线(Parametric Curves)
参数曲线应用在许多不同的领域,可以使用许多不同的方 法实现.
对于实时绘制图形学,参数曲线经常用作去沿着一条预定 义的路径去移动视点和物体.这将包括改变位置和方向. 这里我们将仅仅考虑位置路径.
一条参数曲线可以使用一些公式如参数t的一个函数来表 示.数学上,我们写作p(t),意思是对于每个t值,通过这 个函数可以得到一个点.这个参数t可能属于某些区间, 也称作定义域,如t∈[a,b].这样生成的点是连续的,即 当ε 0,那么p(t,ε) p(t).也就是说,如果ε是一个非 常小的数,那么p(t,ε)与p(t)是两个位置非常接近的点
我们将要介绍Bézier曲线,然后讨论怎样使用分段Bézier 曲线,并引入曲线连续性的概念,最后介绍两种其他有用 的曲线:三次Hermite样条和Kochanek-Bartels样条.
Bézier曲线
两点p0与p1之间的线性插值的轨迹是一条直线.
p(t ) = p 0 + t (p1 p 0 ) = (1 t )p 0 + tp1
t ∈ [0,1]
由 p(0)=p0, p(1)=p1,0
t 2 t1 c= t1 t 0
能够达到C1连续.
分段Bézier曲线的优点
可以使用低阶Bézier曲线生成高阶分段Bézier曲线 类似的曲线; 分段Bézier曲线通过更多控制顶点; 常常使用三次Bézier曲线构造分段Bézier曲线,因 为它是可描述S-型曲线的最低次曲线.
三次Hermite插值样条
三次Hermite曲线由起始点p0,终点p1,起始切线m0, 终点切线m1来定义:t∈[0,1]
p(t ) = (2t 3 3t 2 +1)p0 + (t 3 2t 2 + t )m0 + (t 3 t 2 )m1 + (2t 3 + 3t 2 )p1
性质:
p p p(0) = p 0 , p(1) = p1 , (0) = m 0 , (1) = m1 t t
三次Hermite基函数图
三次Hermite插值例子
Example:图中各曲线插值点相同,但始末切线方
向不同.
三次Hermite插值例子
Kochanek-Bartels曲线
当使用多个点进行Hermite插值时,需要考虑插值点处切 线的控制.
我们将介绍使用Kochanek-Bartels曲线计算切线的方法. -假设,使用n-1段Hermite曲线对n个点p0,……,pn进行 插值; -如下图左所示,pi的切线值可由两段弦pi-pi-1和pi+1-pi计 算.
Kochanek-Bartels曲线