Может случиться так, что точки, координаты которых определяют многоугольную грань, не лежат в одной плоскости. Эта проблема решается разделением грани на набор треугольников. Можно также найти плоскость, аппроксимирующую данный список вершин. Один из способов расчета аппроксимирующей плоскости - разбить список вершин на поднаборы, каждый из которых содержит три вершины, и найти параметры плоскости А, В, С, Б для каждого поднабора. Затем параметры аппроксимирующей плоскости находятся как среднее значение всех полученных параметров плоскостей. Другой подход - спроектировать список вершин на координатные плоскости. После этого параметр А берется пропорциональным площади проекции многоугольника на плоскость у г, параметр В - пропорциональным площади проекции на плоскость хг, а параметр С - пропорциональным площади проекции на плоскость ху. Отметим, что этот метод проекций часто используется в приложениях, связанных с построением хода лучей.
ПЕРЕДНИЕ И ЗАДНИЕ ГРАНИ МНОГОУГОЛЬНИКА
Поскольку обычно многоугольные поверхности, с которыми приходится иметь дело в графических приложениях, представляют собой внешнюю оболочку объекта, необходимо уметь различать две стороны каждой поверхности. Та сторона многоугольника, которая направлена внутрь объекта, называется задней, а видимая, или внешняя, сторона является передней. Определение положения точек в пространстве относительно передней и задней сторон многоугольника является основной задачей многих графических алгоритмов, например, алгоритма определения видимых частей объекта. Каждый многоугольник лежит в бесконечной плоскости, разделяющей пространство на две части. Говорят, что любая точка, не принадлежащая этой плоскости, которая видна с лицевой стороны поверхности многоугольника, находится перед плоскостью (или снаружи), следовательно, за пределами объекта. Любая точка, которая видна с обратной стороны многоугольника, находится за плоскостью (или внутри). Точка, которая находится за всеми плоскостями поверхностей многоугольника, находится внутри объекта. Нужно помнить о том, что классификация “внутри-снаружи” производится относительно плоскости, содержащей многоугольник, в то время, как предыдущие проверки “внутри-снаружи”, выполняемые с помощью правила четного-нечетного или ненулевого количества витков, относились к внутренней области, окруженной некоторой двухмерной границей.
ФУНКЦИИ ЗАКРАШИВАНИЯ МНОГОУГОЛЬНИКОВ В OpenGL
За одним исключением, все процедуры OpenGL описания закрашенных многоугольников похожи на функции описания точки или ломаной линии. Функция glVertex используется для ввода координат одной вершины многоугольника, а весь многоугольник описывается с помощью списка вершин, расположенного между парой
Рис. 3.54. Многоугольник со сложной внутренней областью, которую нельзя задать с помощью одного списка вершин команд glBegin/glEnd. Однако есть еще одна дополнительная функция, с помощью которой можно изобразить прямоугольник и которая имеет совершенно другой формат.
По умолчанию внутренняя часть многоугольника изображается одним цветом, который определяется по текущим установкам цвета. С помощью опций (которые описываются в следующей главе) многоугольник можно заполнить узором, также стороны многоугольника можно сделать прямолинейными границами вокруг закрашенной внутренней области. Существует шесть различных символьных констант, которые используются в качестве аргумента функции glBegin при описании закрашенной области многоугольника. Эти шесть постоянных примитивов позволяют изображать один закрашенный многоугольник, набор несоединенных или набор соединенных закрашенных многоугольников.