如果这很明显,我会事先道歉;我一直无法找到适合Google的条款。
我想要做的是在修剪的NURBS曲面上找到任意参数范围的边界体积(AABB足够好)。例如,(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.
谢谢!肖恩
答案 0 :(得分:1)
你需要切出一个较小的NURBS曲面,它只覆盖你感兴趣的参数范围。使用你的例子,我的意思是你在u参数介于0.1和0.4之间的区域。令Pu为该参数中样条的度数(三次样条具有Pu = 3)。您需要执行“结点插入”(这是您的Google搜索词)以获得位于u = 0.1且u = 0.4的度数Pu的结点。对v参数执行相同的操作以获得度数Pv为0.2和0.6的结。结点插入过程将修改(并添加)控制点数组。涉及到一些簿记,但是您可以找到control_points来确定您在插入的结之间隔离的参数补丁中的曲面。然后凸面属性表示表面受这些控制点的限制,因此您可以使用它们来确定边界体积。
我喜欢用于此类操作的NURBS参考文献是:“The NURBS Book”,作者:Les Piegl和Wayne Tiller。