Построение теней 3D объекта в C++ Builder

Реалистичность изображений объектов C++Builder существенно повышается, если удалить невидимые с места наблюдателя ребра и грани многогранников, и построить их собственные грани, а так же падающие тени.

Пусть заданы: единичный куб, расположенный на предметной плоскости Y=0 в начале координат, а также точечный источник света Ссвет, расположенный в пространстве в точке с координатами xс yс zс и его проекция на предметную плоскость ссвет.

Необходимо построить собственные и падающие теин куба и вывести результат на картинную плоскость z=0 с помощью аксонометрической проекции. Алгоритм решения первой части этой задачи, представляется следующим образом:

  1. Строим исходные объекты в трехмерной системе координат.
  2. Проводим луч от источника света Ссвет через одну (любую) верхнюю вершину вертикального ребра куба до пересечения с его проекцией на предметной плоскости. Проекция луча представляется линией, соединяющей проекцию источника света Ссвет, с основанием этого же ребра куба и продолжающуюся до пересечения с лучом.
  3. Точка пересечения светового луча и его проекции представляет собой проекцию вершины выбранного ребра на предметную плоскость. Соединив ее с основанием ребра, получим падающую тень конкретного ребра на предметную плоскость.
  4. Повторив пункты 2 и 3 для всех оставшихся вертикальных ребер, получим их падающие тени на предметной плоскости.
  5. Соединив между собой проекции вершин вертикальных ребер на предметную плоскость, получим контур падающей тени куба.
  6. Собственные тени вертикальных ребер совпадают с самими ребрами и находятся на них с неосвещенной стороны.
  7. Грани куба, невидимые с позиции источника света, находятся в собственной тени.

Если смотреть на куб с положительного направления главной координатной ocи Z, то ими будут правая, нижняя, передняя и задняя грани куба.

Следующий этап решения этой задачи заключается в том, чтобы сохраняя объемное изображение куба с учетом его теней, «перенести” на картинную плоскость результат операций. Самый лучший способ — это выполнить аксонометрическую проекцию полученной сцены на плоскость Z=0, которая будет теперь выступать в качестве картинной плоскости.

Для этого необходимо знать координаты вершин всех преобразуемых объектов — куба, источника освещения и многоугольника падающей тени. Последние представляют собой координаты точек пересечения световых лучей с предметной плоскостью XOZ.

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.