Форум Новости Космонавтики

Тематические разделы => Прикладная космонавтика => Тема начата: vnn от 11.05.2006 21:00:32

Название: простая программа - вид Земли с орбиты
Отправлено: vnn от 11.05.2006 21:00:32
а никто не знает  простого способа включить в программу вид Земли  с орбиты для произвольных координат, т.е.  как бы это сделать на любом языке (С, С++, С*, FORTRAN, PASCAL, ...), но без ипользования специальных библиотек.
Название: простая программа - вид Земли с орбиты
Отправлено: N2H4 от 11.05.2006 21:14:45
Пишите на любом языке программу, которая показывает вид Земли с орбиты с произвольными параметрами. Потом указываете желаемые координаты и любуетесь.  :wink:
Это если без специальных библиотек.
Название: простая программа - вид Земли с орбиты
Отправлено: vnn от 11.05.2006 21:29:30
ЦитироватьПишите на любом языке программу, которая показывает вид Земли с орбиты с произвольными параметрами. Потом указываете желаемые координаты и любуетесь.  :wink:
Это если без специальных библиотек.

Да велосипед не хочется изобретать, контуры материков вращать в 3D итд итп
Например, в IDL это встроено в среду программирования, задача ведь типичная - должно быть простое решение и для обычных языков программирования
Название: простая программа - вид Земли с орбиты
Отправлено: N2H4 от 11.05.2006 21:51:52
Так IDL, если это то о чем я подумал, пошел как раз из всяких ГИС задач, для него это может быть и типично.
А универсальные языки "(С, С++, С*, FORTRAN, PASCAL, ...)" создавались для более универсальных задач, типа более "простые" алгоритмы программировать. Поэтому для них крутить Землю в 3Д совсем не типично.
Вообщем либо ищите готовую библиотеку, либо пишите свою. А лучше используйте IDL раз там все встроено.
Название: простая программа - вид Земли с орбиты
Отправлено: vnn от 11.05.2006 21:59:49
ЦитироватьТак IDL, если это то о чем я подумал, пошел как раз из всяких ГИС задач, для него это может быть и типично.
А универсальные языки "(С, С++, С*, FORTRAN, PASCAL, ...)" создавались для более универсальных задач, типа более "простые" алгоритмы программировать. Поэтому для них крутить Землю в 3Д совсем не типично.
Вообщем либо ищите готовую библиотеку, либо пишите свою. А лучше используйте IDL раз там все встроено.

IDL пошел от задач научной обработки поэтому в него много чего дополнительного встроено. Проблемма в том что это надо загнать soft в embedded среду где ничего кроме С и С++ нет. На мобильниках же крутят Землю - чтож все заново разрабатывают что ли
Название: простая программа - вид Земли с орбиты
Отправлено: N2H4 от 11.05.2006 22:13:27
А этот  IDL в C++ случайно свой код не транслирует?
Название: простая программа - вид Земли с орбиты
Отправлено: vnn от 11.05.2006 22:15:56
ЦитироватьА этот  IDL в C++ случайно свой код не транслирует?
Вообще-то конверторы есть, но всякие штуки типа построения проекции Земли с определенными координатами - в закрытых библиотеках.
Название: простая программа - вид Земли с орбиты
Отправлено: foogoo от 11.05.2006 22:45:02
Цитироватьа никто не знает  простого способа включить в программу вид Земли  с орбиты для произвольных координат, т.е.  как бы это сделать на любом языке (С, С++, С*, FORTRAN, PASCAL, ...), но без ипользования специальных библиотек.

Возмите J-Track с NASA. Он доступен в исходниках на JAVA.
http://science.nasa.gov/Realtime/JTrack/Spacecraft.html

http://science.nasa.gov/realtime/JTrack/FAQ.html
ЦитироватьIs the source code available?

    Yes and no.  You are welcome to request the source code through NASA's Technology Transfer program.  Visit http://nasasolutions.com for contact information.  Refer to J-Track and Patrick Meyer/FD42 when making the request.  Also, visit http://nexus.nasa.gov for more information.
Название: простая программа - вид Земли с орбиты
Отправлено: N2H4 от 11.05.2006 22:45:58
Значит не судьба, придется писать самому. Напишите свою библиотеку  и продавайте ее по спекулятивной цене  :) .

