天行健 君子当自强而不息

3D几何图元(1)

 

隐式表示

通过定义一个布尔函数f(x, y , z),我们能够隐式表示一个图元。如果所指定的点在这个图元上,这个布尔函数就为真;对于其他的点,这个布尔函数为假。例如等式:

x2+y2+z2 = 1

对中心在原点的单位球表面上的所有点为真,隐式表示法用于测试图元是否包含某点时非常有用。

 

参数形式表示

图元也能以参数形式表示。我们从一个简单的2D例子开始,定义如下两个关于t的函数:

x(t) = cos2πt

y(t) = sin2πt

这里t被称作参数,并和所用的坐标系无关。当t从0变化到1时,点(x(t),y(t))的轨迹就是所要描述的形状。这组等式表示的是一个中心在原点的单位元(如图12.1所示):

尽管可以让t在我们想要的任意范围内变化,但是在大多数情况下,把参数的变换范围限制在0到1之间会比较方便一些。另一种常见的变换范围是从0到L,L是图元的"长度"。

如果函数只使用一个参数,就称这些函数为单变量的,单变量函数的轨迹是一条曲线。有时候函数可能有多于一个的参数,双变量函数接受两个参数,经常设为s和t,双变量函数的轨迹是一个曲面。

 

直接形式表示

我们将这组表示方法命名为直接法,是因为没有更好的术语来描述它们。它们随图元的类型而变化,而且经常能直接体现图元最本质和明显的信息。例如,用两个端点来表示一个线段,用球心和半径来表示一个球。直接形式是最便于人们直接使用的形式。

 

自由度

每个几何图元都有一个固有的属性:自由度。自由度是无歧义地描述该实体所需信息量的最小数目。有趣的是,同一几何图元,不同表示方法所用到的自由度是不同的。然而,我们会发现"多余"的自由度数量经常是由于图元参数化中的冗余造成的,这些冗余可以通过一些适当的假设条件来消除,如假设向量为单位长度。

 

直线和射线

在经典几何中,仍使用的是下列定义:

(1)直线向两个方向无限延伸。

(2)线段是直线的有限部分,有两个端点。

(3)射线是直线的"一半",有一个起点并向一个方向无限延伸。

在计算机科学和计算几何中,存在着这些定义的许多变种。这里仍使用直线和线段的经典定义,但对射线的定义做出修改:

(4)射线就是有向线段。

对我们来说,射线有起点和终点。这样,一条射线定义了一个位置,一个有限长度和一个方向(除非射线长度为0)。任何射线都定义了包含这个射线的一条直线和线段。射线在计算几何和图形学中占有非常重要的位置。如图12.2:

两点表示法

描述射线最直观的方法是给出两个端点:起点Porg和终点Pend,如图12.3所示:

射线的参数形式

2D和3D射线都能用参数形式表示,2D射线的参数形式使用两个函数,如公式12.1所示:

x(t) = x0 + t△x

y(t) = y0 + t△y

公式12.1   2D射线的参数形式

3D射线是对2D的一种直接扩展,只需加上第三个函数z(t)即可,参数t的范围从0到 1。

向量记法能使射线的参数形式更加紧凑,在任意维度中表示射线都可以用这种形式。如公式12.2所示:

p(t) = p0 + td

公式12.2   用向量记法表示的射线参数形式

射线的起点p(0) = p这样,p0指定了射线的位置信息,同时增量向量d指定了它的长度和方向。射线的终点p(1) = p0 + d,如图12.4 所示:

在一些相交性测试中,我们可能使用公式12.2的一种变形:d为单位向量,参数t从0变化到L,L是射线的长度。


posted on 2008-02-20 10:13 lovedday 阅读(760) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


公告

导航

统计

常用链接

随笔分类(178)

3D游戏编程相关链接

搜索

最新评论