Название: знатоки, как поступить?! Отправлено: boolean от Октябрь 01, 2012, 13:52 всем привет. вообщем делаю прогу с вычислениями и отрисовкой в реальном времени, так что к ПО предъявляются повышенные требования к быстродействию и надежности, и еще нужна кроссплатформенность : линукс и win xp.
решил сделать интерфейс и визуализацию на qt (до этого только на билдере работал; 3D графика не нужна). теперь конкретнее: 1) какой компонент и методы использовать, чтобы получить максимальное быстродействие отрисовки и возможности аппаратного ускорения ( opengl) 2) как получить отрисовку без мерцания? (в билдере рисовал в промежуточный буфер и выводил хором все слои) 2) есть разные типы данных, которые обновляются через разные интервалы времени (от милисекунд до часов), но отображаться они должны постоянно и ПО СЛОЯМ. в билдере эту задачу решил использованием TBitmap. есть ли что-нибудь подобное здесь? 3) приложение многопоточное, и как обстоит в qt с рисованием из потока? тоже исключительно из главного? 4) приветствуются ссылки на статьи и примеры повторюсь нужно максимум быстродействия Название: Re: знатоки, как поступить?! Отправлено: mutineer от Октябрь 01, 2012, 14:05 1) QGLWidget
3) Есть QBitmap, наверно он подойдет (хз что ты делал с TBitmap) 4) да, тоже только из главного Название: Re: знатоки, как поступить?! Отправлено: Igors от Октябрь 01, 2012, 14:09 А если не знаток то лучше не отвечать, что ли? :)
- TBitmap = QImage - да, тоже только из главного По поводу злободневного ускорения: буквально неск дней назад я себе сделал FBO и очень этим доволен, руки развязаны, ни от каких "компонентов" я не завишу Название: Re: знатоки, как поступить?! Отправлено: boolean от Октябрь 02, 2012, 05:25 По поводу злободневного ускорения: буквально неск дней назад я себе сделал FBO и очень этим доволен, руки развязаны, ни от каких "компонентов" я не завишу всем спасибо за ответы! а что такое FBO если объяснить"на пальцах" ? и как с выводом текста в этом виджете? мне требуется выводить различную служебную информацию. Название: Re: знатоки, как поступить?! Отправлено: Igors от Октябрь 02, 2012, 10:09 а что такое FBO если объяснить"на пальцах" ? OpenGL рендерит в буфер (offscreen), который читаете и комбинируете как хотите (по слоям или как) Название: Re: знатоки, как поступить?! Отправлено: boolean от Октябрь 02, 2012, 10:18 аа, спасибо
Название: Re: знатоки, как поступить?! Отправлено: xokc от Октябрь 02, 2012, 10:37 К несчастью не все драйвера OpenGL поддерживают off-screen rendering.
Название: Re: знатоки, как поступить?! Отправлено: boolean от Октябрь 02, 2012, 13:18 К несчастью не все драйвера OpenGL поддерживают off-screen rendering. и как это узнать? Название: Re: знатоки, как поступить?! Отправлено: Igors от Октябрь 02, 2012, 14:28 Проверить extension: GL_ARB_framebuffer_object
Название: Re: знатоки, как поступить?! Отправлено: navrocky от Октябрь 02, 2012, 14:34 К сведению, OpenGL не всегда ускоряет прорисовку. Хорошо ускоряется рисование деформированных картинок (масштабирование, поворот), заливка цветом. Плохо ускоряется вывод текста, рисование линий, кривых, точек в сравнении с software render.
Название: Re: знатоки, как поступить?! Отправлено: boolean от Октябрь 03, 2012, 06:05 К сведению, OpenGL не всегда ускоряет прорисовку. Хорошо ускоряется рисование деформированных картинок (масштабирование, поворот), заливка цветом. Плохо ускоряется вывод текста, рисование линий, кривых, точек в сравнении с software render. у меня просто матрица 5000 на 5000. из нее все просто пикселями рисуется, масштабируется и т.д. и другой слой - служебная информация. в этом случае подойдет? Название: Re: знатоки, как поступить?! Отправлено: navrocky от Октябрь 03, 2012, 06:45 Вопрос как раз в том, что рисуется из матрицы пикселами? И что за «и т.д.»?
Название: Re: знатоки, как поступить?! Отправлено: ssoft от Октябрь 03, 2012, 06:51 К сведению, OpenGL не всегда ускоряет прорисовку. Хорошо ускоряется рисование деформированных картинок (масштабирование, поворот), заливка цветом. Плохо ускоряется вывод текста, рисование линий, кривых, точек в сравнении с software render. Отлично все ускоряется. Мне пришлось написать свой движок, т.к. Qt и рассмотренные мной другие библиотеки не справляются ни в каком режиме работы. Множество (тысячи) интерактивных часто изменяющихся динамических элементов, состоящие из невыпуклых полигонов, линий, точек и текста. Пара секретов. - желательно отрисовывать сцену как можно за меньшее количество раз (не останавливая конвейер GL). - данные хранить на видеокарте. - текст лучше отображать с использованием текстур (сначала рендеринг символов в текстуру, затем отображаем текст, используя текстурные символы). - текстуры располагать формировать в виде атласа текстур (когда много мелких текстур, располагаются на одной большой). - использовать шейдеры. Название: Re: знатоки, как поступить?! Отправлено: boolean от Октябрь 03, 2012, 07:26 Вопрос как раз в том, что рисуется из матрицы пикселами? И что за «и т.д.»? ну как в любом растровом изображении: матрица хранит информацию о распределении по цветам, яркости и тп. так и у меня, только данные берутся из показаний датчиков. ну соотв доп операции: масштаб, сдвигНазвание: Re: знатоки, как поступить?! Отправлено: boolean от Октябрь 03, 2012, 07:28 Отлично все ускоряется. Мне пришлось написать свой движок, т.к. Qt и рассмотренные мной другие библиотеки не справляются ни в каком режиме работы. случайно не программа УВД?Множество (тысячи) интерактивных часто изменяющихся динамических элементов, состоящие из невыпуклых полигонов, линий, точек и текста. Пара секретов. - желательно отрисовывать сцену как можно за меньшее количество раз (не останавливая конвейер GL). - данные хранить на видеокарте. - текст лучше отображать с использованием текстур (сначала рендеринг символов в текстуру, затем отображаем текст, используя текстурные символы). - текстуры располагать формировать в виде атласа текстур (когда много мелких текстур, располагаются на одной большой). - использовать шейдеры. "Мне пришлось написать свой движок" - это как? обернул классами opengl? за секреты большое спасибо Название: Re: знатоки, как поступить?! Отправлено: navrocky от Октябрь 03, 2012, 08:32 Ну если одна ячейка матрицы отображается одной как-то раскрашенной точкой, то можно и с помощью opengl. Нарисуй одну большую текстуру и ее отображай. Хотя я не могу сказать насколько быстро эта текстура будет обновляться...
Мне кажется единственное преимущество opengl здесь будет в возможности быстро масштабировать и вращать картинку. Если это не нужно, то я бы рисовал с помощью QImage. Название: Re: знатоки, как поступить?! Отправлено: boolean от Октябрь 03, 2012, 08:44 Ну если одна ячейка матрицы отображается одной как-то раскрашенной точкой, то можно и с помощью opengl. Нарисуй одну большую текстуру и ее отображай. Хотя я не могу сказать насколько быстро эта текстура будет обновляться... да,попробую. рассчет еще такой, чтобы максимально разгрузить процессор, поручив граф визуализацию видеокарте. или я не правильно понимаю opengl ?Мне кажется единственное преимущество opengl здесь будет в возможности быстро масштабировать и вращать картинку. Если это не нужно, то я бы рисовал с помощью QImage. Название: Re: знатоки, как поступить?! Отправлено: Igors от Октябрь 03, 2012, 10:18 да,попробую. рассчет еще такой, чтобы максимально разгрузить процессор, поручив граф визуализацию видеокарте. или я не правильно понимаю opengl ? Не то чтобы "неправильно", но довольно "упрощенно" :) Если нет 3D объектов, то использование OpenGL необязательно. Может быть лучше сначала определиться с базовой техникой. Напр часто требуется вывод текста. Это можно сделать неск способами- средствами Qt - вызовами нативных ф-ций OC - текстурами OpenGL Накидать простой примерчик и замерить. Примечание: не надо думать что первые 2 - почти одно и то же. Следующая позиция - напр анти-алиас. Подход тот же. А потом уже делать выводы/обобщения Название: Re: знатоки, как поступить?! Отправлено: boolean от Октябрь 03, 2012, 10:33 да,попробую. рассчет еще такой, чтобы максимально разгрузить процессор, поручив граф визуализацию видеокарте. или я не правильно понимаю opengl ? Не то чтобы "неправильно", но довольно "упрощенно" :) Если нет 3D объектов, то использование OpenGL необязательно. Может быть лучше сначала определиться с базовой техникой. Напр часто требуется вывод текста. Это можно сделать неск способами- средствами Qt - вызовами нативных ф-ций OC - текстурами OpenGL Накидать простой примерчик и замерить. Примечание: не надо думать что первые 2 - почти одно и то же. Следующая позиция - напр анти-алиас. Подход тот же. А потом уже делать выводы/обобщения Название: Re: знатоки, как поступить?! Отправлено: ssoft от Октябрь 03, 2012, 13:02 случайно не программа УВД? "Мне пришлось написать свой движок" - это как? обернул классами opengl? за секреты большое спасибо Он самый - УВД. Написал свои классы, и использовал QGraphicsItem, как менеджер собственных графических объектов. Также полностью обернул классами OpenGL. Получил возможность одновременного отображения Qt элементов и своих. Пришлось повозится с их интерактивностью, зато теперь все "летает". Деталями пока поделится не могу - коммерческий проект. Название: Re: знатоки, как поступить?! Отправлено: boolean от Октябрь 03, 2012, 13:43 Также полностью обернул классами OpenGL. так модуль QOpenGL это и есть же та самая обертка классами. если да, то чем стандартные средства не подошли?неужели в разы проигрывает в скорости? кстати в каком городе работа? Название: Re: знатоки, как поступить?! Отправлено: ssoft от Октябрь 03, 2012, 14:16 Также полностью обернул классами OpenGL. так модуль QOpenGL это и есть же та самая обертка классами. если да, то чем стандартные средства не подошли?неужели в разы проигрывает в скорости? кстати в каком городе работа? Нет в скорости не проигрывает, просто когда писался движок, возможности Qt в OpenGL были скупы. Да и работать нужно напрямую с памятью видеокарты. Хитрости всякие учитывать, которых нет в Qt. Работа в Москве http://lemz.ru/ (http://lemz.ru/) |