Уважаемые коллеги!
Создал эту тему исключительно для FAQ.
Создал эту тему исключительно для FAQ.
У меня вот такой вопрос сложился. Если анимацию по SDK разобрал и делаю без особых проблем, то вот как быть с созданием своей анимации? Например:
Хочется сделать такую фишку(чисто эксперимент — пока).
— В самолете есть некий ящик(коробка и пр.);
— требуется его открыть в VC.
Разумеется тут всякие двери и пр. не подходят. Как разумно обозвать деталь? Что написать в XML? и как правильно откомпилить?
Не хотелось бы разводить флейм в этом топике — давайте делиться опытом
PS Пардон что влез. Прикрепляю тему, пмм дело нужное, а значит архимодерируемое.
Флей будем вырубать на корню… 
Сообщение отредактировано Yelky-Palky: 26 May 2012 — 23:40
Т.е., совершенно не требуется ящик вешать на переменную f_canopy или любую другую дефолтную симовскую.
<part>
<name>MySwitch</name> //�мя детали/части в gmax (любое, можно krishka_yschika или box_cover)
<animation>
<parameter>
<code>(L:MySwitch, bool) 50 *</code> // Сдесь: (L:MySwitch, bool)- переменная ( значения 0 или 1), далее- » X 50 * » надо понимать как » X * 50 «
Результатом Р±СѓРґСѓС‚ числа 0 или 50. Р’ понимании СЃРёРјР° это кадры анимации (например РІ gmax сделаем анимацию: кадр «0» — ящик закрыт, кадр «50»- открыт).
<lag>500</lag> // Скорость СЃ которой будет проигрываться анимация (пример lag=500 — крышка откроется мгновенн, lag=10 — будет открываться медленно)
</parameter>
</animation>
<mouserect>
<cursor>Hand</cursor>
<tooltip_text>MySwitch</tooltip_text> // Всплывающая подсказка — РјРѕР¶РЅРѕ написать РІСЃРµ что СѓРіРѕРґРЅРѕ
<mouse_flags>LeftSingle</mouse_flags> // Тип клика мышкой (можно задать- правой, средней, колесом и т.д.)
<callback_code>(L:MySwitch, bool) ! (>L:MySwitch, bool)</callback_code> // Рто то, что произойдет РїСЂРё клике мышкой. Любое арифметическое действие СЃ любыми переменными. Р’ данном примере — РїСЂРё клике поменять значение переменной СЃ 0 РЅР° 1 или обратно (РЅРµ знаю как дословно РІСЃРµ это понимать, РЅРѕ для меня это РЅРµ главное, главное что работает).
</mouserect>
</part>
Р’ gmax делаем часть СЃ именем «MySwitch», делаем ей анимацию РІ 50 кадров.
Ркспортируем.
Р’СЃРµ.
А то чота я хмл пытался изучать-так ниче и не понял-все туторы пишуться применительно к интернету…
же вызывать анимацию из панели по требованию
Т.е. вы пишете не <CODE> …
а просто <VALUE> дял L: переменной
а дальше используя механизм Named Vars
initalize_named_value,set_named_value и т.д.
( подробности в Panel SDK ) устанавливаете
нужные фреймы анимации либо просто bool — есть нету или
открыто закрыто.
использованием команд по нажатию клавиш — например, надо
открыть некий люк нажатием клавиши «А».
Заранее спасибо. Дмитрий.
1. Вписываем в makeMDL.parts этот код:
<part>
<name>luk</name>
<animation>
<parameter>
<code>
(L:luk,bool) 100 *
</code>
<lag>350</lag>
</parameter>
</animation>
</part>
2. Создаем XML прибор для вашего самолета со следующим кодом и сохраняем его, например, с названием key.xml.
<Gauge Name=»Luk Key» Version=»1.0″>
<Keys>
<On Key=»K»>0
(L:luk,bool) ! (>L:luk,bool)</On>
</Keys>
</Gauge>
3. Правильно прописываем прибор key.xml в Panels.cfg вашего самолета.
4. Создаем РІ gmax-Рµ запчасть люка, обзываем ее luk Рё анимируем. РќР° кадре 0 РѕРЅР° закрыта. РќР° кадре 100 – открыта. Рту запчасть РІС‹ можете разместить, РіРґРµ хотите. (или РІ виртуалке, или снаружи)
5. Компилируем модель.
6. Выбираем ваш самолет и в 2D панели жмем клавишу K, и ваш люк открывается.
Единственный недостаток – люк открывается только в 2D панели, но его легко убрать прописав этот прибор в виртуалку.
Если вам нужно чтобы люк открывался нажатием клавиши A, то в приборе вместо
<On Key=»K»>0 напишите <On Key=»A»>0
Внимание! При использовании этого прибора дефолтные команды на клавишах не убираются. Например, если вы присвоите действие клавише G, то у вас откроется люк, и выпустится шасси. Чтобы этого не было нужно просто в настройках симулятора с этой клавиши убрать команду.
В следующий раз я напишу как сделать 3D компас и указатель скорости.
С уважением, �лья.
Компас:
1. Скопируйте этот код в makeMDL.parts
2.
<part>
<name>compass</name>
<animation>
<parameter>
<code>
(A:Wiskey compass indication degrees,degrees) 3.6 /
</code>
<lag>100</lag>
</parameter>
</animation>
</part>
3. В gmax-e создайте цилиндр, назовите его compass, наложите на него текстуру (их можно взять из XML компаса любого самолета), и заанимируйте его так, чтобы на 0 кадре он показывал север, на 50 юг и на 100 опять север.
4. Теперь можно компилировать вашу модель.
5. Если компас будет поттормаживать, то поставьте в секции <lag> не 100, а цифру чуть поменьше, например, 50.
В полете при проходе через север компас может перескакнуть на 360 градусов, но при аккуратной анимации это будет не заметно.
Объясню, код секции <code>.
(A:Wiskey compass indication degrees,degrees) – это параметр, того, что на нужно вывести.
3.6 / — это деление РЅР° 3,6. Параметр делится РЅР° 3,6 потому что максимальная цифра показываемая РЅР° компасе – 360 градусов. Разделив 360 РЅР° 3,6 РјС‹ получаем 100 (количество кадров анимации)
Указатель скорости:
1. В этом примере я расскажу как создать УС-350, но создание других почти аналогично.
2. Впишите в makeMDL.parts это
<part>
<name>us350-strelka</name>
<animation>
<parameter>
<code>
(A:Airspeed select indicated or true,knots) 1.852 * 3.5 /
</code>
<lag>200</lag>
</parameter>
</animation>
</part>
3. Создайте в gmax-e цилиндр, покрасьте его текстурой со шкалой.
4. Создайте в 3D стрелку и назовите ее us350-strelka. Заанимируйте ее так, чтобы на 0 кадре она показывала на 0, на 100 кадре – 350. Для того, чтобы сделать нелинейность, сделайте следующее. Выберите значение скорости (2, 5, 10, 15, 20, 25, 30, 35). Например, выберем 2 то есть 20 км/ч. Делим 20 на 3.5 (или другую цифру указанную в секции <code>) и получаем 5,7. Значит идем на 6 кадр, в нем делаем keyframe и крутим стрелку на значение 2. � так для остальных значений.
5. Теперь компилируете вашу модель, и смотрите результат в симе.
РћР±СЉСЏСЃРЅСЋ РєРѕРґ РїСЂРёР±РѕСЂР°.
(A:Airspeed select indicated or true,knots) – параметр приборной скорости
1.852 * — умножение РЅР° 1,852. Умножаем для того, чтобы получить скорость РІ километрах.
3.5 / — деление РЅР° 3.5. Делим, чтобы перевести скорость РІ 100 кадров. Если вам РЅСѓР¶РЅРѕ создать например РЈРЎ-450, то вместо 3,5 напишите 4,5.
2PRE
Вы немного ошиблись. <Value> можно использовать ТОЛЬКО для A: переменной.
Если нужно еще что-то, спрашивайте здесь, по возможности отвечу.
С уважением, �лья.
P.S
На скриншоте – панель самолета �л-103, полностью сделанная в 3D, без использования 2D приборов.
Прикрепленные изображения
Вариометр трехмерный — излишек, РЅР° РјРѕР№ взгляд. Чтобы сделать круглый РїСЂРёР±РѕСЂ, без видимых углов, надо делать многогранник хотя Р±С‹ РЅР° 24 стороны (Рё то заметно). Потом, надо делать рамки РїСЂРёР±РѕСЂР°, это еще РјРёРЅРёРјСѓРј три стороны. Рў.Рµ., РЅР° РѕРґРёРЅ такой РїСЂРёР±РѕСЂ — 24С…3 = 72С…2= 144 треугольника.
Основание РїСЂРёР±РѕСЂР° (циферблат) РјРѕР¶РЅРѕ сделать четырехугольником Рё РЅР° него натянуть текстуру РїСЂРёР±РѕСЂР°. (или, если делать СѓР¶ совсем трехмерным, СЃРѕ стрелкой — то РєСЂСѓРі РёР· 24 РєСЂСѓРіРѕРІ Рё стрелку)
Сверху еще стеклом закрыть — РєСЂСѓРі РёР· 24 углов.
� так вот штук 40 приборов.
Рђ РЅР° авиагоризонт — тут СЏ согласен тратиться
Я все равно за производительность, а не за 5-7 фпс на среднем компе.
Конечно нужно делать так, чтобы полигонов было поменьше. Но зачем мелочиться, покрайней мере для маленького самолета, типа �л-103. У меня на нем на стеклах и носу блеск, приборов на 3080 полигонов (не готов еще только 1 прибор) и наружа на 50000. � на нашем компе (P4 2400, 768 ОЗУ видюха GeForce5900) 24,5 кадра держит спокойно. Да загружается может и долго, но зато выглядит красиво. Тем более для большого самолета это делать никто не заставляет, но на �л-103 всего 21 прибор.
Кстати, по этой технологии если хорошо заанимировать приборы не тормозят вообще. Так что на нашем следующем проекте (не �л-103) не будет тех же тормозов с приборами, как в виртуалке Як-12
С уважением, �лья.
Я не имел в виду самолет с десятью приборами, может, я неточно выразился. У меня была задумка сделать ВК в эмке по тому же методу, потом я от нее отказался, ибо летать на слайдшоу и любоваться красявостью — это ацтой.
Т.е. при условии, что ВСУ(электрика… трам-пам-пам, рояля не играет) выключена и самолет на стояночном. Колодки видны, в противном случае нет. Как делать в сценах вызов чего либо по радио, понятно, но в самолете, было бы не совсем корректно сие использывать, или я не прав?
Наставтье на путь истинный, коллеги!
Сообщение отредактировано Igor Goncharov: 20 April 2006 — 16:02
А вот тогда уточняющий вопрос:
Допустим, нарисовал СЏ РІ 0-Р№ позиции анимации некий объект. Р’ некоторой позиции (1-Р№) его «СЃРїСЂСЏС‚ал» например РІ крыло, дабы «РЅРµ светился», РЅРѕ это хорошо СЃ маленьким объектом (Рё вообще верно ли СЏ делаю, что прячу его? Может есть какой-нить РґСЂСѓРіРѕР№ алгоритм работы — поделитесь?). Рђ что сделать СЃ большим? РџРѕ размеру соизмеримым хотя Р±С‹ … СavsimёРЅРѕР№-заправшиком?
<name>PARK_BRAKES</name>
<visible_in_range>
<parameter>
<code>(A:Circuit general panel on, bool) ! (A:SIM ON GROUND, bool) * (A:VELOCITY BODY Z, kilometers/hour) 1 < && (A:Turb eng1 N1, percent) 2 < && (A:Turb eng2 N1, percent) 2 < && (A:Turb eng3 N1, percent) 2 < && (A:Turb eng4 N1, percent) 2 < &&
</code>
</parameter>
<minvalue>1</minvalue>
</visible_in_range>
</part>
Спасибо — поробую, о результатах доложу!