![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как лучше рисовать карту? [D5, Win2k]
Andrey007 © (2002-04-16 17:36:00)В принципе, пробовались 2 варианта:
1. На Canvas формы (и обновление по FormPaint),
2. На TImage.Canvas.
Первый вариант неудобен тем, что когда над формой с картой таскаешь другие окна, то карта перерисовывается (а это 1-2 секунды), что при частом переносе окон раздражает. Во втором варианте перерисовка карты происходит только при перемещении, увеличении/уменьшении, добавлении/удалении слоёв. Но почему-то при этом сами эти операции (перемещение, увеличение/уменьшение, добавление/удаление слоёв) происходят медленно. Хотелось бы узнать насчёт рисования с использованием вычислительных ресурсов видеоплаты,- DirectX, OpenGL. Какие нужны компоненты? DelphiX? И если кто пробовал, поделитесь впечатлениями насколько это получается быстрей.
Ваня (2002-10-18 10:35:00) [1]Посдкажите как отрисовывать шрифты на карте, чтобы они были векторными и масштабируемыми. Т.е. как например шрифт размера 5.056 задать?
Карелин Артем (2002-07-22 12:27:00) [2]DelphiX - хорошая вещь, однако на некоторых компах надо убирать видеоускорение. 25 FPS на нескольких десятках рисунков вполне держит. Даже со сложными примочками.
int64 (2002-07-19 07:22:00) [3]Надо полагать, слои у автора вопроса, могут быть и не тем, что, TLayer В Graphics32 TImage32. Это может быть любой примитив на карте, который понижается/повышается над другими. А если их надо держать постоянно загруженными и их 200т, то намного производительнее не держпть их в виде объектов.
ЮЮ (2002-07-19 03:15:00) [4]>Лёша:И упаси бог тебя представлять каждый из слоёв объектом.
В Graphics32 TImage32 может содержать Layers (слои), причем наследники от TLayer самые различные. И всё это отлично смотрелось даже на P133 c S3(2M)
http://g32.org
handra (2002-07-18 11:19:00) [5]н-да, не думал, что за лайт они что-то попросят...
кастрированный он у них до безумия.
v2a (2002-07-17 16:21:00) [6]2 handra: И где ж он там бесплатный?
handra (2002-04-18 12:59:00) [7]www.esri.com - там есть MapObjects 2.0/2.1, можно скачать урезанную Lights-версию
Лёша (2002-04-18 02:25:00) [8]
> DirectX и OpenGL используют вычислительные ресурсы видеоплаты,
> а не процессора. Если да, то их использование должно дать
> выигрыш в производительности.
Ну это тогда, когда ресурсы видеоплаты круче процессора. Если ты пишешь под свою машину и для себя - смотри сам. Если же нет - привязывать требования программы к видео не совсем корректно (офисные компьютеры не имеют таких наворотов, как правило).
Только догадываюсь, что ты подразумеваешь под слоями, но использовать DirectX или OpenGL выйдет себе дороже. Разумеется, если только ты не строишь карту с использованием всех мыслимых примочек 3D и поддержанием всего этого чуда не менее чем в 30 fps.
На своём опыте знаю, что всё быстодействие основывается не на алгоритмах прорисовки (тем более для 2D графики), а в структуре представления и манипуляции графическими примитивами или слоями. А это никакой DirectX не заменит. И упаси бог тебя представлять каждый из слоёв объектом.
Ник (2002-04-17 16:30:00) [9]www.cartoworld.com
Andrey007 (2002-04-17 15:58:00) [10]2Ник: А можно ссылку?
2Лёша: Ну, с перемещением это может и решает вопрос, а вот как быть с увеличением/уменьшением, добавлением/удалением слоёв? Я вот что хотел выяснить. Правильно ли я понимаю, что DirectX и OpenGL используют вычислительные ресурсы видеоплаты, а не процессора. Если да, то их использование должно дать выигрыш в производительности.
Лёша (2002-04-17 04:12:00) [11]Наверника, все тормоза связаны с перерисовкой/перестройкой самой карты.
Даже, если не так, используй виртуальный битмап. Который всегда будет размером с твою канву (вернее с то, к чему канва принадлежит, допустим 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 и векторная графика. Тормозов нет.
Ник (2002-04-16 21:26:00) [12]Есть отличные VCL компоненты для рисования карт -
CartoVCL Pro, но платные.