Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

  » Лунный зонд Laika, недоделанный | страница 1
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 1 из 3
На страницу: 1, 2, 3  След. | Все страницы
Поиск в этой теме:
Канал Orbiter: «Лунный зонд Laika, недоделанный»
igel
 100 EGP


Рейтинг канала: 4(86)
Репутация: 14
Сообщения: 755

Зарегистрирован: 12.06.2006
Лунный зонд Laika, недоделанный

Отмечая релиз Фау, хочу заодно показать "неширокой" публике свой старый, трехлетней уже давности, и откровенно недоделанный аддон. Немного предыстории. Как раз 3 года назад я познакомился с Орбитером, сильно охренел, полетал немного, посмотрел АПИ и решил сделать "что-нибудь". Да так ,чтобы - для учебы - охватить АПИ пошире.

Ну и сделал... почти. Лунный посадочный зонд по баллистической схеме Луны-9, но "по-соврменному" - то есть, как бы его могли сегодня быстренько и задешево склепать. Носитель тот же - Молния - , веса примерно те же... но весь зонд запроектировал сам, нарисовал в GMax (тоже чтоб научиться). Ну а внутри оторвался, конечно, с удовольствием. Добавил автопилот блока Л для автозапуска к Луне с орбиты по внеплоскостной траектории, добавил автопилот посадки... не добавил только автопилот коррекции - а надо! Освоил всякие отстрелы, анимацию. Добавил блок телеметрии - для отладки очень пригодилось! Добавил реакцию на столкновения - просто на пробу, потому что в Орбитере не было (и до сих пор нет). Причем реакция-то простешйая, а как прикольно получилось! Улыбка Добавил сгорание в атмосфере и прочие разрушения - причем не простые, а с рассыпанием на куски, с индивидуальным поведением каждого куска. Еще что-то там интересное добавил, уж и не помню... В коде тоже архитектура по тем временам любопытная: единый класс, отвечающий за все типы разнообразных обломков, вся общая "надклассовая" функциональность (то, что должен делать Орбитер, но не делает) вынесено в отдельный класс через двойное наследование... В общем, и сейчас интересно вспомнить.

Доделывая Фау, выкопал я эту штуку из архива, сунул в Орбитер - поди ж ты, летает! Через столько версий - и летает! Разумеется, кое-что в визуалках и поведении подпортилось, динамика изменилась, особенно в атмосфере - видимо, атмосфера стала моделироваться точнее. Ну да ничего. А вытащил я ее затем... Если Семерка скоро до Молнии дойдет - можно будет попробовать вернуться к этому проекту на новой базе. Готовность-то его - никак не меньше 60%, а то и больше! Автопилот коррекции сделать - и можно будет летать на Луну "в одну кнопку", причем не через экватор.

Если интересно - брать здесь: http://members.shaw.ca/atil8/Orbiter/Laika0.7.0b.zip
    Добавлено: 01:01 04-11-2006   
Thorton
 87 EGP


Рейтинг канала: 3(36)
Репутация: 12
Сообщения: 696
Откуда: Томск
Зарегистрирован: 15.05.2006
Блин, не удалось все возможности посмотреть Рыдания.
У меня после ТЛИ Орбитер в винду вываливается
    Добавлено: 14:21 04-11-2006   
hrjushkin
 51 EGP


Репутация: 0
Сообщения: 47
Откуда: Москва
Зарегистрирован: 08.10.2006
Продолжаем ЛКИ Улыбка Установил, попробовал, нашел где вываливается в винды. Если Лайка создается из модуля Лайка-Молния, то спотыкается на строках анимации, вот тут (файл Laika.cpp):

AddAnimationComponent (ConfigAnimation, 0, 1, mgrYaw2);
AddAnimationComponent (ConfigAnimation, 0, 1, mgrPitch2);
AddAnimationComponent (ConfigAnimation, 0, 1, mgrVNA2);

если их закоментарить, то Лайка создается, конечно, "куцая", но только по мешам, физически все движки на месте, и можно лететь дальше Улыбка

