Кроме этих методов, придумано и исследовано много других HSR- и HLR-методов. В некоторых из них (например, [Foley, 17; Rogers, 105]) за счет простоты применяются дополнительные приемы увели27 Ф. Хилл

Удаление невидимых поверхностей

чения эффективности. Другие методы [Butland, 38; Rogers, 175] работают с математическими функциями или с обширными классами форм поверхностей.

13.9. Тематические задания Тематическое задание 13.1. Проверка алгоритма художника Уровень сложности II.

Напишите подпрограмму HeedlessPainterO, реализующую алгоритм беспечного художника. Грани в массиве faces[] сортируются по псевдоглубине их наиболее удаленных вершин, затем полученный список просматривается и каждая грань рисуется целиком, поверх любых ранее нарисованных граней. Для упрощения тестирования этого и прочих HSR-алгоритмов напишите подпрограмму, которая генерирует списки граней для набора из ДОкубов со случайно выбираемыми размерами, положениями и ориентацией в пространстве. Проверьте подпрограмму HeedlessPainterO на сценах, составленных из N случайных кубов.

Тематическое задание 13.2. Тест и разбиение Уровень сложности I.

Напишите и протестируйте подпрограмму FaceWlthPlaneO, которая проверяет, находится ли заданная выпуклая полигональная грань целиком по одну или по другую сторону от плоскости. Если это не так, то подпрограмма разбивает эту грань на два полигона, один из которых лежит целиком с внутренней стороны плоскости, а другой - целиком с внешней ее стороны. Вам может оказаться полезным следующий прототип (или придумайте свой собственный):

int Facewith Plane(Face& face.
// face to be tested

// грань, подлежащая проверке

Face& node.

// with the plane of this face // с плоскостью этой грани

Face& inFace.

// the inside piece when split // внутренний кусок при разбиении

Face& outFace):

// the outside piece when split // внешний кусок при разбиении Данная процедура возвращает следующие значения: О -1, если face лежит с внутренней стороны плоскости node. О +1, если face лежит с внешней стороны плоскости node. О 0, если face разбивается на две грани - inFace и outFace.


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