Подозреваю, что даже если найти какую-нибудь библиотеку под C++, то перевод ее во встраиваемый вариант без проблем не обойдется.  Ресурсы-то вся эта 3Д графика жрет не маленькие.
Название: простая программа - вид Земли с орбиты
Отправлено: Andy_K64 от 12.05.2006 07:45:38
Есть у нас такая программа. И самопальная библиотека. Все написано на Фортране. Протестирована, в основном, для орбит высотой 170-450 км, т.е. для орбитальных станций и кораблей. В понедельник вернется из командировки основной автор и держатель исходных кодов, спрошу его. Правда, там нет 3D прибамбасов, карта местности примитивная, хотя и достаточно точная.
Название: простая программа - вид Земли с орбиты
Отправлено: Filas от 12.05.2006 08:46:06
Исходники на С можно взять из программы Celestia (http://www.shatters.net/celestia/index.html). Это программа с открытым кодом, так что пользуйтесь. Другое дело, что программа может гораздо больше и вам придется покопаться в поисках нужного кода.
Название: простая программа - вид Земли с орбиты
Отправлено: Dio от 12.05.2006 11:31:56
Цитироватьа никто не знает простого способа включить в программу вид Земли с орбиты для произвольных координат, т.е. как бы это сделать на любом языке (С, С++, С*, FORTRAN, PASCAL, ...), но без ипользования специальных библиотек.
Поищите готовый COM контрол. Не может быть, чтобы никто не делал такого.

Если все-таки не найдется, можно создать модель для OGL при помощи программ, которые это умеют (вероятно, подойдет 3d studio или что-то аналогичное, плохо знаю эту механику) и работать дальше при помощи системной поддержки OGL, которая сейчас есть и в Win и в Ux. Относительно легко можно будет сделать вращение, освещение, всякие повороты и т.п., и все будет на высоком идейно-художественном уровне. Причем в среде Win такие программы трехмерного моделирования, уверен на 99%, поддерживают COM, т.е., на ура встраиваются в программу на С++ непосредственно.

Однако, во втором случае все не слишком просто. Я бы сказал, что месяцок на такие игры можно угробить легко.
Название: простая программа - вид Земли с орбиты
Отправлено: Andy_K64 от 12.05.2006 11:39:45
ЦитироватьПишите на любом языке программу, которая показывает вид Земли с орбиты с произвольными параметрами. Потом указываете желаемые координаты и любуетесь.  :wink:
Это если без специальных библиотек.
А что значит "с произвольными парамтерами"? А как эти параметры задаются? А задается направление линии визирования и наблюдаемое поле зрение?
Название: простая программа - вид Земли с орбиты
Отправлено: Dio от 12.05.2006 13:25:35
ЦитироватьДа там два часа работы с отладкой :) . Это если не использовать опенгл и директ3д. С ними побольше, но будет быстрее.
Хотя нет, тоже два часа, проблемма потом это встроить в другую программу.
Если эту штуку предполагается кудато встраивать, то лучше написать рей-трассер. Для небольших окон работать будет достаточно быстро.
Даже не знаю, что и сказать. У меня другой профиль. Мне кажется, что тут только задание модели может занять приличное время, в зависимости от обстоятельств.
Название: простая программа - вид Земли с орбиты
Отправлено: Dio от 12.05.2006 15:22:22
Цитировать
ЦитироватьМне кажется, что тут только задание модели может занять приличное время, в зависимости от обстоятельств.
Да ну, какя модель? Земли? Она не нужна. Берем текстуру с поверхностью Земли. И строим две матрицы. Одна отображает кородинаты с текстуры на сферу. Вторая со сферы на плоскость(окно).
Если имеется ввиду модель движения по орбите, то этого вроде не требуется. Хотя тоже проблемма не великая.
Это не 3D, однако.
Потом, даже в этом случае при построении проекции надо учитывать ориенировку камеры, ее параметры и (наверное, желательно) положение Солнца. От пяти степеней свободы, преобразование будет довольно длинным, а его еще выписать надо.
Название: простая программа - вид Земли с орбиты
Отправлено: ДмитрийК от 12.05.2006 16:55:06
Все правильно. Поскольку объект один и весьма простой формы, все делается с пол-пинка :)

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

