"...
Все просто! ..." (с) Феликс, "Блеф"
Очень
часто при разработке сценария для МСФС
требуется исправить береговую черту,
сделать маленький отсровок, которого
нет в дефолтном сценарии, проложить
дорогу, поле, лес и т.д. МСФС2002 и МСФС2004
позволяют решить эту проблему новыми
средствами, создавая сценарии,
непосредственно корректирующие рельеф
поверхности в МСФС. В этой статье будут
рассмотрены приемы, позволяющие решать
такие задачи.
Немного
теории.
Мы
будем опираться на такие понятия, как LWM
– Land/Water
Mask –
маска земля/вода и VTP
– Vector
based
Textured
Polygon
– векторный текстурированный полигон.
Поверхность
земли в МСФС покрыта текстурами. Каждому
типу текстур назначен соответствующий
класс поверхности (LandClass).
Минимальная ячейка, с которой можно
оперировать в терминах класса
поверхности имеет размер порядка 0.011
градуса широты и 0.017 градуса долготы. Эта
ячейка называется ячейкой LOD13
(LOD13 cell). Каждая такая ячейка покрыта
текстурой размером 256 х 256 пикселей.
Массив из 32 х 32 ячейки LOD13 объединяются в ячейки уровня LOD8,
а массив из 256 х 256 ячеек уровня LOD13
называется ячейкой уровня LOD5.
LWM
и VTP нам
будут нужны, чтобы оперировать с
меньшими по размерам областями, чем одна
ячейка уровня LOD13.
LWM-полигон
позволит определить тип поверхности (вода
или суша), максимум, что мы можем сделать
спомощью LWM-полигона
– это твердый остров на поверхности
Мирового океана. Мы можем наложить
несколько LWM-полигонов
друг на друга. LWM-полигоны
с атрибутом «вода» позволят выполнять
на них посадку на гидросамолетах.
VTP-полигоны
позволяют задать конфигурацию берегов,
прокладывать дороги, задавать тип
ландкласса, присовенный данной
поверхности. Различают два типа VTP-полигонов,
в зависимости от того, с ячейками
какокго типа они работают. VTP1-полигоны
работают в пределах одной LOD13-ячейки
и не могут пересекать ее границы. VTP2-полигоны
могут использоваться в пределах LOD8-ячейки.
Важно, что именно VTP-полигоны
могут быть текстурированы сразличными (в
том числе и приготовленными
пользователем) лэндклассовскими
текстурами. В том числе, текстурами,
которым назначен тот или иной тип
автогенного заполнения сценария.
Подробнее
о структуре ландшафта и его свойствах в
МСФС можно прочитать в Terrain
SDK
для МСФС2002 и МСФС2004.
Теперь
перейдем к практике.
Для
локальных исправлений ландшафта очень
удобны программы CoastalLineMaker
и Ground2K.
Они имеют графический и очень наглядный
интерфейс. Мы можем строить LWM и VTP-полигоны
опираясь на заранее подготовленную
карту, точно привязанную к МСФС. Итак,
начнем.
Подготовка
карты
Нужна программа CoastLineMaker. Ее
надо запустить, но реально работать мы в
ней не будем, только используем входящий
в ее состав Cell Calculator
для расчета номера LOD-8
ячейки.
Итак,
запустил CLM - и жмем Help - Cell Calculator.
В МСФС снимаем координаты
самолета, помещенного в центр
изменяемой области, и вписываем их в
калькулятор.
Жмем
"Calculate LOD-8 Cell". Получаем
два числа.
В папке CLM есть
файлик 192_127_Grid.txt.
Его надо открыть Notepad'ом
и вписать наши числа в строкук CellDefine:
;
Do not use in CFS2
include
Cell_Grid.inc
CellDefine
192, 127
В последнюю строку мы
вписываем скалькулированный номер LOD8-ячейки.
Потом компилируем спомощью
BGLC. Вот
командная строка:
BGLC
<имя_файла_Grid.txt>
Получаем BGL-ку,
которую надо подключить как обычный
сценарий. В качестве текстуры
используется LOD8define.bmp,
лежащий в папке CLM.
ОК! Запускаем МСФС и видим сетку ячеек LOD-13.
Далее ориентируем самолет на
север, делаем скриншот, редактируем
картинку, снимаем координаты двух
крайних углов сетки (это потребует от
нас Ground2K).
Фоновая картинка готова!
Создание
полигона
1.
Запускаем Ground2K и загружаем в него проект
с подготовленной картой.
2.
выбираем инструмент рисования
полигонов:
3. Щелкаем мышкой на место,
где будет находиться первая точка
нашего полигона. При этом появляется
менюшка выбора свойств нового полигона
или линии:
Назначение
опций.
Poly/Line/Shore
– собственно, что мы рисуем: полигон,
линию (дорога, речка), берег
Type_Poly
– тип объекта.
LWM
– “Land-Water-Mask”
– позволяют переопределять тип
поверхности. Например, с их помощью
можно сделать полигон с поверхностью
типа “вода” на ячейке с лэндклассом «земля».
Эти полигоны имеют самый низкий уровень
приоритета. LWM-полигоны
нельзя текстурировать.
VTP
– “Vector
Textured
Polygons”
– полигоны с текстурами. Если им
назначен автоген, то он проявится. VTP-полигоны
имеют приоритет перед LWM-полигонами.
Существуют два типа VTP-полигонов.
VTP1
полигоны работают в пределах одной LOD13-ячейки,
т.е. в минимально-доступной
лэндклассовой области МСФС. VTP2-полигоны
работают в пределах одной LOD8-ячейки,
т.е. их границы могут пересекать границы LOD13-ячеек.
В нашем
случае, для простого полигона, нам нужен VTP2
– полигон, без береговой черты. Поэтому
ставим точки у “Poly
without
shore”
и VTP2 Poly.
Выбор типа текстуры – на усмотрение
пользователя. В данном примере (аэродром
Коробчеево) была выбрана текстура леса.
Затем проводим линию полигона на
подготовленной карте. Проект
компилируем (кнопка «с лампочкой») и
полученные BGL-файлы
подключаем в МСФС.
Редактирование
полигона.
Для
редактирования полигона надо его
выбрать. Для этого нажимаем кнопку Select:
Потом
щелкаем на полигон правой кнопкой. Когда
полигон выбран, он будет отображаться
красной линией. Щелкаем правой кнопкой
– и получаем меню выбора свойств
полигона, как это было рассмотрено ранее.
Удаление
полигона
Для
удаления полигона надо его выбрать. Для
этого нажимаем кнопку Select(см.выше)
Потом
щелкаем на полигон правой кнопкой. Когда
полигон выбран, он будет отображаться
красной линией. На панели инструментов:
нажимаем кнопку удалить.
Подтверждаем наши действия и… нет
больше полигона. Удалить полигон или
линию можно и простым нажатием клавиши
<Del>, но в этом
случае подтверждения нашим действиям
запрошено не будет.
Примечание
придирчивого читателя1.
«Ура, получилилось!!!» -
практически со слезами умиления на
глазах говорил молодой человек только
что запустивший MSFS
после редактирования VTP2
полигона. Но… полигон почему-то ушел на
северозапад от нужной точки…Упс? И тут
до него доходит, что пару часов назад в
документации ему попадалось описание
кнопочки FUIPS.[…
самолетик на кнопе нарисован, рядом с
корзиной для удаления…] «Ага,-подумал
он – Спробуем, спробуем…» И…
При загруженном
MSFS
загружаем Ground2K, загружаем наш проект и
жмем заветную кнопу. Посмотрим на экран MSFS:
появилось окно в котором три кнопки и «чекбокс»
а рядом с ним весьма интересная надпись
«SHOW
POSITION», то бишь «Де я?», ну если достаточно
вольно перевести на русский. Итак ставим
«галку» и возвращаемся в Ground2K. Что мы
видим? Появилась отметка нашего
реального места расположения. Отлично!
Переходим в MSFS,
в «Слив-режим» и перемещаем самолет в
нужную нам точку, т.е. точку с которой
начнется полигон. И действительно –
смотрим в Ground2K , при загрузке карты
подложки мы ошиблись на несколько
секунд – результат не заставил себя
ждать. Сейчас поправим.
Рисуем
по технологии «Создания полигона» новый
начиная с той точки которую мы таки
получили. Для удобства позиционирования
точек используем симулятор - Ground2K
позволяет переключаться между
програмами не сбрасывая маркер
рисуемого полигона – перемещаем
самолет в нужные точки на «сливе».
Осталось только удалить
старый полигон, и скомпилировать BGL-файл….
«Мы штроили, штроили и
наконец поштроили, ураа!!!»(с)Чебурашка.
1
- В роли "придирчивого читателя" -Гончаров
Игорь