З.Ы. И при отстреле DropPO() после этого же ReloadMeshes() исчезает одна штанга с движками Улыбка Кажется тоже дело в анимации этой. Инетересно, конечно, докопать, в чем же дело, но для аддона можно просто добавить перевернутые на 180 пары к уже существующим штангам. Как я понял, там просто зеркально-отражается все в анимации, мгновенно.

З.З.Ы. "Сгорание" в атмосфере с рассыпанием на обломки - зачОт Улыбка Улыбка Улыбка
    Добавлено: 17:42 04-11-2006   
igel
 100 EGP


Рейтинг канала: 4(86)
Репутация: 14
Сообщения: 755

Зарегистрирован: 12.06.2006
Да, что-то в Орбитере изменилось с анимациями за эти три года. А вообще причина таких сложностей с анимацией мешей довольно простая: я экспериментировал, можно ли обойтись одной мешью, а потом размножить ее на несколько симметричных объектов. То есть, можно ли это сделать в принципе, насколько сложно, имеет ли смысл. По-моему, не особенно имеет смысл: выигрываю я только в размере файла мешей на диске, одного вместо четырех. Хотя... у Н1 вон одинаковых движков аж 30!
    Добавлено: 19:53 04-11-2006   
Thorton
 87 EGP


Рейтинг канала: 3(36)
Репутация: 12
Сообщения: 696
Откуда: Томск
Зарегистрирован: 15.05.2006
hrjushkin :
"Сгорание" в атмосфере с рассыпанием на обломки - зачОт

Как и за collision detection Супер! , при столкновении разгонника с лэндером, первый очень смачно разваливается.
    Добавлено: 20:22 04-11-2006   
igel
 100 EGP


Рейтинг канала: 4(86)
Репутация: 14
Сообщения: 755

Зарегистрирован: 12.06.2006
Ну это если сильно стукнуть Улыбка Если несильно - отскочит, причем оба получат довольно случайные импульсы. У этого механизма есть один глючок: иногда импульс расхождения оказывается неодстаточным, и объекты "прилипают" друг к другу, и начинают интересно танцевать Улыбка

А если стукнуть ну очень-очень сильно - объект не развалится, а вообще уничтожится, уйдет из сценария.
    Добавлено: 20:34 04-11-2006   
astronavt
 86 EGP


Рейтинг канала: 1(3)
Репутация: 35
Сообщения: 403
Откуда: Новочеркасск
Зарегистрирован: 11.01.2006
Ну насчет глюков вопрос решается просто - ставим Orbiter 2003 и дело в шляпе. Жаль только IMFD под него не идет, так что необходимые коррекции приходется делать Трансиксом.

Другое дело - адаптация под новую версию...

igel :
Если Семерка скоро до Молнии дойдет


Достаточно всего-лишь замутить блок Л и прикрутить его к "Союзу". А блок И "Молнии" такой как у "Союза", или как у "Восхода"? У меня пока лишь союзовский вариант.
_________________
Я бы изменил этот мир, но Бог не дает мне исходников...
    Добавлено: 00:14 06-11-2006   
hrjushkin
 51 EGP


Репутация: 0
Сообщения: 47
Откуда: Москва
Зарегистрирован: 08.10.2006
astronavt :
Ну насчет глюков вопрос решается просто - ставим Orbiter 2003 и дело в шляпе. Жаль только IMFD под него не идет


да не, там все просто, в утилитах где-то есть программка, ей можно повернуть меши нужные и анимацию выбросить вообще. Все будет работать Улыбка
    Добавлено: 01:07 06-11-2006   
igel
 100 EGP


Рейтинг канала: 4(86)
Репутация: 14
Сообщения: 755

Зарегистрирован: 12.06.2006
Насколько мне известно - как у "Союза" (блок И).

А насчет коррекции - вообще смешно можно сделать. После прохода полпути к Луне (собствнно, когда коррекция и нужна) можно включить ХУД в режим поверхности (он уже считается над Луной) и построить вектор в координатах местного горизонта, паралелльно поверхности, так ,чтобы подвернуть вектор скорости ( и так направленный примерно в Луну) прямо на ее центр Улыбка Некоторое жульничество , но работает на раз, и очень просто Улыбка
    Добавлено: 07:36 06-11-2006   
