QGraphicsScene + QGraphicsView + десятки тысяч QGraphicsItem |
Здравствуйте, гость ( Вход | Регистрация )
QGraphicsScene + QGraphicsView + десятки тысяч QGraphicsItem |
vintik |
20.8.2011, 22:14
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 28.3.2011 Пользователь №: 2547 Спасибо сказали: 2 раз(а) Репутация: 0 |
Всем привет!
Наверное, многие видели кутешную демку с чипами. Если не ошибаюсь в этой демке сцена содержит около 40 тысяч одинаковых итемов. Для отображения итемов применяется QGraphicsView, у которого в качестве вьюпорта используется обычный или GL виджет. Вид можно вращать и масштабировать. Проблема в том, что вся эта красота сильно тормозит. Особенно это эаметно при маленьком масштабе, когда в виде отображаются все итемы. Вопрос: есть ли способы борьбы с тормозами, когда на сцене так много объектов? Сразу оговорюсь, делал некий тестовый пример, где на сцену добавлял порядка 50 тысяч простейших итемов (унаследованы от QGraphicsItem, переопределены paint, boundingRect, shape). Итемы должны сохранять способность принимать события мыши. Вид должен иметь возможность для перемещения и масштабирования. Пример собирал на разных машинах, под разными осями, с разными версиями Qt и разными видеокартами и драйверами к ним. ВЕЗДЕ наблюдались тормоза при маленьком масштабе, когда все итемы отображены в области экрана. Пробовал различные варианты оптимизирующих флагов для сцены и вида, найти оптимальную комбинацию не удалось... Может кому-то повезло больше?)) поделитесь опытом) |
|
|
ilyabvt |
21.8.2011, 12:42
Сообщение
#2
|
Активный участник Группа: Участник Сообщений: 297 Регистрация: 23.6.2011 Пользователь №: 2765 Спасибо сказали: 45 раз(а) Репутация: 3 |
При маленьком масштабе используйте изображения с меньшим разрешением. Уменьшенные копии изображения можно создать заранее а можно генерировать программно, например при запуске программы.
|
|
|
Litkevich Yuriy |
21.8.2011, 18:36
Сообщение
#3
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
registr |
22.8.2011, 16:08
Сообщение
#4
|
Участник Группа: Участник Сообщений: 115 Регистрация: 16.11.2009 Пользователь №: 1234 Спасибо сказали: 8 раз(а) Репутация: 1 |
Чтобы не тормозило, нужно примитивы OpenGL помещать в видеопамять. Ну и проблема оптимизации -- это известная проблема. Лично сравнивал таблицы отображения и массивы вершин, последние выводятся гораздо быстрее. Обычно решение проблемы оптимизации сводится к следующему: не нужно рисовать то, что не видно или не заметно. Сюда относится и LOD - Level of Detalization, как уже было замечено.
|
|
|
vintik |
22.8.2011, 23:12
Сообщение
#5
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 28.3.2011 Пользователь №: 2547 Спасибо сказали: 2 раз(а) Репутация: 0 |
Спасибо за ответы! Направление понял!
|
|
|
Текстовая версия | Сейчас: 28.1.2025, 8:06 |