![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
efg |
![]() ![]()
Сообщение
#1
|
![]() Студент ![]() Группа: Участник Сообщений: 48 Регистрация: 6.5.2011 Пользователь №: 2658 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
дело в том, что на сцене должно быть одновременно размещено много (скажем, около 1000, хотя в перспективе их будет гораздо больше) item'ов - Svg или Pixmap, не важно. каждый из них довольно маленького размера (20х20), и изображение для них выбирается случайным образом из 6 различных файлов. получается так, что каждый элемент загружает изображение для себя, что, естественно, очень затратно при таком их количестве. можно ли как-нибудь оптимизировать всё это дело, чтобы каждый item не хранил в себе изображение, а содержал указатель? или придётся писать свой класс? кто-нибудь сталкивался с подобным?
|
|
|
ViGOur |
![]()
Сообщение
#2
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Свой класс прийдётся писать наверняка.
В котором будут загружаться твои 6 или более файлов и хранится в памяти, а вот на сцене можно их размещать на основе матрицы matrix[][], в которой будут хранится указатели на твои картинки... Для скорости можно попробовать формировать временную (большую) картинку собранную из кучи твоих маленьких, которая в результате чего-то там будет меняться (то, что она будет меняться нутром чую ![]() |
|
|
wiz29 |
![]()
Сообщение
#3
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 600 Регистрация: 7.7.2010 Из: Санкт-Петербург Пользователь №: 1866 Спасибо сказали: 94 раз(а) Репутация: ![]() ![]() ![]() |
дело в том, что на сцене должно быть одновременно размещено много (скажем, около 1000, хотя в перспективе их будет гораздо больше) item'ов - Svg или Pixmap, не важно. каждый из них довольно маленького размера (20х20), и изображение для них выбирается случайным образом из 6 различных файлов. получается так, что каждый элемент загружает изображение для себя, что, естественно, очень затратно при таком их количестве. можно ли как-нибудь оптимизировать всё это дело, чтобы каждый item не хранил в себе изображение, а содержал указатель? или придётся писать свой класс? кто-нибудь сталкивался с подобным? можно использовать pixmap кэш |
|
|
efg |
![]()
Сообщение
#4
|
![]() Студент ![]() Группа: Участник Сообщений: 48 Регистрация: 6.5.2011 Пользователь №: 2658 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
можно использовать pixmap кэш да, точно, это подходит теперь другой вопрос: насколько быстро получится отрендерить всю графику при изменении масштаба? нужно имитировать плавный отъезд\приближение камеры к сцене. при размещении QGraphicsSvgItem такой проблемы не было, можно было сразу пользоваться QGraphicsView::scale() или QGraphicsView::setMatrix() можно, конечно, заранее отрендерить исходные .svg в какие-нибудь .png под разные масштабы (для быстродействия), но хочется верить, что есть более практичное решение, ведь при такой реализации масштабирования после каждого изменения размеров pixmap'ов все элементы придётся смещать на соответствующие величины... нужен аналог QPixmapCache для svg Сообщение отредактировал efg - 11.11.2011, 20:41 |
|
|
wiz29 |
![]()
Сообщение
#5
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 600 Регистрация: 7.7.2010 Из: Санкт-Петербург Пользователь №: 1866 Спасибо сказали: 94 раз(а) Репутация: ![]() ![]() ![]() |
небольшие pixmap'ы масштабируются оч. быстро особенно при билинейном фильтре. при достаточно близком приближении, думаю рендерить придется достаточно маленькое кол-во объектов. а при удалении весь scale будет вырожден в небольшое кол-во точек, что тоже не затратно.
нужно экспериментить. а что сильные тормоза при масштабировании сцены? |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 6.5.2025, 16:19 |