hrjushkin
 51 EGP


Репутация: 0
Сообщения: 47
Откуда: Москва
Зарегистрирован: 08.10.2006
все же докопал я где порылась собака с вылетанием в винды Улыбка Заодно нашел почему при отстреле DropPO штанга изчезает. Второе проще - там при релоаде мешей лишний поворот происходит, то есть поворотов как бы два получается и штанга опять встает на старое место (начальное).

А первое - вылет, происходит на сточке strcpy(((Laika*)NewLaika)->Proximator->TralFileName, TralFileName); там подразумевается, что файл есть, но если ТРАЛ не активирован, то есть никакого файла телеметрии не пишется, то происходит вылет.
    Добавлено: 20:32 06-11-2006   
igel
 100 EGP


Рейтинг канала: 4(86)
Репутация: 14
Сообщения: 755

Зарегистрирован: 12.06.2006
Вишь ты даже как... а раньше не вылетал - я тестировал без трал-файла...
    Добавлено: 20:53 06-11-2006   
hrjushkin
 51 EGP


Репутация: 0
Сообщения: 47
Откуда: Москва
Зарегистрирован: 08.10.2006
с мешами и анимацией - это, как выяснилось, глюк Орбитера нового! Есть микро-патч http://download.orbit.m6.net/orbiter.exe - все ок становится, штанги все на месте Улыбка

а для того, чтобы не вываливалось в винды, надо вместо

strcpy(((Laika*)NewLaika)->Proximator->TralFileName, TralFileName);

поставить

if (strlen(TralFileName) > 0) strcpy(((Laika*)NewLaika)->Proximator->TralFileName, TralFileName);

и вуаля Улыбка
    Добавлено: 00:36 08-11-2006   
igel
 100 EGP


Рейтинг канала: 4(86)
Репутация: 14
Сообщения: 755

Зарегистрирован: 12.06.2006
Спасибо!

Мне сейчас чуток не до Орбитера - уезжаю на уикенд, много подготовки. Но когда вернусь, хочу посмотреть, что в ней имеет смысл быстро поправить, чтобы пересобрать и перевыложить. А то в западном форуме ее, оказывается, помнят и снова хотят. Пока навскидку четыре пункта: пустой трал, анимации (вряд ли корректно требовать от людей установки неофициального патча, да и в анимации той практического смысла почти нету), подстроить параметры столкновений чтобы уменьшить риск "прилипания", и поправить аэродинамические параметры.
    Добавлено: 19:15 08-11-2006   
igel
 100 EGP


Рейтинг канала: 4(86)
Репутация: 14
Сообщения: 755

Зарегистрирован: 12.06.2006
Вчера вернулся на минутку к Лайке и попытался воспроизвести ctd. Не удалось почему-то, ни пустым тралом, ни анимацией. Отсюда напрашиваются два вопроса:

1. Этот неофициальный микропатч - откуда он взялся? Насколько можно его рекомендовать/требовать, если я опубликую в западном форуме текущую версию, не трогая анимацию? А то не хочется заморачиваться сейчас с такой мелочью как меши.

2. Чем опасна в нынешнем виде строка
strcpy(((Laika*)NewLaika)->Proximator->TralFileName, TralFileName);
?
Как я понимаю, только тем, что пустое имя файла может оказаться "инициализированным" мусором. Редко, но бывает... В таком случае, может быть, дешевле будет не ставить везде, где копируется строка, проверку strlen > 0, а просто принудительно инициализировать все строки нулем?
    Добавлено: 19:09 17-11-2006   
hrjushkin
 51 EGP


Репутация: 0
Сообщения: 47
Откуда: Москва
Зарегистрирован: 08.10.2006
igel :

1. Этот неофициальный микропатч - откуда он взялся? Насколько можно его рекомендовать/требовать, если я опубликую в западном форуме текущую версию, не трогая анимацию? А то не хочется заморачиваться сейчас с такой мелочью как меши.


