ВНИМАНИЕ! Наша конференция посвящена космической тематике и компьютерным играм. Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!
|
» Луна-9-10: разработка. | страница 3 |
|
|
|
Канал Orbiter: «Луна-9-10: разработка.» |
|
|
igel 100 EGP
Рейтинг канала: 4(86) Репутация: 14 Сообщения: 755
Зарегистрирован: 12.06.2006 |
|
Заменил альфу на новую, имя файла то же и там же:
http://members.shaw.ca/atil8/Orbiter/Luna9/Luna9.v.A.zip
Рекомедую перед распаковкой стереть старый каталог _Luna9 в сценариях: я поудалял много "лишних" сценариев начального уровня, если какие-то останутся, могут даже оказаться несовместимы.
В новой альфе нет, пожалуй, только автопилотов. Все остальное работает, хотя и небезглючно. Еще придется сильно причесывать.
Фокус я поотключал везде, кроме КТДУ. После отделения АЛС от КТДУ фокус разрешается на АЛС и переносится на нее, а на КТДУ отключается. Для отладки, чтобы каскадно разрешить фокус на все компоненты, нужно, пока они еще все приделаны к КТДУ, в сценарии прописать для нее FOCUS_ALL 1 . В каких-то сценариях продолжает глючить астроотсек: не берет фокус, даже если разрешен, и при его отделении Орбитер падает с грохотом.
Оба приборных отсека инертны и сами ничего не могут. Наличие радиоотосека влияет на работу системы ориентации: без него ориентация возможна только при работе двигателя.
Клавиши на КТДУ:
Е - использовать или нет основную камеру двигателя;
К - выдвинуть щупы (необратимо)
С - переключение между бортовыми камерами (на внутреннем виде);
J - отстрел последовательно астро-, радиоотсека, АЛС, мешков на АЛС
В - наддув мешков АЛС (необратимо)
После падения КТДУ на поверхность она тоже становится интертной, щупы "ломаются".
После отстрела АЛС на ней (на АЛС) вклюЧается таймер. Через 30 секунд после отделения от КТДУ отстреливаются мешки, еще через 10 раскрываются лепестки, потом антенны, потом таймер тоже становится инертным.
Клавиши на АЛС:
В - наддув мешков (необратимо)
J - отстрел мешков (тоже, разумеется, необратимо)
К - раскрытие лепестков (обратимо)
G - раскрытие антенн (обратимо)
Очередность работы с мешками, лепестками и антеннами должна соблюдаться, от несоблюдения стоит защита.
Мешки после отстрела потихоньку сами необратимо сдуваются и больше ничего не делают. Я следил, чтобы на земле объекты "соблюдали" поверхность, и не "висели" в воздухе и не зарывались в землю (сверх необходимого).
Вроде все. В ручном режиме ее уже, пожалуй, можно сажать. Но мелочей еще много сыроватых, и я их хочу выправить до автопилотов.
Уф-ф. Пошел спать...
|
|
|
igel 100 EGP
Рейтинг канала: 4(86) Репутация: 14 Сообщения: 755
Зарегистрирован: 12.06.2006 |
|
Выспался. Забыл вчера упомянуть, что в сценариях все объекты сохраняют (и восстанавливают) все, что нужно, за исключением текущих анимаций. То есть, если аниамция завершилась, то сохранится-восстановится уже в конечной фазе, а если не успела завершиться, то будет восстановлена в начальной.
Следующий этап - составление списка "замученных очепяток", багов, недоделок и просто пожеланий, отдельно по каждому объекту. Пока на уровне мозгового штурма, не отвергая практически ничего, кроме разве что самых очевидных "нереальностей".
|
|
|
Thorton 87 EGP
Рейтинг канала: 3(36) Репутация: 12 Сообщения: 696 Откуда: Томск Зарегистрирован: 15.05.2006 |
|
Погонял немного, пока особых глюков не заметил, ну кроме известного с астроотсеком((, так что сейчас именно на этом глюке надо сфокусироваться, очень уж он портит впечатление.
Пытался посадить на Луну, в результате основной блок приземлился нормально, а сама станция в хлам
Какая должна быть высота для её безопасного отделения? Или она отделяется, как только щупы Луны коснутся?
Еще в папку сценариев неплохо бы добавить сценарий со станцией уже почти у Луны, скажем километрах в 300-х.
Особенно эффектно выглядит все это в паре с аддоном Orulex (в моем последнем патче был скиншот), динамически генерирующим ландщафт. Потом можно его будут для совместного использования в мануале порекомендовать.
|
|
|
igel 100 EGP
Рейтинг канала: 4(86) Репутация: 14 Сообщения: 755
Зарегистрирован: 12.06.2006 |
|
Астроотсек да, пока - чистая мистика. Какие-то сценарии очень устойчиво дают глюк. Пока не нашел. И это пока единственный полный show-stopper, все остальное некритично. Из остального заметил (еще вчера, но забыл сказать, ибо незначительно), что газовые сопла тангажа чуть-чуть смещены вдоль поперечной оси, от нулевой позиции. Самую малость, еле заметно, что выхлопы чуть в стороне. Это модели погрешность, или стыковки модели? Не знаю, но поправить легко будет, либо модель, либо я в коде смещу выхлопы. Надо только договориться, кто правит, а то будем в разные стороны тянуть
Автоматическая циклограмма посадки, с отделением по щупу, автоматическому наддуву и т.п., будет делаться постепенно, вместе с автопилотами. Щуп, например, можно сделать отдельно, а наддув и сброс отсеков увязаны с запуском двигателя на торможение, а он будет определяться автопилотом. Так что пока - только ручками...
Насчет разрушения - там много сложных правил. Все объекты разрушаются по определенной скорости удара, горизонтальной и/или вертикальной. Или по оределенному скоростному напору в атмосфере. Я старался подбирать эти параметры более-менее реалистично. Для АЛС эти скорости такие: надутые мешки 40 м/с, ненадутые 20, без мешков 10, с раскрытыми лепестками 3. Есть еще скорость, около 1 км/с, при которой объекты не просто "в хлам", а со взрывом. Взрыв также происходит, если в момент гибели более 10% массы объекта составляет топливо.
Любой custom-ландшафт всегда смотриртся изумительно! Меня в них тольк одно смущает: высотный рельеф, если он есть, будет конфликтовать с визуальным представлением, просчитанном на "нулевую" поверхность. Там ведь много нюансов, например, как вполне буквально станция "вываливается" из надутых мешков при их отстреле, падает с этой небольшой высоты, проворачивается на грунте... А в рельеф - зароется. Не разобьется, но визуалка поедет.
Кстати, насчет визуалки. У меня два вопроса-идеи по ходу взникли, хочу вбросить.
Первый: "хлам" сейчас не имеет никаких мешей вообше, обнаруживается только по дымному облаку на поверхности либо по дымному следу в воздухе. С Фау этого было более чем достаточно, но там дым был гуще. Здесь я сделал дым пореже, и теперь на больших скоростях входа у "хлама" нет никакий "комы" вообще, и в перерывах между выборосами дыма он просто невидим. Вот я и думаю - не стоит сделать какую-нибудь обобщенную мешь просто абстрактного обломка, пригодного для любого случая, чтобы в центре хлама всегда была какая-нубудь "кучка железа"?
Второе. Я собираюсь повернуть бортовую камеру на АЛС, чтобы смотрела вбок, а не вверх. И думаю: нельзя ли как-то поместить перед ней поверхность-мешь с текстурой "исторической" панорамы? Так, чтобы было видно только изнутри и только по команде?
|
|
|
Thorton 87 EGP
Рейтинг канала: 3(36) Репутация: 12 Сообщения: 696 Откуда: Томск Зарегистрирован: 15.05.2006 |
|
igel : |
Это модели погрешность, или стыковки модели? Не знаю, но поправить легко будет, либо модель, либо я в коде смещу выхлопы. Надо только договориться, кто правит, а то будем в разные стороны тянуть
|
Я чесно говоря не знаяю, вероятно это погрешность стыковки, если можешь то поправь сам.
По твоим вопросам:
1. Можно такое сделать, обломок один делать или несколько, как у Лайки?
2. что-то моя твоя непонимать (видимо из-за того что спать сильно хочется), ты предлагаешь сделать что-то типа Landing Site, как в аддоне AMSO последней версии(там они кстаи очень красивые получились).
|
|
|
igel 100 EGP
Рейтинг канала: 4(86) Репутация: 14 Сообщения: 755
Зарегистрирован: 12.06.2006 |
|
0. Факелы подвину, не проблема.
1. На каждый элемент обломки делать можно, но трудоемко. Тем более, что он должен "покрывать" широкий диапазон авариных ситуаций - взрывы, сгорания, рабзивания... Перспективнее попробовать сделать один, ну два, ну три "обобщенных" меша обломка. Что-то достаточно "бесформенное", пригодное к чему угодно, хоть к куску Луны-9, хоть к остаткам Молнии-1. Тогда их можно грузить по необходимости хоть случайным образом, можно даже масштабировать в каких-то пределах, подгоняя под размеры или форму исходного изделия. Но главное - можно легко применять в новых разработках или добавлять к уже имеющимся. Нам еще Луну-2 на Луну ронять... Но я все-таки не художник, не могу сам создать "художественный беспорядок". Чуть легче, когда есть какие-то штатные анимации, тогда можно при "аварии" беспорядочно сдвигать и вертеть анимирующиеся группы, внося визуальный хаос. Так я "ломал" в Лайке посадочную станцию, сдвигая раскрывающиеся панели. Но уже в Луне-9 я ломаю щупы хоть похожим образом, но хитрее, не беспорядочно, а так, чтобы они было похоже на то, как они на самом деле ломаются. А для полного развала хочется больше хаоса и меньше структурности Но лучше я, боюсь, не сформулирую...
2. Нет совсем не посадочную площадку. Снаружи все пусть будет как есть. То ,что я думаю, пока гипотеза. При виде изнутри видны меши, из которых состоит аппарат. Видны и текстуры на них. Если загрузить еще одну мешь, отдельную, плоскую или вогнутую, этакий "экран", на нее поместить (текстурой) ту самую посадочную панораму, и разместить это все достаточно близко, то при переключении на внутренний вид мы увидем прямо перед собой этот "экран" с панорамой. Проблемы две - чтобы это не уродски смотрелось снаружи тоже (можно ли "экран" сделать видимым только изнутри, а не снаружи? Наоборот вроде можно.) И вторая - меши (что внутри, что снаружи) видны только на каком-то удалении от камеры, поэтому "экран" не может быть слишком близко расположен. Труднее будет его "спрятать" при наружном виде.
Последний раз редактировалось: igel (00:56 10-11-2007), всего редактировалось 1 раз |
|
|
Thorton 87 EGP
Рейтинг канала: 3(36) Репутация: 12 Сообщения: 696 Откуда: Томск Зарегистрирован: 15.05.2006 |
|
Ну можно с экраном попробовать, только пришли мне эту самую панораму для опытов))
Еще хотел попросить, можно следующие версии выкладывать в рар-архиве?
UPD: Слепил Луну 10. http://rapidshare.com/files/68770610/Luna10.rar.html
Также добавил пример факела двигателя о котором я писал ранее.
Последний раз редактировалось: Thorton (19:22 10-11-2007), всего редактировалось 2 раз(а) |
|
|
igel 100 EGP
Рейтинг канала: 4(86) Репутация: 14 Сообщения: 755
Зарегистрирован: 12.06.2006 |
|
Ну вот, выходные прошли не зря. Новая альфа:
http://members.shaw.ca/atil8/Orbiter/Luna9/Luna9.v.A.zip
http://members.shaw.ca/atil8/Orbiter/Luna9/Luna9.v.A.rar
Так же как и в прошлый раз, рекомндую очистить каталог сценариев _Luna9 перед распаковкой.
Очень много всевозможных усовершенствований, обычно мелких, но приятных. Описываю по группам.
ВЕСЬ АДДОН:
- добавлено много "настоящих" (около)лунных сценариев, с сохраненными точками в 300 км, 1 км, 100 м.
- предлагаю rar- и zip- варианты (только для окончательного релиза, когда-нибудь, основным придется использовать зип, а то на западе рар практически не знают... кстати, а чем вообще рар слаще зипа?).
КТДУ:
- исправлен спорадический глюк с падением Орбитера при отделении астроотсека;
- исправлено положение выхлопов газовых сопел тангажа;
- реализовано автоматическое отделение АЛС по контакту щупа (только если щуп выпущен);
- поднастроены силы отстрела АЛС для лунного тяготения;
- реализован запрет выпуска щупа на Луне-10;
- реализован запрет наддува мешков в отсутствие радиоотсека (с баллонами);
- реализована налалогичная блоку Л команда Ctrl-J для управления переключением фокуса на АЛС после ее отделения от КТДУ (практические потребности при отладке делятся где-то 50/50, когда я хочу переключаться и когда не хочу);
- исправлено и реализовано сохранение-восстановление сценария практически для всего, что функционально на сегодняшний день. Кроме, по-прежнему, "анимаций в процессе", это на будущее.
АЛС-9
- реализована внутренняя камера с углом установки очень похожим на "живой" телефотометр, только "озираться" надо мышкой, вручную;
- поднастроены силы отстрела мешков для лунного тяготения;
- ликвидирована отладочная клавиша наддува мешков (это делается КТДУ);
- улучшена реализация таймера, он стал более вербальным и релевантным;
- улучшено сохранение/восстановление сценария, в него теперь попадает меньше умолчательных и нерелевантных записей;
АЛС-10
- подключена правильная мешь - спасибо!
- реализован демо-сценарий (на околоземной орбите);
- реализована внутренняя камера с симпатичным видом назад, в сторону КТДУ.
Список того, что еще не сделано, заметно сократился. Вот примерный список:
ВЕСЬ АДДОН:
- для Молнии и блока Л подобрать правильное стартовое время поближе к историческим датам, и сделать "долетные" сценарии;
- реализовать сохранение/восстановление промежуточных фаз анимаций;
КТДУ
- автоматическая циклограмма запуска-наддува-разделения;
- автопилот посадки
- автопилот коррекции
- экранные аннотации, защита от дурака и прочий визуальный сервис;
- Частицы-текстуры выхлопов, пример в прошлой ссылке был просто отличный, спасибо!
АЛС-9
- попробовать вид панорамы изнутри (сама панорама есть, например, вот здесь: http://www.donaldedavis.com/BIGPUB/LUNANINE.jpg)
МЕШКИ
- поправить: при восстановлении сценария с уже начавшейся анимацией сдутия мешки часто подпрыгивают. Возможно, правильное восстановление промежуточных фаз анимаций вылечит это само.
АЛС-10
- Интернационал... В принципе, обойти "исключительность" звука можно и текстом сценария, я сумею. А как насчет ПС-1? Тоже надо!
ОБЛОМОК
- правильно сохранить-восстановить физику, на случай разрушения в полете;
- сделать и добавить меши обобщенных обломков;
- сделать дымогенерацию динамической: больше в полете, меньше на земле, добавить зависимость дыма от веса, а на Луне вообще не надо дыма... а надо ли что-нибудь?
- поиграться с внутреними камерами.
В общем, работы еще хватит. Из оставшегося самый большой технический риск (неизвестность и сложность) представляет автопилот коррекции. Посадку после Армадилло делать легко будет, циклограмму тоже. Стартовое время подобрать... ну, это только терпение нужно . Ну а всякие (аудио)визуальные расширения рискованы только трудоемкостью - их можно прерывать в любой момент и по любой причине, ибо они все-таки не обязательны.
|
|
|
Konsni 61 EGP
Рейтинг канала: 2(10) Репутация: 2 Сообщения: 119
Зарегистрирован: 31.10.2007 |
|
Уважаемый Igel, Вы не могли бы записать встроенным в Орбитер playback-ом посадку Вашей Луны-9 для сценария, где она находится на высоте 140 км? Хочется посмотреть режимы работы двигателя... Никак не получается мягко приземлиться, топливо кончается при вертикальной скорости 300-400 м/с. С посадкой с высоты 1 км никаких проблем.
|
|
|
igel 100 EGP
Рейтинг канала: 4(86) Репутация: 14 Сообщения: 755
Зарегистрирован: 12.06.2006 |
|
Записать смогу только вечером, но сначала попробую догадаться, в чем может быть проблема. Включать двигатель на полный мах надо на высоте 70 км. Одноврменно с этим нужно клавишей J (двумя нажатиями) сбросить астро- и радиоотсеки. Они в сумме 300 кило весят, и с ними нет никакой возможности мягко сесть, поэтому их нужно сбрасывать как можно раньше. Да, мешки нужно наддуть до сброса - потом не наддуются, баллоны находятся на радиоотсеке.
Когда скорость упадет где-то до 100-70 м/с или меньше (смотря по высоте), можно (скорее, нужно) выключить центральную камеру клавишей Е. А то у нее такая тяговооруженность получается, что управляться с ней нереально, чуть что - и подпрыгнул. Даже и потом то и дело приходится выключать оставшиеся 4 камеры, а то скорость падает до нуля слишком рано.
Посадочные щупы по-правильному надо выпускать после отключения основной камеры (а то сгорят). У меня это (пока ) не реализовано, можно выпустить раньше, чтобы не забыть. Без щупа станция сама не отделится, придется отделять вручную, J.
В таком режиме топлива должно хватать с солидным запасом. Его "историческая" заливка учитывает, помимо гарантийного запаса, еще 6-секундную коррекцию (которой у нас пока нет), плюс гиперболический подлет, который заметно быстрее нашего эллиптического. Когда мы все это реализуем, ручная посадка усложнится
|
|
|
Konsni 61 EGP
Рейтинг канала: 2(10) Репутация: 2 Сообщения: 119
Зарегистрирован: 31.10.2007 |
|
Спасибо за помощь, отсеки-то я не сбрасывал... Попробуем.
добавлено спустя 34 минуты:
...Ура! Получается! Спасибо большое.
Последний раз редактировалось: Konsni (19:44 12-11-2007), всего редактировалось 1 раз |
|
|
Thorton 87 EGP
Рейтинг канала: 3(36) Репутация: 12 Сообщения: 696 Откуда: Томск Зарегистрирован: 15.05.2006 |
|
Пока не тестил, но уже появились некоторые мысли
Панораму явно придется редактировать в фотошопе, но вот мне вспомнилось, что можно в Орбитере запрещать замедление/ускорение времени, может и с FOV таков можно проделать, например для вида внутри установить его равным 40 без права изменения пользователем, но надо помнить что камеру можно двигать не только влево-вправо, но и еще вверх-вниз, вот как с этим бороться я не знаю. Сначала планировал спроецировать панораму на полусферу, но тут она сильно вытянутая, так что пока буду думать...
igel : |
... кстати, а чем вообще рар слаще зипа?
|
рар сжимает лучше, что для меня с моим инетом очень важно.
igel : |
а на Луне вообще не надо дыма...
|
Не на Луне тоже дым надо, там же пыль, можно еще такую фичу сделать: после удара старая мешь удаляется и подгружается мешь небольшого кратера, если идея понравится - отпишись, чтробы мне кратер нарисовать.
igel : |
Интернационал... В принципе, обойти "исключительность" звука можно и текстом сценария, я сумею.
|
Чесно говоря не врубился , это как?
|
|
|
igel 100 EGP
Рейтинг канала: 4(86) Репутация: 14 Сообщения: 755
Зарегистрирован: 12.06.2006 |
|
Если не получится (а я боюсь, что не получится) вставить панораму в обычный "голый" вид изнутри, можно поместить ее на "приборную панель". Можно даже в вирутальный кокпит, но это, боюсь, уже оверкилл . FOV программно я думал фиксировать еще в Армадилло, но безуспешно, ничего не нашел в API.
Ну, разница между раром и зипом не такая уж существенная по сжатию... а вот если я буду делать вариант без мешей и текстур (а они-то уже устаканились и меняются крайне редко) - вот это будет капитально! А уже безмешный набор жать раром.
Про пыль - это хорошее напоминание. В самом деле, пыли там до фига. Единственное - она оседает быстрее, чем успеешь "мяу" сказать. Так что для ее моделирования мои нынешние "дымные руины" совершенно не годятся (что я, собственно, и имел в виду под "дымом") - зато хорошо подходят взрывные процессы, наподобие того, что у меня используется при очень быстром ударе. То есть, мгновенная короткая генерация не-светящихся (в отличие от взрыва) частиц, очень быстрый (но не настолько стремительный как при взрыве) разлет - и снова все спокойно, остается только... вот тут уже возможны варианты, что остается. Если аппарат не разбился и скачет - он должен генерить облако пыли при каждом касании. Если лег - пусть лежит. Если разбился - можно подменить его на "обобщенный обломок". Если "разбился со взрывом" - подменить либо тем же обломком, либо обломком в свежем кратере, либо одним только кратером. Интересно! Пожалуй, стоит поработать в этом направлении.
А про звук - это просто . Я напишу в сценарии что-нибудь интригующее, вроде "когда подойдет время отделять спутник - не забудьте включить динамики и убедитесь, что звуковой аддон активирован". Кто знает - сразу догадается, кто нет - будет заинтригован, но главное - и тех и других такая формулировка сразу предупредит, что ВО ВСЕХ ОСТАЛЬНЫХ СЛУЧАЯХ звуковой аддон не нужен, ибо звуков там нет. Что и требовалось...
|
|
|
Bloodest 155 EGP
Рейтинг канала: 3(40) Репутация: 18 Сообщения: 944 Откуда: Питерские мы Зарегистрирован: 07.10.2004 |
|
igel : |
Если не получится (а я боюсь, что не получится) вставить панораму в обычный "голый" вид изнутри, можно поместить ее на "приборную панель".
|
Я тут со своми делами практически прекратил разработку своих аддонов для Н1 - Марс 75 и ЛК 3.
Дык наработок много, потрачено около 2ух лет . Хочется хоть что-то увидеть в живую - вот решил "сдать" часть кода по представленным в посте вопросам, а именно фотокамера на неподвижных севших на поверхность зондах. Наработано - собственно фотокамера, иммитирующая советскую теле-фото- аппаратуру и
Значится основа такова - "кабина" это аттачмент, который может программно вращаться относительно спутника (это и управлялка и телефото аппарат) аттачмент - тогда незя было программно изменять направление взгляда, панель управления - плоская, состоит из трех панелей
- Управления ,минимум, со "строчкой" редактирования, в которую вводятся команды.
Нпр "PHOTO 6 0 1 0" Где, понятно, PHOTO - команда на снимок, аргументы, последовательно выдержка, апертура, направление, и сфетофильтр (съемка ведется на ч/б пленку - смена фильтров позволяет получить цвет). Введя команду, получаем задержку - время передачи сигнала (для Марса актуально), затем вступает в действие приведенный ниже код.
- Просмотра - большой экран для просмотра "снимков" с кнопками перемещения по снимкам и объединения для получения цвета.
- Пустой экран (полностью прозрачная картинка панели), через который осуществляется снимок (недоступна для переключения на нее аператором, только программно).
Код совершает командный разворот аттачмента, изменение аппертуры, подавление отображения ХУДа, переключается на третью панель.
Далее, гы, имиитирует нажатие alt+ PrintScreen, в результате картинка Орбитера получается в буфере обмена. Данная операция через иммитацию нажатия клавиш тем предподчтительнее перед считывания рабочей области через GDI, что не во всех системах возможно считывание DX экрана через GDI - получается черный квадрат.
Затем буфер переводится на внутреннию БМП панель Орбитера, с которой можно производить уже силами GDI графичесие операции.
1)Сразу (при переносе из бувера обмена) она обрезается - отсекаются - те части где отображаются оставшиеся, независимые от ХУДа цифири, как то - Уровень топлива и Дата.
2) Наносятся служебные марки прицела и линейка цвета.
3)Применяется светофильтр, чувствительность фотопленки + выдержка,картинка "отбеливается" в ч/б. На марсинских телефото не было управления диафрагмой.
4) Наводятся пмехи
6) Картинка конвертится в БМП файл и покладывается в папку Орбитера. потом с нею мона делать что хочешь...
Следующим постом код.
#pragma warning(disable: 4275) // сообщение о принудительном експортировании
Заг файлец - кусочек
Код: |
#ifndef __MARS75_VZOR_H_Module
#define __MARS75_VZOR_H_Module
#define _WIN32_WINNT 0x500
#include "..\common\quaternion.h"
#include "..\common\supp.h"
//#define STRICT
#include "..\common\orbitersdk.h"
#include "..\common\ATT_U.h"
#include "..\common\ROOT.h"
class Mars75_VZOR_BM_PHOTO
{
public:
int status;// 0-пустой 1-к съемке 2 - съемка 3- проявка 4-хранение 5- передача 6- передан
double MJD;// время съемки
double MJDP;// время передачи
SURFHANDLE surfp;//Переданная картинка
SURFHANDLE surfpi;//Снятая картинка
int ostr;//Текущая строка передачи
VECTOR3 Data;//Положение аттачмента для 1-2 этопов
VECTOR3 Data2;
int sbros;//Защита от одновременного снижения тайм выркпа
}; |
Прога
Код: |
#include "M75_VZOR.h"
#include <stdio.h>
#include "..\common\supp.h"
#include <Wingdi.h>
#include <stdlib.h>
#include <time.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <io.h>
#include <stdio.h>
......
//// PHOTO
bool bIsDropp = false;
for(int i=0; i<32; i++)//Всего до 32 картинок, находящихся на разных стадиях
{
switch(BM.PHS[i].status)//Операции от стадии картинки
{
case 0: break;//Не снятая часть
case 1: //Подготовка
{
if( (BM.PHS[i].MJD-mjd)*24.*3600./simdt < 3 && !bIsDropp)//меньше 3ех циклов сима до сьемкии, нет сброса снижаем тайм варп
{
double warp = oapiGetTimeAcceleration ();
if(warp > 1)
{
oapiSetTimeAcceleration (warp/10);
bIsDropp = true; // блокирует повторные снижения от других снимков
}
}
if(mjd > BM.PHS[i].MJD ) // Момент съемки
{
oapiSetPanel (1);//Пустая панель
oapiSetHUDMode (HUD_NONE);//Выкл Худ
double ds = 0;
oapiCameraSetAperture (30.*RAD);//Стандартная апертура
if(BM.PHS[i].Data.z == 1 ) oapiCameraSetAperture (90.*RAD); //Рыбий глаз
if(BM.PHS[i].Data.z == 2 ) ds = 0.05;//Не помню, см SetAttachmentParams
if(BM.PHS[i].Data.z == 3 ) ds = -0.05;
BM.PHS[i].status = 2;//Следующая операция-стадия
VECTOR3 dir =_V(0,0,1);//Направления аттачмента
VECTOR3 rot =_V(1,0,0);
VECTOR3 adir,arot;
double a = -45;
if(BM.PHS[i].Data.x == 1) a= -90;
if(BM.PHS[i].Data.x == 2) a= 0;
RotateVector(dir,_V(90*RAD, 0, a*RAD),adir);//Поворачивем аттачмент по команде
RotateVector(rot,_V(90*RAD, 0, a*RAD),arot);
SetAttachmentParams (attachment ,_V(ds, 0, 0),adir,arot);
}
break;
}
case 2://Частичное повторение первой - не всегда отрабатывает за 1 ход сима + съемка
{
VECTOR3 dir =_V(0,0,1);
VECTOR3 rot =_V(1,0,0);
VECTOR3 adir,arot;
double a = -45;
double ds = 0;
if(BM.PHS[i].Data.z == 2 ) ds = 0.05;
if(BM.PHS[i].Data.z == 3 ) ds = -0.05;
if(BM.PHS[i].Data.x == 1) a= -90;
if(BM.PHS[i].Data.x == 2) a= 0;
RotateVector(dir,_V(90*RAD, 0, a*RAD),adir);
RotateVector(rot,_V(90*RAD, 0, a*RAD),arot);
SetAttachmentParams (attachment ,_V(ds, 0, 0),adir,arot);
keybd_event(VK_MENU,0,0,0);//Зажимаем альт
keybd_event(VK_SNAPSHOT,0,0,0);//Зажимаем PrtScr
keybd_event(VK_SNAPSHOT,0,KEYEVENTF_KEYUP,0);//Отпускаем
keybd_event(VK_MENU,0,KEYEVENTF_KEYUP,0);//Отпускаем
oapiCameraSetAperture (30.*RAD);//Апертура в норму
BM.PHS[i].MJD = mjd;//Считываем дату снимка
BM.PHS[i].status = 3;break;//Следующий шаг
}
case 3://Читаем клипборд и наносим прицелы, шкалу цвета, дату съемки
{
oapiSetPanel (0);//В комндную панель
BOOL test = OpenClipboard(NULL);//Открыть клипборд
HBITMAP hbmp = NULL;//Картинка
hbmp = (HBITMAP)GetClipboardData(CF_BITMAP);//Читаем картинку
SURFHANDLE temp = oapiCreateSurface (hbmp, false);//временная панель под картинку
CloseClipboard();//Закрываем клипборд
BM.PHS[i].surfpi = oapiCreateSurface (800, 800);//Панель под картинку, где она будет преобразовываться
HDC hDC4 = oapiGetDC (BM.PHS[i].surfpi);//открываем контекст панели хранения
HDC hDC3 = oapiGetDC (temp); //контекст временный
BitBlt(hDC4,0,0,800,800,hDC3,176,32,SRCCOPY); //копируем в хранилище картинку, обрезая, ващето финт ушами - во временной панели ее нет, но работает...
oapiReleaseDC (temp, hDC3);oapiDestroySurface (temp);//Грохаем временную
//Пошли малевать служебку
SelectObject(hDC4, GetStockObject(BLACK_BRUSH));
MoveToEx(hDC4, 390, 400, (LPPOINT) NULL);
LineTo (hDC4, 410, 400);
MoveToEx(hDC4, 400, 390, (LPPOINT) NULL);
LineTo (hDC4, 400, 410);
for(int xx=1; xx<16;xx ++)
{
MoveToEx(hDC4, xx*50-5, 50, (LPPOINT) NULL);
LineTo (hDC4, xx*50+6, 50 );
MoveToEx(hDC4, xx*50 , 50-5, (LPPOINT) NULL);
LineTo (hDC4, xx*50 , 50+6);
MoveToEx(hDC4, 50, xx*50-5, (LPPOINT) NULL);
LineTo (hDC4, 50, xx*50+6 );
MoveToEx(hDC4, 50-5, xx*50, (LPPOINT) NULL);
LineTo (hDC4, 50+6, xx*50);
}
for( xx=1; xx<8;xx ++)
{
for(int yy=1; yy<8;yy ++)
{
MoveToEx(hDC4, xx*100-5,yy*100, (LPPOINT) NULL);
LineTo (hDC4, xx*100+6,yy*100);
MoveToEx(hDC4, xx*100 ,yy*100-5, (LPPOINT) NULL);
LineTo (hDC4, xx*100 ,yy*100+6);
}
}
SelectObject(hDC4,GetStockObject(DC_PEN));
SelectObject(hDC4,GetStockObject(DC_BRUSH));
for( xx=0; xx<25;xx ++)
{
SetDCPenColor(hDC4,RGB(xx*10,xx*10,xx*10));
SetDCBrushColor(hDC4,RGB(xx*10,xx*10,xx*10));
Rectangle(hDC4,10*xx,0,10*xx+10,20);
}
SetDCPenColor(hDC4,RGB(255,0,0));
SetDCBrushColor(hDC4,RGB(255,0,0));
Rectangle(hDC4,260,0,260+10,20);
SetDCPenColor(hDC4,RGB(0,255,0));
SetDCBrushColor(hDC4,RGB(0,255,0));
Rectangle(hDC4,270,0,270+10,20);
SetDCPenColor(hDC4,RGB(0,0,255));
SetDCBrushColor(hDC4,RGB(0,0,255));
Rectangle(hDC4,280,0,280+10,20);
// надпись с параметрами съемки
SetDCPenColor(hDC4,RGB(0,0,0));
SetDCBrushColor(hDC4,RGB(0,0,0));
Rectangle(hDC4,300,0,600,20);
SetTextColor (hDC4, RGB(250, 250, 250));
SetBkMode (hDC4, TRANSPARENT);
SelectObject (hDC4, g_Param.hFont[0]);
char buff[64];
sprintf(buff,"Кадр %d Время %f Парам %1d %1d %1d ",i,BM.PHS[i].MJD,
(int)BM.PHS[i].Data.x,
(int)BM.PHS[i].Data.y,
(int)BM.PHS[i].Data.z);
TextOut (hDC4, 305, 3, buff, strlen(buff));
oapiReleaseDC (BM.PHS[i].surfpi, hDC4);
//закраска отображаемой приемной поверхности, хранится 2 картинки - исходная то что попало на пленку surfpi и преобразованная surfp - то что приняли на Земле. Те след циклы идут по отдельной команде - принять картинку при лудшем прохождени сигнала.
BM.PHS[i].surfp = oapiCreateSurface (800, 800);
hDC4 = oapiGetDC (BM.PHS[i].surfp);
SelectObject(hDC4,GetStockObject(DC_PEN));
SelectObject(hDC4,GetStockObject(DC_BRUSH));
SetDCPenColor(hDC4,RGB(100,0,0));
SetDCBrushColor(hDC4,RGB(10,0,0));
Rectangle(hDC4,0,0,800,800);
oapiReleaseDC (BM.PHS[i].surfp, hDC4);
BM.PHS[i].ostr = 800;
BM.PHS[i].status = 4;
BM.PHS[i].sbros =0;
srand( (unsigned)time( NULL ) );//Готовим рандомизатор для помех.
break;
}
case 4:break;//Чето было - выбросил
case 5://Прием
{
if( (BM.PHS[i].MJDP-mjd)*24.*3600./simdt < 3 && !bIsDropp)//Дросселируем тайм варп
{
double warp = oapiGetTimeAcceleration ();
if(warp > 100)
{
oapiSetTimeAcceleration (warp/10);
bIsDropp = true; // блокирует повторные снижения от других картинок
}
}
if(mjd > BM.PHS[i].MJDP ) //Момент передачи
{
HDC hDC4 = oapiGetDC (BM.PHS[i].surfp);
HDC hDC41 = oapiGetDC (BM.PHS[i].surfpi);
int end_str = 800 - (int)((mjd - BM.PHS[i].MJDP)*1800.*24.);//Дроссель скорости передачи картинки 2 строки в минуту
if(end_str < 0) end_str=0;//Защита
for(; BM.PHS[i].ostr >= end_str; BM.PHS[i].ostr--)//текущая передаваемая строка
{
for(int y=0; y<800; y++)
{
unsigned long px =GetPixel(hDC41,BM.PHS[i].ostr,y);// Читаем пиксел
//Далее ч/б преобразование в зависимости от светофильтра и приложением чувствительности пленки к цветам.
int c =0;
if (BM.PHS[i].Data.y == 0) c =(GetRValue(px)*1.07+GetGValue(px)*1.006+GetBValue(px)*0.924)/3.;
if (BM.PHS[i].Data.y == 1) c =(GetBValue(px)*0.924);
if (BM.PHS[i].Data.y == 2) c =(GetGValue(px)*1.006);
if (BM.PHS[i].Data.y == 3) c =(GetRValue(px)*1.07);
if (BM.PHS[i].Data.y == 4) c =(GetRValue(px)*1.07+GetGValue(px)*1.006/2.)/1.5;
//Далее Чувствительность пленки и выдержка
double d55 = (double) c / 255.;
double dmin =0.0225, dmax = 0.90, dmn=1.0;
//Вадержка 1/150 контрастность 1,6
if (BM.PHS[i].Data2.x == 50)//Выдержка 1/50
{
dmin =0.0075, dmax = 0.30; dmn=3.;
}
c =((int)(((double)c)/2.*dmn))*2;
if(d55 < dmin ) c=0;
if(d55 > dmax ) c= 254;
if(c>229) c= 254;
else if(c<25) c=25;//Степень засветки 0,1 - засветка пленки радиацией в зависимости от времени перелета- блеклый снимок - для теста фиксирована для 9 мес перелета к Марсу
else c+=25;
//Помехи :)
double dd = (double)rand()/(double)RAND_MAX;//Случайное число
double err_level = 0.9;//Максимальная стартовая помеха
if( angle2Earth*DEG < 60) err_level = 1e-4; //Земля выше 60 гр над горизонтом
else if( angle2Earth*DEG < 70) err_level = 1e-3;
else if( angle2Earth*DEG < 80) err_level = 1e-2;
if( dd< err_level && BM.PHS[i].sbros <=0) //Рандом попал в помеху, нет продолжения помехи по строке картинки
{
BM.PHS[i].sbros = (int)(1.e4*err_level*(double)rand()/(double)RAND_MAX);//Генерируем условие продолжения ошибки по строке- число пикселов которые закрасит помеха
}
if(BM.PHS[i].sbros >0)
{
c=0;//помеха
BM.PHS[i].sbros --;//Счетчик пикселов
}
if (BM.PHS[i].Data.y == 5) SetPixel(hDC4,BM.PHS[i].ostr,y,RGB(GetRValue(px),GetGValue(px)*0.95,GetBValue(px)*0.9));//Установка помехи в картинку - серо-циановая линия - для тесту шоб мона было отличить
else SetPixel(hDC4,BM.PHS[i].ostr,y,RGB(c,c,c));//Без помехи
}
oapiReleaseDC (BM.PHS[i].surfp, hDC4);
oapiReleaseDC (BM.PHS[i].surfpi, hDC41);
if(BM.PHS[i].ostr < 0) //обработка окончена
{
char tmps[45];
sprintf(tmps,"PHOTO\\photo%d.bmp",i);//Имя БМПшки
Surf2BMP(BM.PHS[i].surfp,_R(0,0,800,800),tmps);//Сохранение в БМП файл - см GDI BMP в MSDN на сайте мелкософта - там есть код
BM.PHS[i].status = 6;//Финиш!
}
}//if(mjd > BM.PHS[i].MJDP )
}//case 4:
break;
} //switch(BM.PHS[i].status)
} //for(int i=0; i<32; i++)
|
Последний раз редактировалось: Bloodest (10:41 13-11-2007), всего редактировалось 2 раз(а) |
|
|
Bloodest 155 EGP
Рейтинг канала: 3(40) Репутация: 18 Сообщения: 944 Откуда: Питерские мы Зарегистрирован: 07.10.2004 |
|
Ааа вспомнил
Код: |
if(BM.PHS[i].Data.z == 2 ) ds = 0.05;//Не помню, см SetAttachmentParams
if(BM.PHS[i].Data.z == 3 ) ds = -0.05; |
Эт для стрео снимков - развлекался - снимок чуть левее и чуть правее потом в фотошопе подрашивыешь Левый и правый в красно-синий и центр без изменения - совмещаешь в один - и сморкаеши в стрео-очках полный отпад - крутое стерео получается...
|
|
|
Thorton 87 EGP
Рейтинг канала: 3(36) Репутация: 12 Сообщения: 696 Откуда: Томск Зарегистрирован: 15.05.2006 |
|
igel : |
Ну, разница между раром и зипом не такая уж существенная по сжатию... а вот если я буду делать вариант без мешей и текстур (а они-то уже устаканились и меняются крайне редко) - вот это будет капитально! А уже безмешный набор жать раром.
|
Разница существенная, вот вчера в муках докачал Shuttle Fleet 3.9.4, пережал из зипа в рар, и разница получилась почти 10 метров.
Немного помучал панораму, посмотри свежим взглядом, сравни с оригиналом и скажи, видно ли шде-нибудь явные следы того, что некоторые места там замазаны, я то знаю куда смотреть нужно, поэтому мне трудно сказать сильно они заметны или нет. Вообщем нужен свежий взгляд
http://rapidshare.com/files/69452830/LUNANINE_edit_web.jpg.html
|
|
|
igel 100 EGP
Рейтинг канала: 4(86) Репутация: 14 Сообщения: 755
Зарегистрирован: 12.06.2006 |
|
Bloodest,
А-а-а-а! Нет слов! Спасибо! Я только издалека примеривался, а тут такое... Все сохранил в файл, чтобы потом по форуму не рыться, буду на досуге внимательно изучать. Тут же не только Луной-9 пахнет - у меня где-то в чуть более далекой перспективе Луна-3 маячит... Вот только опять разбухание проекта, пресловутый scope creep... Ладно, выйдем на глиссаду - будем дергаться, сечйас все равно еще рано
Thorton,
Посмотрел, только сохранить не смог - рапидные скрипты с фоксом не очень дружат. Ну да из кэша всегда можно выдрать не проблема. Смотрится панорама вполне гладенько. Я, правда, даже не уверен - а надо ли ее выглаживать? Может, наоборот, делать в исходном виде? Все ж знают, откуда она и из каких лет. Собственно, даже та, что я послал, была уже синтезирована из двух, под разными углами солнца (на одной панораме не получались одновременно и края, и центр). Но, конечно, в обработанном виде рассмотреть можно куда больше!
|
|
|
Thorton 87 EGP
Рейтинг канала: 3(36) Репутация: 12 Сообщения: 696 Откуда: Томск Зарегистрирован: 15.05.2006 |
|
Вот нарисовал кратеры: http://rapidshare.com/files/69682651/craters_wreck.rar.html
crater&wreck- большой кратер с останками тормозного блока.
small_crater - небольшие кратеры, ими можно заменить меши астроотсека и радарного отсека после столкновения с луной.
crater&lander - небольшой ратер с обломками лендера.
|
|
|
igel 100 EGP
Рейтинг канала: 4(86) Репутация: 14 Сообщения: 755
Зарегистрирован: 12.06.2006 |
|
Посмотрел. Годится! Текстуры, конечно, выделяются на фоне унылой серой безтекстурной равнины, но ничего страшного. Обломки смотрятся очень убедительно . Надо будет попробовать загрузить кратер без текстуры и посмотреть - иногда уменьшение детализации дает положительный эффект (хотя в данном случае я его не особо жду).
Вообще у меня на этой неделе получился тайм-аут - мало свободного времени за компом. К следующей неделе проектирую общую циклограмму и автопилот, пока просто на бумаге. Ничего сложного, особенно с лайковыми наработками.
|
|
|
Bloodest 155 EGP
Рейтинг канала: 3(40) Репутация: 18 Сообщения: 944 Откуда: Питерские мы Зарегистрирован: 07.10.2004 |
|
Опять вклинюсь, а меши Вы грузите как часть корабля?
Удобно - разбился/сел где угодно заменил меш и готово, но, тогда есть трабла - Орбитер формирует внешний вид из двух сцен - корабля и пространства окружения и освещение в сценах - разное - пластинка выложенная как база и она же, пристыкованная к кораблю будет иметь разный колер.
А так, чтобы закончить тему посадочной съемки, с моей стороны.
Концепция такова - аттачмент это не только фотоаппарат, но и астровизир и собственно рабочее место земного оператора. Все это исходя из возможностей Орбитера, аддонов МФД, стремления к максимальному реализму.
Основная панель управления
http://koavia.com/n1/aa3.jpg
Слева-направо и сверху вниз
- Три МФД, принудительно отключаются если основная антенна не ориентирована на Землю (в пределе если к тому же ЦУП на обратной стороне Земли)
- Экранчик даты, таймварпа и пр. (для экономии места)
-Большой экран формирования команд управления (аналог, по семантике, СМ ЭВМ).
- Круглое окошко наружу - читерское - для отладки.
- Маленький экран - команды для обработки снимков ( в проекте счас не работает)
- Кнопка УСТ - устанавливает угловую ориентацию аттачмента как астровизира в предварительный формирователь.
- Кнопка сброс - сброс данных предварительного формирователя
- Предварительный формирователь - служит для формирования сложных, по сотаву данных, команд. ПРГ - номер команды - собственно что будет делать, блок А - дата выполнения команды кораблем и 3 трехаргументных блока данных. Нажатие УСТ - заполнит блоки Б и В углами положения астровизира.
- Кнопка MJD - заполняет блок А датой.
- Предварительный формирователь даты ( небольшой спец ориентированный калькулятор, например - дата - текущая полночь плюс столько-то часов, минут, сек или текущее время + столько-то часов,,,)
-Кнопка УСТ (2) - пререводит данные из предварительного формирователя в экран формирования команд.
- Кнопка ПЕРЕД передача сформированного блока команд на корабль.
- Передатчик с цифирями Уровня принимаемого с корабля сигнала (оценка дизориентации направленной антенны), Ожидание - проход сигнала туда-сюда, Запаздывание - проход сигнала туда.
- Прием дб табло - прием сигнала с оринтированной и неориентированной антенн корабля
- Табло состояния корабля - через нериентированную антенну - состояние выполнения команд и запасы энергии и топлива основных систем.
Допстим нужно провести корекцию.
- Отдаем команду на оринтацию основной антенны - загораются МФД.
- высчитываем нужные параметры на МФД ( свойства корабля копируются на аттачмент).
- Вращаем аттачмент - совмещаем прицел на МФД.
- УСТом копируем угловые параметры.
- переводим их на формирователь команд получаем первую команду.
- списываем с МФД время импульса - получаем вторую команду.
(Все это соотносим с временем прохождения сигнала и разносом по времени необходимым для ориентации первой командой).
- Передаем.
- Контролируем передачу и выполнение по табло состояния корабля.
Фото тож самое своя команда с датой съемки и блоком аргументов - параметров настройки. Передача снимка - тож самое - номер снимка и дата передачи.
Экран просмотра снимков
http://koavia.com/n1/photopanel.jpg
Гы теперь главное - как получена такая афуфенная (да, нескромный я) реалистичность поверхности.
Вот вид снаружи
http://koavia.com/n1/photoscene.jpg
Кажется что поверхность вогнутная и размазанная - вогутая - нет - это плоский круг из 36 секторов по которым специально размазана текстура, так что при просмоте из центра, фотокамерой, размазанность складывается в правильную картинку.
Как сделано
- Взята круговая панорама от MER-а ( с хвоста видена его колея и часть СБ) - обработана - отрезано небо, разрезана на 36 частей.
- Построен сектор (1/36 круга) длинной 400 м, разбит на дуговые, поперечные взгляду, сектора (8 штук в логарифмической прогрессии - чем дальше тем больше)
- Преобразованы координаты UV наложения тектуры - исходную панораму мы видим вертикально - строим рисунок - точка взгляда - вертикальная панорама - поверхность сектора - линия от (.) взгляда до точки на секторе, где меняем UV отсекает часть панрамы - эта часть и есть UV - правим его в максе для каждой точки сектора. Смотреть результат мона прямо в максе. Дальше остается только размножить сектора и применить к каждому свою текстуру.
Все.
Последний раз редактировалось: Bloodest (10:04 16-11-2007), всего редактировалось 1 раз |
|
|
|
|
|
Канал Orbiter: «Луна-9-10: разработка.» |
|
К списку каналов | Наверх страницы |
Цитата не в тему: Нет неразрешимых проблем, есть неприемлемые решения. (Pastor Schlagge)
|
» Луна-9-10: разработка. | страница 3 |
|