Форум: "Media";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];
ВнизКак лучше рисовать карту? Найти похожие ветки
← →
Andrey007 (2002-04-16 17:36) [0]В принципе, пробовались 2 варианта:
1. На Canvas формы (и обновление по FormPaint),
2. На TImage.Canvas.
Первый вариант неудобен тем, что когда над формой с картой таскаешь другие окна, то карта перерисовывается (а это 1-2 секунды), что при частом переносе окон раздражает. Во втором варианте перерисовка карты происходит только при перемещении, увеличении/уменьшении, добавлении/удалении слоёв. Но почему-то при этом сами эти операции (перемещение, увеличение/уменьшение, добавление/удаление слоёв) происходят медленно. Хотелось бы узнать насчёт рисования с использованием вычислительных ресурсов видеоплаты,- DirectX, OpenGL. Какие нужны компоненты? DelphiX? И если кто пробовал, поделитесь впечатлениями насколько это получается быстрей.
← →
Ник (2002-04-16 21:26) [1]Есть отличные VCL компоненты для рисования карт -
CartoVCL Pro, но платные.
← →
Лёша (2002-04-17 04:12) [2]Наверника, все тормоза связаны с перерисовкой/перестройкой самой карты.
Даже, если не так, используй виртуальный битмап. Который всегда будет размером с твою канву (вернее с то, к чему канва принадлежит, допустим PaintBox). И рисуй всё на этом битмапе. Когда процедура прорисовки закончена, просто ляпай нужный прямоугольник на канву. Так, приблизительно и TImage устроен.
И никогда не перерисовуй части карты больше, чем необходимо, тем более всю карту.
Использование виртуального битмапа полезно как раз для твоего случая: чтобы перемещать посторонние окна. А также для того чтобы избегать мерцаний. И если захочешь сделать скролинг карты, просто сдвигаешь битмап сам на себе какой-нибудь быстрой процедурой (хотя можно и CopyRect), а в "освободившейся полоске" битмапа перестраиваешь карту, и в конце ляпаешь весь целиком на канву.
Теперь, исходя из этого, чтобы быстро перерисовывалось на OnPaint и OnResize.
Объявляешь сообщение для PaintBox:
WMPaint(var Message: TWMPaint);
В его теле пишешь:
GetUpdateRect(Self.Handle,UpdateRect,True);
UpdateRect - глобальный, это там где нужна перерисовка.
Теперь, в теле обработчика OnPaint перерисовываем виртуальный битмап только в прямоугольнике UpdateRect.
И далее, например:
Canvas.CopyRect(UpdateRect, MyBitmap.Canvas, UpdateRect);
PS. У меня так работает одновременно File Maping и векторная графика. Тормозов нет.
← →
Andrey007 (2002-04-17 15:58) [3]2Ник: А можно ссылку?
2Лёша: Ну, с перемещением это может и решает вопрос, а вот как быть с увеличением/уменьшением, добавлением/удалением слоёв? Я вот что хотел выяснить. Правильно ли я понимаю, что DirectX и OpenGL используют вычислительные ресурсы видеоплаты, а не процессора. Если да, то их использование должно дать выигрыш в производительности.
← →
Ник (2002-04-17 16:30) [4]www.cartoworld.com
← →
Лёша (2002-04-18 02:25) [5]
> DirectX и OpenGL используют вычислительные ресурсы видеоплаты,
> а не процессора. Если да, то их использование должно дать
> выигрыш в производительности.
Ну это тогда, когда ресурсы видеоплаты круче процессора. Если ты пишешь под свою машину и для себя - смотри сам. Если же нет - привязывать требования программы к видео не совсем корректно (офисные компьютеры не имеют таких наворотов, как правило).
Только догадываюсь, что ты подразумеваешь под слоями, но использовать DirectX или OpenGL выйдет себе дороже. Разумеется, если только ты не строишь карту с использованием всех мыслимых примочек 3D и поддержанием всего этого чуда не менее чем в 30 fps.
На своём опыте знаю, что всё быстодействие основывается не на алгоритмах прорисовки (тем более для 2D графики), а в структуре представления и манипуляции графическими примитивами или слоями. А это никакой DirectX не заменит. И упаси бог тебя представлять каждый из слоёв объектом.
← →
handra (2002-04-18 12:59) [6]www.esri.com - там есть MapObjects 2.0/2.1, можно скачать урезанную Lights-версию
← →
v2a (2002-07-17 16:21) [7]2 handra: И где ж он там бесплатный?
← →
handra (2002-07-18 11:19) [8]н-да, не думал, что за лайт они что-то попросят...
кастрированный он у них до безумия.
← →
ЮЮ (2002-07-19 03:15) [9]>Лёша:И упаси бог тебя представлять каждый из слоёв объектом.
В Graphics32 TImage32 может содержать Layers (слои), причем наследники от TLayer самые различные. И всё это отлично смотрелось даже на P133 c S3(2M)
http://g32.org
← →
int64 (2002-07-19 07:22) [10]Надо полагать, слои у автора вопроса, могут быть и не тем, что, TLayer В Graphics32 TImage32. Это может быть любой примитив на карте, который понижается/повышается над другими. А если их надо держать постоянно загруженными и их 200т, то намного производительнее не держпть их в виде объектов.
← →
Карелин Артем (2002-07-22 12:27) [11]DelphiX - хорошая вещь, однако на некоторых компах надо убирать видеоускорение. 25 FPS на нескольких десятках рисунков вполне держит. Даже со сложными примочками.
← →
Ваня (2002-10-18 10:35) [12]Посдкажите как отрисовывать шрифты на карте, чтобы они были векторными и масштабируемыми. Т.е. как например шрифт размера 5.056 задать?
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c