Перспективные построения в векторной графике

   Расскажу о некоторых экспериментах, которые я проделал, в своей программе "Стереометрические модели". Целью экспериментов было совершенствование программы, мною также двигало  желание посмотреть, насколько векторная графика может быть приспособлена к сложным построениям с использованием перспективы.

  Если вы уже построили трёхмерную модель, то сделать из неё перспективное изображение несложно.  Во фронтальной плоскости (координата Y=0) рисуем рамку, а перед ней, несколько отступив в сторону отрицательных значений Y,  - помещаем наблюдателя, то есть, фотографа или художника.

  Я этого фотографа изобразил в виде палочки с зелёной головой. В точку «зелёной головы» и сходятся все линии, которые, пересекая фронтальную плоскость, создают на ней изображение модели в перспективе. В программе имеется достаточно инструментов, чтобы зафиксировать это изображение.
   Самым обычным является пункт меню «на пересечении прямой(1) и плоскости (2) ставим точку». Сначала мы выбираем нужные элементы кликами –

отрезок 2       -выбираем зелёную линию, идущую от объекта к фотоаппарату
плоскость 4   -выбираем фронтальную плоскость
 
затем кликаем кнопку «ok», и точка на фронтальной плоскости появляется.
Но у пункта меню есть и другая опция. Если мы выберем элементы так –

отрезок 45     -выбираем отрезок или точку объекта   
плоскость 4
точка 1          -выбираем точку, изображающую фотоаппарат

тогда после клика по «ok» на фронтальной плоскости появится отображение принадлежащего объекту элемента, и появится оно сразу в должной перспективе. Как видите, работать с программой легко и просто.

   Куда более сложной является обратная задача – восстановление модели по её фотографии. Фотография – плоский предмет, и кое-какая информация о реальном виде 3-х мерного объёмного объекта на фотографии исчезает. Например, мне было очень трудно догадаться, какую ширину имеют ступени той пожарной лестницы, которую вы видите на стене дома на иллюстрации.
   Ясно, что лестница должна быть такая, чтобы по ней мог спуститься человек. Но в моём первом опыте её ширина оказалась равной 20 см, кроме того, перила слева получились метра на два длиннее, чем перила справа.
   Это я к тому, что задача непростая, и даже в интернете мало что по этому поводу можно узнать. Но, давайте, о своих опытах расскажу по порядку.

   Чем меня привлекла эта фотография, так это тем, что по кирпичной кладке, и, ориентируясь на дверь второго этажа справа, и на вертикальную тень от перил слева, я сумел прочертить четырёхугольник, совпадающий со стеной дома и имеющий прямоугольные очертания в реале, но показывающий явную перспективу на фотографии. На самом деле я использовал не столь яркое фото,  а забелил картинку, чтобы чёрные линии на ней были видны яснее.

   Итак, стороны четырёхугольника на фотографии сходятся к весьма удалённой точке с координатами  X=28 Z=2094  сверху, и к точке   X=925 Z=57  справа. Поскольку фото находится во фронтальной плоскости,  координата  Y в обоих случаях равна нулю.
   Стена дома в реале удаляется от фотографа более выражено – справа, и слегка – в своей верхней части. Фотографа я выставил с отступом от фото, задав ему координату  Y=-140 – число, взятое произвольно, но которое я потом существенно увеличил. Что касается координат  X и Z, то я взял их в соответствии со сходом линий в перспективе, то X=28 Z=2094     Отметим, что угол между двумя прямыми, проведёнными в стереометрии от фотоаппарата до двух точек схода  перспективы составил 90 градусов.

   И это – общее правило. Какой бы ни был прямоугольник, сфотографированный в реале, на фото всегда найдутся две точки схода сторон в перспективе. А в случае, если точки схода нет – если пара сторон на фото параллельны друг другу, то это значит, что точка схода лежит в бесконечности, и соединять фотоаппарат с точкой схода не нужно, а соответствующую линию нужно в стереометрии провести через фотоаппарат параллельно оси X или параллельно оси Z.  Проведённые линии опять же составят между собой угол в 90 градусов.

   Почему я говорю «в стереометрии»? Потому что, взгляните на правую часть иллюстрации, где модель повёрнута, - там чётко видно, что фотограф со своим фотоаппаратом  находится на значительном расстоянии от фронтальной плоскости. Между ним и плоскостью проведён отрезок – так называемый «толкатель». Удлиняя этот отрезок в одном из пунктов меню, можно увеличивать масштаб всего изображения вдоль отрезка, расталкивая графические примитивы от его начала. Поскольку начало отрезка я поместил на фронтальной плоскости, а фронтальная плоскость перпендикулярна ему, то сама она остаётся на месте и никуда не движется. При таком изменении масштаба сохраняются все пропорции, все пересечения линий и перспектива, удлиняются только расстояния вдоль  отрезка-толкателя.

   По ходу своих действий я использовал несколько таких «толкателей», в частности, для изменения длин сторон прямоугольника без нарушения его прямоугольной сущности.
   Естественно, можно не только «толкать» и расширять графику, можно и сжимать её. То же самое можно делать и относительно точки. Действия эти производятся сразу над всеми элементами указанного цвета, их только нужно предварительно перекрасить в подходящий цвет.

   Аналогично можно и вращать группу элементов вокруг любого отрезка.
   Выполняя вращения и толкания, мне удалось подогнать изображение стены «в реале» под зелёные визирные линии, и добиться точного пересечения ими углов прямоугольника.
   После того, как эта задача была выполнена, я занялся лесенкой и балкончиком.

   Используя голубой отрезок-толкатель и голубую визирную точку на верхнем конце лесенки, я оттолкал ближнюю часть лесенки от стены в то положение,  в котором отображение голубой точки в плане попало на правильное место на фото. 

   Измерил отрезки. Чтобы узнать длину отрезка нужно просто выбрать его – в верхнем текстовом окне, предназначенном для комментариев, будут показаны его координаты и длина. Длина подоконника окна составила 112 пикселей – в том масштабе, в котором мы работаем, пусть это будет 112 см, и это нормально. А вот лесенка оказалась узка – её ширина составила только 24 см.

   Тогда я применил чёрный «толкатель» в режиме тотального расширения всей графики вдоль него. Сам толкатель удлинился с 148-ми до 295 см – фотограф отошёл от стены, подоконник увеличился немного – до 116 см, а лесенка расширилась существенно – до 47-ми см, и человек теперь по ней спокойно может спуститься.
 
  Итак, Вы чувствуете, насколько мощные средства для исследования свойств перспективы предоставляет программа. Она эффективна, и работать с ней интересно. Скачать программу можно здесь - http://disk.yandex.ru/d/5dbAp05h-XtTcw

Спасибо за внимание.

________________


Рецензии