Вот и всего делов-то :) Ничего не забыл? Ах да, еще самый край атмосферы сделать и облака намотать :)
Название: простая программа - вид Земли с орбиты
Отправлено: Dio от 12.05.2006 18:23:22
ЦитироватьВсе правильно. Поскольку объект один и весьма простой формы, все делается с пол-пинка :)
Я бы не назвал Землю объектом простой формы.

ЦитироватьДля каждого пиксела в окне сначала проверяем попадает ли он в круг. Если нет то пропускаем, если совсем близко к краю то вычисляем альфу (для анти-алиасинга), иначе альфу ставим в единицу. Затем считаем широту и долготу где луч зрения пересекается с шаром, переводим в координаты текстуры, интерполируем, умножаем на альфу. Затем берем текстуру рельефа, подобным же образом интерполируем, считаем градиенты, соответственно получаем вектор нормали в этой точке. Поворачиваем его в пространстве в соответствии в широтой и долготой, определяем угол между ним и направлением на солнце. Если блоьше 180 то берем текстуру ночной стороны, иначе считаем скалярное произведение между отраженным вектором и лучом зрения, в соответствии с ним подмешиваем желто-белого (чтобы блик от солнца сделать). По хорошему для этого еще одну текстуру надо взять с коэффицентами спекулярного отражения потому как вода и снег больше блестят. Еще считаем угол между нормалью к поверхности шара и лучом зрения и соответственно подмешиваем бело-голубого, чтобы атмосферную дымку добавить.
В 1000 строк кода (на С++) предложенная-то схема уложится, ежели с 0? Какие уж тут 2 часа или пол-пинка, к чему такой оптимизм?

Опять же, если я все правильно понял, это не будет работать, если высота съемки не специально велика, а фокусное расстояние объектива не специально мало. Т.е., это все же более-менее 2D на сфере, а не реальное 3D.

Впрочем, я действительно малосведущ в этих делах и могу страшно заблуждаться.
Название: простая программа - вид Земли с орбиты
Отправлено: goran d от 12.05.2006 21:07:22
esli podhodit GPL biblioteka mojno izpolzavat urezanuyu mesagl (eto openGL) no v opnengl tojhe ne malo koda nado pisat
drugaia mini opengl biblioteka - tinygl
Название: простая программа - вид Земли с орбиты
Отправлено: ДмитрийК от 12.05.2006 20:58:09
ЦитироватьВ 1000 строк кода (на С++) предложенная-то схема уложится, ежели с 0?
Должна, куды она денется.
ЦитироватьКакие уж тут 2 часа или пол-пинка, к чему такой оптимизм?
А там смайлик стоит :)
А если серьезно то в простейшем варианте (грубо, без интерполяции, освешения и пр.), получится всего строчек 10-20. Надо "всего-лишь" посчитать обратную перспективную проекцию для сферы. Ну да, будет там синус на косинусе сидеть и арктангенсом погонять :) ну вот на это час, час на все остальное :)
Разумеется в OpenGL это все само собой получается, а может можно и готовый COM-control или applet  найти но автор же попросил  embedded.

ЦитироватьОпять же, если я все правильно понял, это не будет работать, если высота съемки не специально велика, а фокусное расстояние объектива не специально мало.
Сказано же - "вид с орбиты". Этож какое "не специально малое" фокусное расстояние должно быть :)
Название: простая программа - вид Земли с орбиты
Отправлено: X от 12.05.2006 23:16:38
Нарисовать с помощью OpenGL или Direct 3D сферу и натянуть на нее битмап с картой Земли действительно очень просто.
Рекомендую, однако:
http://www.shatters.net/celestia
3D-модель Солнечной системы и beyond очень хорошего качества на основе OpenGL. Хорошая поддержка больших текстур. Атмосферы, облака, тени, звезды, туманности и прочая, прочая, прочая. Импорт и отображение пользовательских объектов (всякие КА, астероиды и проч.), поддерживается формат 3DS. Открытый проект, все исходные тексты доступны. Большая коллекция объектов, много соучастников проекта. Используется в ESTEC как стандарт для задач визуализации.
Это решение, конечно, не простое, но доступное (бесплатное, правда некоторые авторы пытаются продавать свои плагины и объекты), высокого качества и легко приспосабливаемое к конкретным задачам.