![]() |
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]() ![]() ![]() |
|
sh0375 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 1.2.2009 Репутация: нет Всего: нет |
Добрый день!
Помогите, кто может, разобраться с такой задачей: есть огромные SVG файлы, полученные экспортом из Adobe Illustrator, размером в сотни мегабайт. Их нужно просматривать в программе на QT. Я реализовал это без использования OpenGL. В потоке запускается отрисовка нативными средствами QT. Но работает медленно. Стоит задача ускорить работу. Я попробовал перевести на OpenGL. Но столкнулся с рядом неразрешимых для себя проблем: 1. мне показалось OpenGL работает в потоке не совсем стабильно. программа элементарно подвисала при запуске отрисовки OpenGL в потоке. Причем не сразу. Могла несколько раз и отрисовать. 2. я использовал простое перенаправление вывода QT методов на widget OpenGL. Как мне показалось, скорость все равно недостаточна. А при выводе растровых изображений даже меньше. Насколько я понял, преимущество OpenGL проявляется если заранее создать объекты текстур, фигур на сервере OpenGL. А затем много раз обращаться к ним для отрисовки. Но поскольку размер SVG файла огромен, я не уверен, возможно ли все фигуры и растровые картинки из него заранее отправить в пямять OpenGL. Возможно ли вообще использование OpenGL в такой ситуациции? |
|||
|
||||
kamre |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: нет Всего: 13 |
Интересно, а в какой-нибудь программе такие SVG файлы нормально показываются? Браузерами Opera/FireFox? Adobe SVG Viewer? Inkscape? Batik? |
|||
|
||||
sh0375 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 1.2.2009 Репутация: нет Всего: нет |
Сам Adobe Illustrator показывает на порядок быстрее, чем моя программа.
Долго открывает файл, но при скроллинге изображения отрисовка идет быстро. Мне кажется что он даже не использует OpenGL. |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 5 Всего: 459 |
Ну svg это векторная графика, тут нужно смотреть скорее в сторону Corel Draw. Открывает он их точно, не знаю насколько быстро.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
kamre |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: нет Всего: 13 |
Ну так не зря же за него просят столько денег, там уж наверняка постарались, чтобы все работало как можно быстрее. Наверняка он все переводит в свой внутренний формат данных, а не работает с чистым svg. Вот этот внутренний формат у него и оптимизирован для быстрой отрисовки частей и скролинга. Интересно как раз то, как другие программы этот экспортированный svg умеют показывать. Тот же Adobe SVG Viewer. |
|||
|
||||
baldina |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: нет Всего: 101 |
идеи: - при отрисовке кадра не надо отдавать opengl всё. только то, что однозначно видно, и видно достаточно хорошо (не слишком мелкое) - такой большой файл неплохо бы проиндексировать (K-d деревья), что позволит быстро определять, попадает ли объект в зону видимости - смысл в использовании opengl только в преобразованиях координат и растеризации полигонов, которые могут производиться аппаратно - использование дисплейных списков opengl в данном случае думаю не ускорит, а может и замедлит процесс. а вот использование glVertexPointer может сказаться положительно Добавлено через 6 минут и 15 секунд кстати если перевести его в двоичный формат (попутно и проиндексировать) сотни мегабайт наверняка превратятся в десятки, а мож и меньше... Это сообщение отредактировал(а) baldina - 1.4.2009, 17:48 |
||||
|
|||||
sh0375 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 1.2.2009 Репутация: нет Всего: нет |
А можно каким-либо образом часть изображения (например векторные пути) выводить с использованием OpenGL, а часть (растровые изображения) - стандартными средствами QT?
|
|||
|
||||
![]() ![]() ![]() |
Вы можете найти полезным что... | |
|
|
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |