代码之家  ›  专栏  ›  技术社区  ›  spurserh

查找三维NURBS曲面参数化范围的边界框(轴向对齐)

  •  1
  • spurserh  · 技术社区  · 15 年前

    我会事先道歉,以防这是显而易见的;我一直找不到合适的条款放入谷歌。

    我要做的是找到一个边界体积(aabb足够好),用于修剪过的NURBS曲面上的任意参数范围。例如,(u,v)介于(0.1,0.2)和(0.4,0.6)之间。

    编辑:如果它有帮助,如果该方法将参数区域完全限制在下面段落中定义的边界区域内,我就可以了。我有兴趣对这些地区进行细分。

    我在读了这篇文章的这段之后开始思考这个问题。( http://www.cs.utah.edu/~shirley/papers/raynurbs.pdf ,这解释了如何创建一个边界体积树,其深度与曲面的度数相关:

    The convex hull property of B-spline surfaces guarantees that the surface is contained in the convex hull of its control mesh.
    As a result, any convex objects which bound the mesh will bound the underlying surface. We can actually make a stronger
    claim; because we closed the knot intervals in the last section [made the multiplicity of the internal knots k − 1], each nonempty
    interval [ui; ui+1)  [vj; vj+1) corresponds to a surface patch which is completely contained in the convex hull of
    its corresponding mesh points. Thus, if we produce bounding volumes for each of these intervals, we will have completely
    enclosed the surface. We form the tree by sorting the volumes according tothe axis direction which has greatest extent across the bounding volumes, splitting the data in half, and repeating the process.
    

    谢谢!肖恩

    1 回复  |  直到 15 年前
        1
  •  1
  •   Vincent Marchetti    15 年前

    您将需要切出一个较小的NURBS曲面,它只覆盖您感兴趣的参数范围。使用您的示例,我认为这意味着您所在的区域的u参数介于0.1和0.4之间。设pu为该参数中样条曲线的度数(三次样条曲线的pu=3)。您需要执行“结插入”(这是您的谷歌搜索词)来获取U=0.1和U=0.4处的度数pu节,在v参数上执行相同的操作来获取0.2和0.6处的度数pv节。节点插入过程将修改(并添加到)控制点数组。这涉及到一些簿记,但是您可以在参数补丁中找到确定曲面的控制点,这些参数补丁只是在插入的结之间隔离的。然后凸面属性表示曲面由这些控制点约束,因此可以使用它们来确定边界体积。

    我喜欢在这样的操作中使用的nub引用是由LesPiegl和WayneTiller编写的“nub书”。