Патч сделал сам Мартин, после того, как ему посыпались вопросы, что стало с анимацией. Выпуск патча 060929 тоже не помог, поэтому Мартин переделал только ехе-шник орбитеровский. Обещал в патче 2 все официально поправить. Кто-то бился даже в истерике, что у него куча аддонов, и все их переделать, чтобы не глючило он просто ФИЗИЧЕСКИ не сможет! Думаю для публикации всеж надо пофиксить. Негоже штангу отстреливать с контейнерами Улыбка

Цитата:

2. Чем опасна в нынешнем виде строка
strcpy(((Laika*)NewLaika)->Proximator->TralFileName, TralFileName);
?
Как я понимаю, только тем, что пустое имя файла может оказаться "инициализированным" мусором. Редко, но бывает... В таком случае, может быть, дешевле будет не ставить везде, где копируется строка, проверку strlen > 0, а просто принудительно инициализировать все строки нулем?


Я проверил, что будет если заменить
char TralFileName[256];
на
char TralFileName[256] = "";

Тоже все ок, и с файлом и без.. Я не спец в С++, но думаю, что тут что-то связано с тем, что строка 256 символов - пока не инициилизирована, ей память не выделяется. И при попытке что-то сотворить с этой переменной, не проверив, виндовс пытается обратиться к какому-нить адресу, который вообще может быть занят чем-то другим ("мусор" в этом указателе).

Почему не вываливается в CTD - мож от версии Виндовс зависит, может от конфигурации машины, памяти и т.д. По крайней мере вывалилось не у меня одного, так что это - тенденция! Улыбка
    Добавлено: 21:51 17-11-2006   
igel
 100 EGP


Рейтинг канала: 4(86)
Репутация: 14
Сообщения: 755

Зарегистрирован: 12.06.2006
Для меня это тоже не самый любимый язык. А строка... Память-то на массив должна сразы выделяться, тут я осторожен... а вот на автоматическую инициализацию переменных (точнее, на ее отсутствие) и впрямь налетал периодически, причем во всех языках без исключения Улыбка

А меши править - нет, не хочется. Во-первых, все равно патч Орбитера будет, во-вторых, это все-таки просто публикация, а не релиз. Только на моем сайте, без Ангара. Для тех, кто хочет освежить в памяти и для тех, кому интересен в основном только автопилот. А вертеть меши - это вспоминать gmax и вообще отвлекаться от основной темы, а времени у меня сейчас ой как мало...

А основная тема - доделать Лайку по-настоящему, до релиза. Я составил списочек todo - и первейшее и наиглавнейшее там, конечно же, автопилот коррекции. Именно он должен полностью замкнуть навигацию "в одну кнопку на Луну", что и есть конечная цель всей затеи. Остальное - так, инкрементальная косметика (перевести на новый api, отвязать от ракеты, подстроить параметры - ну и с мешами заодно разобраться).
    Добавлено: 23:39 17-11-2006   
hrjushkin
 51 EGP


Репутация: 0
Сообщения: 47
Откуда: Москва
Зарегистрирован: 08.10.2006
igel :
Память-то на массив должна сразы выделяться, тут я осторожен...


что-то мне подсказывает, что ежели переменная динамическая, память ей фик выделяется Улыбка Впрочем я ж говорю - не знаю как там и что Улыбка Я тока помню, что любой массив в С - это просто указатель на первый его элемент. А указатель - это ячейка памяти, а пока нет инициализации - Виндовс и не почешется выделить ресурс Улыбка

Цитата:

А вертеть меши - это вспоминать gmax

Чур меня чур Улыбка повернуть на 90 градусов - это утилитка Shipedit, что в комплекте с Орбитером идет, может.
    Добавлено: 02:43 18-11-2006   
Bloodest
 155 EGP


Рейтинг канала: 3(40)
Репутация: 18
Сообщения: 944
Откуда: Питерские мы
Зарегистрирован: 07.10.2004
Эээ ну char TralFileName[256] это просто обманка в смасле 256 - на самом деле это просто указатель, а 256 это подсказка для конструктора эквивалента и тд.
Те обозначив (пример)
{
//char TralFileName[256] ;// Ни куда не указывает
char TralFileName[256] = "";// Указывает на статик ""
char TralFileName2[256] = "";//TralFileName==TralFileName2 ! - следствие работы оптимизатора компилятора...
strcpy( TralFileName,((Laika*)NewLaika)->Proximator->TralFileName); // Начинает указывывать на эквивалент содержимого ((Laika*)NewLaika)->Proximator->TralFileName), который тутже создается и имеет размер ровно в 256 ячеек
} ==> вызывается деструкторы "" и эквивалента
Здесь минус strcpy состоит в том что место для эквивалента ищется место не менее 256 ячеек (и только !), можно и периписать больше! тем самым затереть часть последующих ячеек.

