![]() |
Модераторы: Rickert |
![]() ![]() ![]() |
|
amarenkov |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 21.2.2008 Где: Воронеж Репутация: нет Всего: нет |
А кто-нибудь знает, на каком движке работает AutoCad? Мне необходим 2D-движок для создания подобия ГИС-системы, может кто подскажет, где искать
![]() И еще один вопрос, а из всех вышеперечисленных движков есть такие, которые могут генерировать WMF файлы сцены? Иными словами, мне необходимо результат его работы печатать, но вариант с растром не подходит. |
|||
|
||||
arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 6 Всего: 61 |
amarenkov, AutoCAD работает на своем движке.
Добавлено через 2 минуты а что входит в понятие "подобие ГИС-системы"? что она должна уметь делать? |
|||
|
||||
amarenkov |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 21.2.2008 Где: Воронеж Репутация: нет Всего: нет |
Это программа для расчета рассеивания загрязняющих веществ. Должна позволять создавать карты из заданного набора примитивов (точка, полилиния, полигон, текст, прямоугольник, окружность и т.п.). Операции выделения примитивов, перемещения, преобразования. Операции с системами координат, масштабом.
В данный момент основная проблема для меня - производительность. Все есть, все работает, но медленно... Я пишу на C# Net2.0 с помощью GDI+. GDI+ в основном из-за того, что теми же командами я могу создавать WMF-файлы для печати. DirectX, OpenGL и иже с ними не позволяют, на сколько я знаю, формировать файлы в каком-либо векторном виде. Сейчас производительность оптимизирую тем, что рисую в отдельном потоке и через заданные промежутки времени синхронизирую с основным потоком. При этом, понятное дело, получается так, что сцена отрисовывается не полностью, а как бы поэтапно. А когда смотрю на AutoCAD меня съедает черная зависть ![]() Вот и возник вопрос: как же они так делают? Как это у них получается ![]() |
|||
|
||||
arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 6 Всего: 61 |
Странно конечно. ИМХО, надо смотреть в сторону оптимизации путем группировки сходных объектов, и постановки их на рисование меньшим кол-вом вызовов ф-ций GDI+.
Плюс еще -- ты рисуешь как - постоянно перерисовываешь, или только в OnPaint? У тебя всегда все примитивы рисуются, или только когда они попадают в видимую часть окна (т.е. карта всегда полностью помещается в окне?). Сколько примитивов на конвейер попадает? |
|||
|
||||
amarenkov |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 21.2.2008 Где: Воронеж Репутация: нет Всего: нет |
Как это? Поток рисует в свой Bitmap. Этот битмап отображается на OnPaint, или если поток закончил рисование, или если прошел заданный промежуток времени. Из теории построения интерфейсов отклик в 200 мс является допустимым. Таким образом у меня отрисовка сцены разбивается на промежутки времени по 200 мс. А когда поток дорисовал все - он останавливается, и на OnPaint происходит просто отрисовка битмапа потока. Если пользователь добавил объект или сместил зону видимости - все начинается сначала. Я рисую только те примитивы, которые попадают в область видимости. Плюс к этому, если они находятся слишком далеко они рисуются либо точками, либо отрезками, либо прямоугольниками. А что именно ты подразумеваешь под "конвеером"? С точки зрения оптимизации можно попробовать еще BSP-Tree. Но я не знаю, насколько это может ускорить работу? У меня такое ощущение, что GDI+ сам по себе довольно медленный. То есть, набор из 1000 линий он часто не успевает отрисовать за 200 мс. |
|||
|
||||
arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 6 Всего: 61 |
amarenkov, а ты не мог бы выложить кусок кода мегафункции, которая занимается отрисовкой примитивов?
Добавлено через 1 минуту и 51 секунду теоретически, все это можно рисовать с помощью XNA. Только придется реализовать обертки для векторных примитивов. |
|||
|
||||
amarenkov |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 21.2.2008 Где: Воронеж Репутация: нет Всего: нет |
arilou, я могу
![]()
То есть, здесь мои, какие-то внутренние координаты преобразуются в координаты изображения и рисуются. А эта ХНЯ (пардон, XNA ![]() |
|||
|
||||
arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 6 Всего: 61 |
amarenkov, конечно ускорит! Там же 3D акселерация будет использоваться, плюс несколько уровней от API до железа напрямую обходится, за счет DirectX.
Добавлено через 1 минуту и 57 секунд насчет кода -- покажи мегафункцию, котора разбирает список примитивов и вызывает соответствующие методы рисования, наверняка есть что-то типа
|
|||
|
||||
amarenkov |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 21.2.2008 Где: Воронеж Репутация: нет Всего: нет |
О, а чем сможет помочь 3D акселерация с двух-мерной сценой? ИМХО, она будет мешать ![]() А, вот ты о какой функции ![]()
А вот функция, которую он вызывает для каждой фигуры:
|
||||
|
|||||
arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 6 Всего: 61 |
||||
|
||||
addnr |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 18.10.2006 Где: Украина Репутация: нет Всего: нет |
||||
|
||||
amarenkov |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 21.2.2008 Где: Воронеж Репутация: нет Всего: нет |
Спасибо, addnr, MapInfo я знаю, но это не то
![]() ![]() |
|||
|
||||
QryStaL |
|
|||
![]() Intellectual feast ![]() ![]() Профиль Группа: Участник Сообщений: 914 Регистрация: 30.11.2005 Репутация: нет Всего: 32 |
WPF ?
-------------------- I don't need a reason being who I am... |
|||
|
||||
amarenkov |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 21.2.2008 Где: Воронеж Репутация: нет Всего: нет |
QryStaL, WPF не очень подходит, потому как это в корне иная технология. Это весь интерфейс на нее пересаживать надо. А у меня есть только панель (ну или что-то типа), на которой я должен выполнять свои задачи. Плюс, оно медленнее обычного DirectX (читал разные обзоры).
|
|||
|
||||
inkognitum |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.8.2006 Где: г. Набережные Чел ны Репутация: нет Всего: 1 |
Добрый день, amarenkov.
В данный момент я занимаюсь написанием GIS движка. Я сам не обладаю достаточным знанием чтобы использовать технологии OpenGL или D3D, но написанную объектную модель можно легко переписать под данные технологии. В данный момент я использую GDI+, могу дать несколько советов как можно ускорить работу. Для начала я всю карту разбиваю на регионы (прямоугольники), и к каждому прямоугольнику принадлежит его список объектов. если весь прямоугольник попадаетя в поле видимости пользователя то рисуем все что находится в этом прямоугольнике, иначе пропускаем.. таким образом можно урезать большую часть карты и не пробегать ее. так же имеется система слоев. т.е. объекты паралельно принадлежат и слою, слой виден при определенном зуме т.е. некоторые объекты которые очень малы, следует закрепить за слоем который виден только при огромном увеличении. и такими способами можно значительно ускорить вывод графических элементов. Желаю удачи. --------------------
"Убить всех людей!" (с) Bender |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |