Нахождение ограничивающего прямоугольника (выровненного по оси) параметрического диапазона трехмерной поверхности NURBS - PullRequest
1 голос
/ 23 февраля 2010

Я заранее извинюсь, если это станет очевидным; Мне не удалось найти правильные условия для размещения в Google.

Что я хочу сделать, так это найти ограничивающий объем (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 Ответ

1 голос
/ 23 февраля 2010

Вам нужно будет нарезать меньшую поверхность NURBS, которая покрывает только диапазон параметров, который вас интересует. Используя ваш пример, я имею в виду, что вы находитесь в области, где параметр u находится в диапазоне от 0,1 до 0,4. Пусть Pu - степень сплайна по этому параметру (кубический сплайн имеет Pu = 3). Вам нужно выполнить «вставку узлов» (это ваш поисковый термин в Google), чтобы получить узлы степени Pu, расположенные при u = 0,1 и u = 0,4. Сделайте то же самое с параметром v, чтобы получить узлы степени Pv при 0,2 и 0,6. Процесс вставки узла изменит (и добавит) массив контрольных точек. Здесь нужно немного бухгалтерии, но затем вы можете найти контрольные точки, которые определяют поверхность в патче параметров, который вы только что изолировали между вставленными узлами. Свойство выпуклости говорит, что поверхность ограничена этими контрольными точками, поэтому вы можете использовать их для определения ограничивающего объема.

Ссылка на NURBS, которую я хотел бы использовать для таких операций: «Книга NURBS», Les Piegl и Wayne Tiller.

...