6.2. Введение в трехмерное моделирование полигональными сетками Если в таком порядке вы проходите грань от вершины к вершине, идя по внешней поверхности, то часть плоскости, содержащая эту грань (внутренность грани), находится слева от вас. Позднее мы разработаем 'алгоритмы, которые применяют именно такой порядок и поэтому легко различают «переднюю» и «заднюю» стороны грани.

Наш сарай является примером «интенсивной по данным» (data-intensive) модели, в которой перерабатывается большое количество данных, причем координаты каждой вершины вводятся разработчиком (может быть, вручную). Позднее мы увидим ряд моделей, которые в отличие от них генерируются алгоритмически. Разобраться с вершинами для стандартного сарая не составляет большого труда: дизайнер выбрал в качестве пола простой единичный квадрат, решил поместить один угол сарая в начало координат и выбрал высоту кровли в полторы единицы. Путем соответствующего масштабирования эти размеры в дальнейшем можно изменять (хотя отношение высоты стены сарая к его максимальной высоте, равное 1:1,5, зафиксировано навечно).

6.2.2. Нахождение нормальных векторов Координаты вершин можно задавать вручную, однако не столь просто вычислить нормальные векторы. В общем случае у каждой грани имеется три или более вершин, и разработчику будет весьма сложно записывать нормальные векторы. Лучше предоставить вычисление нормальных векторов компьютеру во время создания каркасной модели.

Если грань считается плоской, как в случае сарая, то нам требуется только найти нормальный вектор к самой грани и связать его с каждой из вершин этой грани. Одним из прямых способов нахождения нормали является использование векторного произведения, как показано на рис. 4.16. Возьмем на грани три соседних точки - У,, У2, У3 и вычислим нормаль как векторное произведение m = (У, - V2) х х (У3 - V2). После этого нормальный вектор можно нормировать до единичной длины.

При этом простом подходе могут возникнуть две проблемы: во-первых, если векторы У, - V2 и У3 - У, почти параллельны, то векторное произведение будет очень малым (почему?) и результат может иметь большие погрешности вычисления. Во-вторых, как мы увидим позднее, может случиться так, что полигон не является полностью плоским, то есть не все его вершины лежат в одной плоскости. Поэтому поверхность, представляемая этими вершинами, не может быть действительно плоской. В этом случае нам придется использовать для нормали к полигону некоторую «усредненную» величину, которая учитывает все рассматриваемые вершины.


⇐ Предыдущая| |Следующая ⇒