Полезности
Dec. 26th, 2009 03:24 amКак-то мне нужно было построить объект в перспективе, имея четкие линейные размеры развертки. Мне важно было эти размеры сохранить в перспективе, с учетом сокращений. Т. е. 10 мм в перспективе становятся меньше. Соотвественно, я начал вспоминать начертательную геометрию и параллельно искать примеры проецирования объектов с плоскости в пространство. Самым подходящим оказался этот пример. Но в нем есть некоторые лишние моменты. И к тому же он на английском. Поэтому частично переведу, частично упрощю процесс здесь. Уверен, это многим нужно будет.
1) Имеем некий кубический объект с простой выемкой.
2) Возьмем его вид сверху и расположим под углом 45°. Но на самом деле запоминаем, что для построения не важно под каким углом вы его повернете. Это лишь выбранный вами исходя из эстетических или моральных соображений угол. Но именно под таким углом он у вас получится в перспективе.
3) Сейчас рисуем линию, которую обзовем «зрительная линия». Она должна четко коснуться самой нижней точки объекта (в нашем случае — левый угол). Сейчас важно осознать, что вы моделируете ситуацию, когда вы реально смотрите на объект. Зеленая точка — это вы. А вся сцена как бы намекает, что это с высоты птичьей диареи. По ссылке, приведенной выше, автор рекомендует измерить горизонталь нашего повернутого объекта и, умножив ее на два, проложить вертикаль вниз, тем самым отметив точку наблюдателя. Но я так и не понял прикола, хотя думаю, что он тем самым хотел указать, что это супер выгодный ракурс. И так, вот объект, а во-о-он там внизу — зритель.
4) Теперь мы добавляем еще одну линию — пол. Это, собственно, плоскость, на которой стоит наш объект. Земля, асфальт, паркет — неважно. Что делает эта линия? Она определяет насколько близко вы к объекту. Если вы опустите линию ниже, то упретесь прямо лицом к объекту. А вот если вы зеленую точку потащите вверх, ближе к зрительной лнии, то на выходе у вас получится эффект fish eye. Но в любом случае, эти положения взяты случайно, без просчета.
Как видите, надо объект поставить на пол, поэтому берем наш вид с боку и кладем на асфальт. Не имеет значения левее-правее. Главное, чтобы высота объекта была понятна.
5) Теперь нам надо найти точки схода. Это вообще как два пальца обоссать. Копируете самый близкий к вашему взгляду угол объекта и тащите его к точке зрителя. Надо его увеличить (но не менять угол), чтобы он пересекся со зрительной линией. А теперь внимание! Нам важно сейчас понять, где наша линия горизонта. Т. е. как мы смотрим на объект: сверху или снизу? В моем случае линия горизонта будет сверху объекта (я хочу смотреть на объект как бы вниз). Для удобства зрительную линию я и сделал линией горизонта. Хотя можно горизонт и ниже опустить. Главное не ниже объекта, иначе смотреть будете на него как на дом.
6) Синие линии — это и есть наши направляющие, которые создали нам перспективу. Они ушли в точки схода. И мы получаем уже почти законченную конструкцию нашего кубика. Давайте только проведем от уголков стоящего на земле кубика парочку линий к центральной. Значит верхний уголок кубика + уголок выемки. Проводим эти линии строго горизонтально, пока не упремся в центральную линию. А теперь соединим ребра нашего перевернутого вида сверху с точкой зрителя.
7) Теперь мы берем самое близкое ребро и чертим его (черным цветом) на полученных точках. Сечете? Едем дальше. Проводим от зеленой точки зрителя две линии, которые должны коснуться ребер на нашем перевернутом виде сверху. Назовем эти линии «спасательные». Они нас щас спасут.
8) А теперь, собственно, мы должны найти наши боковые грани. В точках где спасательные линии касаются зрительной линии рисуем по одной вертикальной линии, вниз (на рисунке они обозначены 50% magenta). И мы получаем боковые ребра. Их высота определяется, естественно, линиями перспективы (голубенькие).
9) Дорисовываем черненьким недостающие ребра, строго по линиям перспективы.
10) А теперь нам надо эту дырку внутри кубика построить. Для этого проводим поверх нашего перевернутого вида диагональ, которая точно такая же, как стенка нашей выемки. От точки пересечения этой диагонали и левого ребра кубика рисуем линию к точке зрителя. И там где она упала на ребро объемного недокубика, там и отмечаем точку (оранжевая).
11) От найденной точки ведем линию к точку схода. Сразу за этим опускаем на наш объекмный недокуб еще две вертикали, которые укажут, где уголки выемки. Сечете? Я уже примерно на этой стадии возвращался к началу и по-новой.
12) Ну а тут уже все становится понятно. Благодаря виду сбоку (который на земле стоит), мы находим нижнее ребро нашей лунки, отмечаем эту точку на ребре недокуба и тут же проводим голубенькую линию в точку схода. Тем самым мы определили еще две точки нашей выемки. Как? Ну у нас ведь вертикальные линии, поэтому тупо размещаем под верхними точками еще две штуки, снизу. Они должны лечь на линию перспективы.
13) Оло-ло. Вот эти вертикальные линии выемки, черненьким дорисованы.
14) От образовавшихся на верхнем ребре недокуба точек проводим перспективные линии и получаем внутреннее ребро нашего недокуба.
Ну вот и все. Теперь у нас все пропорционально исказилось в перспективе, не от балды.
А тем, у кого сейчас дымится голова, предлагаю скачать этот eps-файл со всеми линиями. Щелкайте слои и все такое. Ну, и если есть вопросы, задавайте.
Косяк
Date: 2009-12-26 08:55 am (UTC)Re: Косяк
Date: 2009-12-26 09:48 am (UTC)Никаких векторов, котрые бы четко показывали ее положение, на построениях нет. Возможно, нужно достроить еще и эти векторы.
Это конечно круто, но погружаясь в мегапостроения, легко забыть обычное воображение, которое и подсказывает что на результате не хватает линии красного цвета.
Я по себе это знаю. :)
Re: Косяк
Date: 2009-12-26 10:49 am (UTC)Найти ее легко — от уголка тянешь к точке схода линию.
Re: Косяк
Date: 2009-12-26 10:49 am (UTC)no subject
Date: 2009-12-26 04:04 pm (UTC)Вспомнил слова своего преподавателя: «Только у тупых тупой карандаш» (на самом деле я только позже понял истину этих слов) =)
no subject
Date: 2009-12-26 08:08 pm (UTC)no subject
Date: 2009-12-28 01:05 am (UTC)