В данном же случае TralFileName без эквивалента strcpy может привести к сбою, потому как это действительно всего лишь указатель.
ЗЫ еще надо иметь что многие каллбаки на старте работают весьма неполноценно. Например в таймстепе только на 3-4 проходе начинают полноценно работать все функции API...
    Добавлено: 17:06 20-11-2006   
igel
 100 EGP


Рейтинг канала: 4(86)
Репутация: 14
Сообщения: 755

Зарегистрирован: 12.06.2006
Ага, значит
char TralFileName[256] = "";// Указывает на статик ""
в принципе достаточно. Статик - это то, что нужно. А явно указанную пустую строку strcpy понимает правильно. Там дальше по цепочке много где эта строка продолжает размножаться аналогичным образом, безо всяких проверок - и хоть бы хны. А вообще эти сишные строки - давняя боль...

На меши я вчера поглядел немного... и решил не трогать. Некузяво, некрасиво и противоречит концепции. Уж если я собираю аппарат "из кусков", то негоже множить сущности. И так раздражает, что симметричную мешь нельзя продублировать (загрузив лишь однажды), а надо держать и грузить копию файла. Но тут еще принципиальный вопрос: когда я, к примеру, гружу антенну в аппарат, она передвигается и проворачивается так, как этого требует конструкция. Когда же антенна отваливается и становится самостоятельным обломком - никакого проворота и сдвига нет, мешь грузится вполне себе симметрично. Держать разные файлы мешей на эти случаи - именно это и будет некузяво. Например, захочу я ей цвет поменять, форму, текстуру добавить - что же, все эти копии-клоны выслеживать "ниже по течению"?

А отсюда вопрос: является ли мгновенная анимация (как у меня в Лайке) единственным способом поставить мешь на нужное место с поворотом? В АПИ полно функций для работы с мешами, но везде среди параметров - только линейное перемещение. Имеется еще какая-то явно низкоуровневая meshgrouptransform (с аналогичной же структурой в параметре), но она требует VISHANDLE, что для меня выглядит подозрительно, да и вообще функция совершенно недокументированная (во всяком случае, та документация, что есть, мне не помогла Улыбка ).
    Добавлено: 20:07 20-11-2006   
Bloodest
 155 EGP


Рейтинг канала: 3(40)
Репутация: 18
Сообщения: 944
Откуда: Питерские мы
Зарегистрирован: 07.10.2004
Эээ можно предложить некоторое усложнение - использвать для антенны, скажем, аттачмент. Те вращать ее аттачментом, перемещать, возможно. Родитель - корабль, ребенок - антенна.
Для самой антенны как корабля проще вообще создать только файл конфигурации (можно вообще без меша) и без dll. Все управление - загрузку меша и деформации осуществлять из dll корабля (дает гигантский выигрыш во времени разработки за счет упращения отладки и механизмов синхронизации). Плюс, если антенна отстреливается - она отстрелится в том положении и форме трансформаций до которой доведена программой. Недостаток - нельзя полноценно отстрелить аттачмент, если родитель сидит на поверхности планеты (скорость будет нулевая не смотря на то, что она конкретно задается ) - приходится добавлять фиктивную силу. Ну естественно, если планируется поддержка перезагрузки - отдельный геморрой...
    Добавлено: 12:17 21-11-2006   
Канал Orbiter: «Лунный зонд Laika, недоделанный»
На страницу: 1, 2, 3  След. | Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Еще раз продемонстрируешь витиеватость русского языка - я продемонстрирую витиеватость модерирования. (Harley)

  » Лунный зонд Laika, недоделанный | страница 1
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18