| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Программирование игр, графики и искусственного интеллекта > Движок для GIS системы |
| Автор: amarenkov 31.3.2008, 11:12 |
| А кто-нибудь знает, на каком движке работает AutoCad? Мне необходим 2D-движок для создания подобия ГИС-системы, может кто подскажет, где искать И еще один вопрос, а из всех вышеперечисленных движков есть такие, которые могут генерировать WMF файлы сцены? Иными словами, мне необходимо результат его работы печатать, но вариант с растром не подходит. |
| Автор: arilou 31.3.2008, 11:56 |
| amarenkov, AutoCAD работает на своем движке. Добавлено через 2 минуты а что входит в понятие "подобие ГИС-системы"? что она должна уметь делать? |
| Автор: amarenkov 31.3.2008, 12:26 |
| Это программа для расчета рассеивания загрязняющих веществ. Должна позволять создавать карты из заданного набора примитивов (точка, полилиния, полигон, текст, прямоугольник, окружность и т.п.). Операции выделения примитивов, перемещения, преобразования. Операции с системами координат, масштабом. В данный момент основная проблема для меня - производительность. Все есть, все работает, но медленно... Я пишу на C# Net2.0 с помощью GDI+. GDI+ в основном из-за того, что теми же командами я могу создавать WMF-файлы для печати. DirectX, OpenGL и иже с ними не позволяют, на сколько я знаю, формировать файлы в каком-либо векторном виде. Сейчас производительность оптимизирую тем, что рисую в отдельном потоке и через заданные промежутки времени синхронизирую с основным потоком. При этом, понятное дело, получается так, что сцена отрисовывается не полностью, а как бы поэтапно. А когда смотрю на AutoCAD меня съедает черная зависть Вот и возник вопрос: как же они так делают? Как это у них получается |
| Автор: arilou 31.3.2008, 16:07 |
| Странно конечно. ИМХО, надо смотреть в сторону оптимизации путем группировки сходных объектов, и постановки их на рисование меньшим кол-вом вызовов ф-ций GDI+. Плюс еще -- ты рисуешь как - постоянно перерисовываешь, или только в OnPaint? У тебя всегда все примитивы рисуются, или только когда они попадают в видимую часть окна (т.е. карта всегда полностью помещается в окне?). Сколько примитивов на конвейер попадает? |
| Автор: arilou 2.4.2008, 17:47 |
| amarenkov, а ты не мог бы выложить кусок кода мегафункции, которая занимается отрисовкой примитивов? Добавлено через 1 минуту и 51 секунду теоретически, все это можно рисовать с помощью XNA. Только придется реализовать обертки для векторных примитивов. |
| Автор: amarenkov 3.4.2008, 08:54 | ||
arilou, я могу
То есть, здесь мои, какие-то внутренние координаты преобразуются в координаты изображения и рисуются. А эта ХНЯ (пардон, XNA |
| Автор: arilou 3.4.2008, 10:00 | ||
| amarenkov, конечно ускорит! Там же 3D акселерация будет использоваться, плюс несколько уровней от API до железа напрямую обходится, за счет DirectX. Добавлено через 1 минуту и 57 секунд насчет кода -- покажи мегафункцию, котора разбирает список примитивов и вызывает соответствующие методы рисования, наверняка есть что-то типа
|
| Автор: amarenkov 3.4.2008, 11:40 | ||||
О, а чем сможет помочь 3D акселерация с двух-мерной сценой? ИМХО, она будет мешать А, вот ты о какой функции
А вот функция, которую он вызывает для каждой фигуры:
|
| Автор: arilou 3.4.2008, 13:51 | ||
как раз наоборот. просто ты будешь рисовать в проекции "сверху-вниз". судя по всему, это будет наиболее предпочтительный вариант по производительности. |
| Автор: addnr 27.6.2008, 12:38 |
| http://www.esti-map.ru/Программы/MapInfo/MapInfoMapXtreme/tabid/66/Default.aspx может тебе помоч |
| Автор: amarenkov 16.7.2008, 12:46 |
| Спасибо, addnr, MapInfo я знаю, но это не то |
| Автор: QryStaL 17.7.2008, 14:08 |
| WPF ? |
| Автор: amarenkov 23.7.2008, 08:44 |
| QryStaL, WPF не очень подходит, потому как это в корне иная технология. Это весь интерфейс на нее пересаживать надо. А у меня есть только панель (ну или что-то типа), на которой я должен выполнять свои задачи. Плюс, оно медленнее обычного DirectX (читал разные обзоры). |
| Автор: inkognitum 24.7.2008, 13:41 |
| Добрый день, amarenkov. В данный момент я занимаюсь написанием GIS движка. Я сам не обладаю достаточным знанием чтобы использовать технологии OpenGL или D3D, но написанную объектную модель можно легко переписать под данные технологии. В данный момент я использую GDI+, могу дать несколько советов как можно ускорить работу. Для начала я всю карту разбиваю на регионы (прямоугольники), и к каждому прямоугольнику принадлежит его список объектов. если весь прямоугольник попадаетя в поле видимости пользователя то рисуем все что находится в этом прямоугольнике, иначе пропускаем.. таким образом можно урезать большую часть карты и не пробегать ее. так же имеется система слоев. т.е. объекты паралельно принадлежат и слою, слой виден при определенном зуме т.е. некоторые объекты которые очень малы, следует закрепить за слоем который виден только при огромном увеличении. и такими способами можно значительно ускорить вывод графических элементов. Желаю удачи. |
| Автор: amarenkov 29.7.2008, 13:21 |
| Спасибо, inkognitum, я уже делаю все Вами перечисленное и еще много другое И все равно мне не нравится производительность. А больше всего не нравится ощущение, что я делаю велосипеды из материала, для этого не предназначенного |
| Автор: inkognitum 29.7.2008, 18:22 | ||
Прекрасно понимаю Вас. И по этому советую изучать OpenGL и переводить вашу программу именно на этот движок. Я имено так и собираюсь постпать, я знаю что всеми данными ухищрениями далеко не уедишь. |
| Автор: inkognitum 18.8.2008, 20:59 |
| <b>amarenkov</b>, если тема еще актуальна. Я добился довольно хороших результатов используя OpenGL. Я слегонца дописал свою объектную модель и стал выводить карту в OpenGL, скорость увеличилась более чем в 17 раз (!), исчезли лаги и временные задержки. Я эксперементировал над картой (55000 на 35000 пкселей), на ней было более 40000 объектов и порядка 1 мил. точек. Но это не предел. просто у меня нет карты больше. И у меня все летает. И ксведенью на все это у меня понадобилось 3 суток. До этого с ОпенГЛ не работал. Так что имеет смысл копать именно в эту сторону. |
| Автор: mrgloom 15.6.2011, 17:22 |
| Можете поделиться примером как оптимизировать вывод на OpenGL? |