Построение теней 3D объекта в C++ Builder
Реалистичность изображений объектов C++Builder существенно повышается, если удалить невидимые с места наблюдателя ребра и грани многогранников, и построить их собственные грани, а так же падающие тени.
Пусть заданы: единичный куб, расположенный на предметной плоскости Y=0 в начале координат, а также точечный источник света Ссвет, расположенный в пространстве в точке с координатами xс yс zс и его проекция на предметную плоскость ссвет.
Необходимо построить собственные и падающие теин куба и вывести результат на картинную плоскость z=0 с помощью аксонометрической проекции. Алгоритм решения первой части этой задачи, представляется следующим образом:
Если смотреть на куб с положительного направления главной координатной ocи Z, то ими будут правая, нижняя, передняя и задняя грани куба.
Следующий этап решения этой задачи заключается в том, чтобы сохраняя объемное изображение куба с учетом его теней, «перенести” на картинную плоскость результат операций. Самый лучший способ — это выполнить аксонометрическую проекцию полученной сцены на плоскость Z=0, которая будет теперь выступать в качестве картинной плоскости.
Для этого необходимо знать координаты вершин всех преобразуемых объектов — куба, источника освещения и многоугольника падающей тени. Последние представляют собой координаты точек пересечения световых лучей с предметной плоскостью XOZ.
Пусть заданы: единичный куб, расположенный на предметной плоскости Y=0 в начале координат, а также точечный источник света Ссвет, расположенный в пространстве в точке с координатами xс yс zс и его проекция на предметную плоскость ссвет.
Необходимо построить собственные и падающие теин куба и вывести результат на картинную плоскость z=0 с помощью аксонометрической проекции. Алгоритм решения первой части этой задачи, представляется следующим образом:
- Строим исходные объекты в трехмерной системе координат.
- Проводим луч от источника света Ссвет через одну (любую) верхнюю вершину вертикального ребра куба до пересечения с его проекцией на предметной плоскости. Проекция луча представляется линией, соединяющей проекцию источника света Ссвет, с основанием этого же ребра куба и продолжающуюся до пересечения с лучом.
- Точка пересечения светового луча и его проекции представляет собой проекцию вершины выбранного ребра на предметную плоскость. Соединив ее с основанием ребра, получим падающую тень конкретного ребра на предметную плоскость.
- Повторив пункты 2 и 3 для всех оставшихся вертикальных ребер, получим их падающие тени на предметной плоскости.
- Соединив между собой проекции вершин вертикальных ребер на предметную плоскость, получим контур падающей тени куба.
- Собственные тени вертикальных ребер совпадают с самими ребрами и находятся на них с неосвещенной стороны.
- Грани куба, невидимые с позиции источника света, находятся в собственной тени.
Если смотреть на куб с положительного направления главной координатной ocи Z, то ими будут правая, нижняя, передняя и задняя грани куба.
Следующий этап решения этой задачи заключается в том, чтобы сохраняя объемное изображение куба с учетом его теней, «перенести” на картинную плоскость результат операций. Самый лучший способ — это выполнить аксонометрическую проекцию полученной сцены на плоскость Z=0, которая будет теперь выступать в качестве картинной плоскости.
Для этого необходимо знать координаты вершин всех преобразуемых объектов — куба, источника освещения и многоугольника падающей тени. Последние представляют собой координаты точек пересечения световых лучей с предметной плоскостью XOZ.
0 комментариев