2010-02-23 47 views
1

如果這是顯而易見的,我會提前道歉;我一直無法找到放入Google的正確條款。找到3D NURBS曲面的參數範圍的邊界框(軸向對齊)

我想要做的是爲修剪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. 

謝謝! Sean

回答

1

您需要切出一個較小的NURBS曲面,它只覆蓋您感興趣的參數範圍。使用您的示例,我認爲您所在的區域的u參數介於0.1和0.4之間。令Pu爲該參數中的樣條曲線的程度(三次樣條曲線具有Pu = 3)。你需要執行「結插入」(這是你的谷歌搜索術語)以獲得位於u = 0.1和u = 0.4的程度Pu的結。對v參數做同樣的事情以獲得0.2和0.6的程度Pv的結。結插入過程將修改(並添加)控制點數組。有一些簿記涉及到,但是你可以找到控制點,它們決定了插入節之間隔離的參數補丁中的曲面。然後凸屬性表示曲面受這些控制點的限制,因此您可以使用它們來確定您的邊界體積。

我喜歡用於這種操作的NURBS參考文獻是:Les Piegl和Wayne Tiller的「NURBS書」。