Скрипты для Stellarium'а
26 комментариев 1 августа 2012, 22:25 • Stellarium
В конце этой недели я планирую выпустить очередную тестовую версию Stellarium'а для того, чтобы поклонники этого планетария могли проверить что мы в него добавили и насколько корректро это новое работает. В предыдущем месяце в ядре Stellarium'а мы практически не копались — так, исправляли ошибки и делали кое-какие косметические улучшения, до которых дошли руки. Среди таких вот косметических улучшений оказалось расширение набора сценариев (скриптов), которые поставляются в одном пакете со Stellarium'ом. Планировал я это сделать ещё к предыдущему релизу, но тогда до них руки так и не дошли, зато в следующем они будут.
Итак, пройдусь по всем добавленным на этот момент новым сценариям.
Тройной восход и закат на Меркурии — этот сценарий демонстирует один довольно интересных эффект на Меркурии, который получается благодаря причудам вращения планеты вокруг оси и по орбите — в определенных местах на планете Солнце восходит и заходит три раза в течении меркурианского дня.
Двойное затмение на Деймосе в 2017 и в 2031 годах — два сценария, которые демонстрируют достаточно редкие двойные затмения Солнца, которые могут происходить на спутнике Марса — Деймосе.
Затмение 10 января 2068 года с горы Олимп — этот сценарий позволит вам оказаться на самой большой вершине Солнечной системы — горе Олимп — и полюбоваться марсианским солнечным затмением.
Покрытие Земли и Юпитера в 2048 году — сами по себе покрытия Земли и Юпитера Фобосом не редкость для наблюдателя с Марса, но вот чтобы оба небесных тела оказались покрыты в течении одного дня — это действительно редкое событие!
Пятикратное затмение на Деймосе в 2027 году — этот сценарий демонстрирует поочередно серию из пяти затмений — сперва Фобос дважды затмевает Солнце, потом Солнце и Фобос оказываются за Марсом и под финал Фобос успевает попасть в тень Марса ещё раз!
События Солнечной системы — в этом сценарии в режиме хранителя экрана показано 171 различное интересное астрономическое событие, которое либо видно из Солнечной системы, либо происходит с телами оной.
Тур по созвездиям — этот сценарий будет интересным новичкам в мире астрономии, так как он в виде своеобразной экскурсии проводит зрителя по всем современным созвездиям.
Солнце с разных планет — а этот сценарий показывает как выглядит наше Солнышко с больших планет Солнечной системы и Плутона.
Прохождение Венеры — этот сценарий забросит вас в австралийский Сидней в недалёкое прошлое, чтобы посмотреть последнее в этом столетии прохождение Венеры по диску Солнца.
Если у кого-то появятся идеи относительно того, чтобы ещё такого интересного астрономического продемонстрировать или может остро не хватает каких-то функций в скриптовом движке Stellarium'а, то дайте нам знать — вполне возможно, что они появятся в следующей версии планетария.
John Doe • 3 августа 2012 г. в 17:50 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
ОК, как насчет виртуального тура на модную тему «Вселенная. Почуствуй себя ничтожеством»?)) Будет неплохо сочетаться с видеороликами, во множестве выложенными в Инет (на, ютьюб, в частности) и демонстрирующими относительные размеры небесных тел и звезд. Начиная со старушки-Земли и заканчивая гигантами и сверх-гигантами типа Бетельгейзе, Антаресом и т.п. Нельзя забыть также и ближайшие звезды (долететь к которым есть хоть какой-то шанс) — Альфу Центавра, например. Не забыть еще Шедар\Альфу Кассиопеи)) И тур по прочим знаменитым звездам. Соеденить бы это еще с аудиолекциями и презентациями ... (надеюсь, мечтать не вредно7).))
А парады планет? А знаменитые «явления» знаменитых комет — «вестников войн»?
Александр Вольф • 3 августа 2012 г. в 18:00 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
Первая часть предложения больше соответствует возможностям Celestia — у нас же планетарий, он физически не умеет «летать» к звёздам, а вот в Celestia такое есть.
За парады планет спасибо, это вполне себе хорошая идея для скрипта.
С кометами идея хороша, но пока её лучше не трогать — наши кометы хвостами ещё не обзавелись.
John Doe • 7 августа 2012 г. в 15:05 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
Не, не ... я имел ввиду не полеты к звездам, в том виде, в котором можно перемещаться между объектами виртуальной солнечной системы в Celestia. Я имел ввиду обычный показ перечисленных звезд на небе. Типа — «Вон, видишь вон ту звездочку на небе — это гигант ... класса, размером в ... раз больше нашего Солнца». И так по нарастающей, до вылезания глаз на лоб.)) Хотелось бы без привязки к конкретной дате, конечно ... чтоб в любой момент можно было сопоставить положение объектов в виртуальном планетарии и на небе. Ну, уж как получится!
Да, шорт побьери, надо пойти дальше — распространять виртуальный планетарий с подобными скриптами в виде комбинированного продукта — аудиовизуальных лекций. Навроде популярных лекций для любопытствующих и школьников. Как в свое время было в московском планетарии до его разгона.)
Александр Вольф • 7 августа 2012 г. в 17:17 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
Да, в таком виде это хорошая идея для сценария и она вполне реализуема для Stellarium'а.
В теории Stellarium умеет воспроизводить видео и аудио, но на практике очень многое упирается в драйвера на соответствующее оборудование, из-за чего аудио может воспроизводится только на 32-битных Windows (если речь идёт только о Windows-порте) на примерно 20% аудиокарточек.
John Doe • 8 августа 2012 г. в 14:36 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
Извините за назойливость любопытствующего. А не предусмотрена ли возможность в информации об объектах, всплывающей в окне Stellarium, при указании на оные, иметь ссылку, скажем, на внешние интернет-источники (Wikipedia и etс.), базы знаний (в онлайн или локальные, скачиваемые и подключаемые к Stellarium)?
Или смысла особого нет? Проще в браузере воспользоваться поиском? Просто копание в ссылках на страницах результатов поиска в поисковых системах иногда затягивается ... а тут, вроде как, компетентные люди могут дать ссылку на проверенную информацию.
Александр Вольф • 8 августа 2012 г. в 14:40 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
Нет, такой возможности нет и в ближайшем будущем не планируется. Когда-то такое обсуждали в команде разработчиков, но потом отложили в долгий ящик.
ivan • 8 сентября 2012 г. в 16:44 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
такой вопрос по стеллариуму: хочу иметь возможность расставлять произвольное количество геостационарных меток по небу. скажем, пометить положение солнца 1 сентября в 12 часов UTC (над 8.03 северной широты и 0.04 западной долготы), причем чтобы метку можно было нарисовать произвольного размера и цвета. соответственно, чтобы при перемещении точки наблюдения по земле эта метка смещалась по небу, оставаясь над заданными координатами земли.
это можно сделать как-то типа сценариями или вроде того?
Александр Вольф • 8 сентября 2012 г. в 17:01 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
Нет, такого Stellarium не умеет и сценариями такого точно не сделать. На вскидку я бы предположил написание плагина для расстановки меток.
ivan • 8 сентября 2012 г. в 23:09 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
а как писать плагин? нужно ставить среду разработки (какую?), писать по ихнему API, компилировать динамические библиотеки?
Александр Вольф • 8 сентября 2012 г. в 23:23 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
IDE можно использовать почти любую, но мы предпочитаем QtCreator. Плагины пишутся на C++ — причем можно делать как статические, так и динамические плагины. Подробности есть в нашей вики.
ivan • 9 сентября 2012 г. в 03:22 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
спасибо
Di • 20 февраля 2015 г. в 18:03 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
Здравствуйте, никто не подскажет литературы по созданию скриптов для stellarium?
Александр Вольф • 21 февраля 2015 г. в 01:38 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
специальной литературы по созданию скриптов в Stellarium'е нет, но есть документация разработчиков на сайте планетария, где написано как делать скрипты. Если что-то не получается, то нужна какая-то конкретика, иначе помочь проблематично.
Di • 26 февраля 2015 г. в 05:01 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
Спасибо большое) Например, как в zodiac сделать задержку на каждом из созвездий? И можно как-нибудь качественно сделать захват видео из stellarium'а, чтобы получался как видеофильм?
P.s. буду ОЧЕНЬ благодарна за ответ!
Александр Вольф • 26 февраля 2015 г. в 11:01 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
Задержка делается при помощи функции core.wait ();, где в качестве параметра указывается время задержки в миллисекундах. Качественный захват видео — один из вариантов — делать скриншоты (прямо из скрипта) и потом из них собрать ролик.
Di • 4 марта 2015 г. в 16:06 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
Спасибо))
А не подскажите еще одну вещь? Как задать положение созвездия на экране? И его размер. Мне нужно чтобы оно было в центре экрана.
Александр Вольф • 4 марта 2015 г. в 22:29 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
Это всё делается масштабированием. В качестве примера можете взять скрипт Constellations Tour — он довольно короткий и простой для понимания.
Di • 22 апреля 2015 г. в 17:29 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
Спасибо огромное!!! А не подскажете функцию которая меняет частоту кадров?
Александр Вольф • 22 апреля 2015 г. в 17:38 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
Очевидный метод — stellarium.org/doc/head/c...3c9544ab30f50ede
timk • 30 марта 2025 г. в 20:15 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
Прошло почти 10 лет с последней публикации здесь, и stellarium изменился (в частности, подобные ссылки уже не работают).
Возник вопрос, связанный с разработкой плагинов и пр.
Где сейчас можно найти гайды/документацию как их писать? (Кажется, текущая версия страницы по плагинам устарела, т.к., например, ссылается на нерабочую ссылку, равно как и все примеры простых плагинов (HelloStelModule и StellariumPluginTemplate), т.к. последние коммиты были несколько лет назад.
Просто самому разбираться в стометровом коде на C++ и его расположении без хотя бы примерного понимания необходимой структуры не очень увлекательное и результативное занятие.
Александр Вольф • 30 марта 2025 г. в 22:05 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
Инструкции по сброке планетария есть в файле BUILDING.md (т.е. в дереве исходного кода) — а вот ссылку на него на странице документации плагинов не поправили.
В целом инструкции остались верными в части последовательности шагов, разве что SVN следует заменить на Git, да и динамические плагины сейчас де-факто работают только в Linux/BSD (на macOS их никогда и не делали, а на Windows их нужно чинить, но т.к. интерес разработчиков сторонних плагинов околонулевой, то и не занимаемся этим).
Со статическими плагинами все просто: в дереве исходного кода создается каталог для плагина и по аналогии с другими плагинами добавляются соответствующие правки в CMakeLists.txt и StelApp.cpp файлы. Пример совсем недавно добавленного плагина: github.com/Stellarium/stellarium/pull/4005
timk • 30 марта 2025 г. в 23:00 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
Спасибо большое, попробую!
timk • 31 марта 2025 г. в 01:31 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
Здравствуйте! Есть ли какой-то метод, который можно использовать в скриптах, рисующий малый круг заданного радиуса вокруг объекта?
Пробовал использовать FOVCircularMarker из SpecialMarkersMgr, однако это не подходит (круг двигается, если двигать поле зрения), и просто MarkerMgr.markerObject, но с большими значениями size маркер становиться расплывчатым.
Нашёл класс StelCircleArcRenderer, но его можно использовать только в плагинах, как я понял.
Подскажите, пожалуйста!
timk • 31 марта 2025 г. в 03:28 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
Здравствуйте! Подскажите пожалуйста, как можно нарисовать малый круг заданного радиуса вокруг звезды используя скрипты stellarium.
Александр Вольф • 31 марта 2025 г. в 10:06 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
Два подхода рисования кружков — либо текстуру (пример использования в плагине «Навигационные звезды» — метод void NavStars::draw (StelCore* core)), либо примитив (пример использования в отрисовке маркеров объектов глубокого космоса — метод void Nebula::renderRoundMarker (StelPainter& sPainter, const float x, const float y, float size, const Vec3f color, const bool crossed) const)
Александр Вольф • 31 марта 2025 г. в 10:09 edit_comment_link(__('Edit', 'sandbox'), ' ', ''); ?>
Теперь по скриптам — тут только то, что объявлено как public — и, соответственно, MarkerMgr.markerObject. Для скриптов рисования примитивов не добавляли.