ТРЕХМЕРНОЕ ОТСЕЧЕНИЕ КРИВЫХ
Как и при отсечении многогранников, вначале проверяется, не принадлежат ли координатные границы криволинейного объекта (например, сферы или сплайновой поверхности) полностью объему наблюдения. Затем можно проверить, лежит ли объект полностью за одной из шести плоскостей отсечения.
Если тривиально принять (отвергнуть) не удалось, нужно найти точки пересечения объекта с плоскостями отсечения. Для этого решается система уравнений поверхности и уравнения плоскости отсечения. По этой причине большинство графических пакетов не содержит процедур отсечения криволинейных объектов. Вместо этого криволинейные поверхности аппроксимируются набором многоугольных участков, а затем выполняется отсечение объекта с использованием процедур отсечения многоугольников. При применении процедур визуализации поверхностей к многоугольным участкам можно получить высокореалистичные изображения криволинейной поверхности.
ПРОИЗВОЛЬНЫЕ ПЛОСКОСТИ ОТСЕЧЕНИЯ
В некоторых графических пакетах для отсечения трехмерной сцены можно использовать дополнительные плоскости, которые могут иметь любую пространственную ориентацию. Данная возможность полезна во многих приложениях. Например, может потребоваться изолировать или вырезать объект неправильной формы, для создания спецэффекта удалить часть сцены под непрямым углом или вырезать фрагмент объекта по заданным осям, чтобы показать его внутреннее строение.
Вместе с описанием сцены можно задать дополнительные плоскости отсечения, чтобы до преобразования проектирования можно было выполнить операции отсечения. Впрочем, это также означает, что процедуры отсечения реализованы на программном уровне.
Отсечение криволинейного объекта одной плоскостью отсечения легче отсечения объекта шестью плоскостями объема наблюдения. Однако в этом случае все равно приходится решать систему нелинейных уравнений для поиска точек пересечения, если не аппроксимировать криволинейные границы прямыми отрезками.
ДОПОЛНИТЕЛЬНЫЕ ПЛОСКОСТИ ОТСЕЧЕНИЯ В OpenGL
Помимо шести плоскостей отсечения, замыкающих объем наблюдения, OpenGL позволяет задавать на сцене дополнительные плоскости отсечения. В отличие от плоскостей отсечения объема наблюдения, каждая из которых перпендикулярна одной из координатных осей, данные дополнительные плоскости могут иметь любую ориентацию.
Чтобы ввести дополнительную плоскость отсечения и активизировать отсечение по этой плоскости, используется следующий оператор.
glClipPlane (id, planeParameters); glEnable (id);
: Параметр id используется как идентификатор плоскости отсечения. Ему присваивается одно из значений GL_CLIP_PLANEO, GL_CLIP_PLANE1 и так далее до максимальной глубины. Сама плоскость определяется с использованием четырехэлементного массива planeParameters, состоящего из чисел двойной точности с плавающей запятой - параметров уравнения плоскости А, В, С и D. Чтобы отключить активизированную плоскость, имеющую идентификатор id, используется такое выражение.
glDisable (id); Параметры плоскости А, В, С и D преобразуются в координаты наблюдения и используются для проверки в координатах наблюдения точек сцены. Последующие изменения параметров наблюдения или геометрических преобразований не влияют яа записанные параметры плоскости. Следовательно, если задать дополнительные плоскости отсечения до геометрических преобразований или преобразований наблюдения, записанные параметры плоскости будут такими же, как входные параметры. Хроме того, поскольку процедуры отсечения для этих плоскостей применяются в Координатах наблюдения, а не в нормированном координатном пространстве, производительность программы может снизиться при активизации дополнительных плос-юстей отсечения.