Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] QOpenGL vs QPainter, что быстрее 
:(
    Опции темы
Moby
Дата 24.11.2008, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 6.10.2008

Репутация: нет
Всего: нет



Всем привет!

Все, что я узнал, я узнал из книги Макса Шлее QT профессиональное программирование на С++.

И так. Вот что я знаю. OpenGL, в рамках QT, можно использовать как альтернативу QPainter и QCanvas, если речь идет о 2-D графике. Работать мне предстоит с огромным масcивом точек в одной плоскости, т.е. как раз 2-D. 

Так же я знаю, что QPixmap класс контекстно-зависимого представления. И как написано в книжке "контекстно-зависимое представление позволяет отображать растровые изображение на экране гораздо быстрее, чем контекстно-независимое...".

Если я всё правильно понял, то перейду к вопросу.

Работать придётся, как я уже говорил, с огромным массивом точек. Надо будет работать с отдельным пикселем изображения. QPixmap мне подходит по своей функциональности. До главы про OpenGL я только добрался, так что не до конца представляю, на сколько мне поможет QGL.

Так вот вопрос. Какое из средств будет работать быстрее QPixmap или средства OpenGL?

OpenGL, если не ошибаюсь, полностью аппаратно укорено, а что насчет QPainter?
PM MAIL ICQ   Вверх
Elfebet
Дата 24.11.2008, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 545
Регистрация: 15.5.2006
Где: Украина. Запорожь е.

Репутация: 5
Всего: 14



Я скажу так, да OpenGL - быстрее, но QPainter - по качеству графики лучше. Тут все зависит от конкретной задачи, если ты говориш что у тебя будет огромное количество точек - то тут я думаю разницы не будет, а разница будет в перерисовке, т.е. зависит от видеокарты. А видеокарты сейчас такие что ты разницу в скорости не заметиш, а заметиш только качество графики.
Ну и если у тебя часто будет идти перерисовка, т.е. точки постоянно меняються - то ту выйграет OpenGL.
А если можно сохранить один раз твой график в QPixmap и не перерисовывать - то QPainter.

всего лишь ИМХО. 

И все таки я за QPainter. Более удобней smile


--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
mes
Дата 24.11.2008, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 7
Всего: 250



Цитата(Moby @  24.11.2008,  16:30 Найти цитируемый пост)
Работать мне предстоит с огромным масcивом точек в одной плоскости

а какой вид работы над этими точками ? обработка изображения и вывод его на экран или вывод примитивов на основе массива точек ?
для попиксильной работы опенгл не очень подходит, а вот выводить примитивы -это работа для него, плюс многие карты имеют хардварную поддержку опенгл.


--------------------
PM MAIL WWW   Вверх
SABROG
Дата 24.11.2008, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Я бы предложил попробовать оба варианта на максимальной загрузке, так чтобы видео-карта не справлялась smile
А результаты выложить сюда.

Кстати 2d прорисовка окон аппаратно ускоряется как в винде так и в линуксе благодаря видюхе и драйверам под нее. У меня есть компьютер со встроенной видюхой, где базовые функции аппаратного ускорения работают. Однако мощностей не хватает на NFS:Undeground и UT2004, лагает дико, иногда зависает, перезагружает комп или вываливается в кору. Если же отключить аппаратное ускорение в свойствах рабочего стола, то лагать начинают уже обычные окна, мерцают, долго всплывают и т.п. Точно такая же картина наблюдается в линуксе с драйвером VESA, это единственный драйвер, который согласился работать со встроенной видюхой, остальные 2 как бы предназначенные под нее - не работают даже в обычном режиме. 

Так вот и получается, что и для OpenGL идет ускорение и для обычного окна. Хотелось бы узнать, что же все-таки ускоряется лучше...


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Ches
Дата 25.11.2008, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 19.8.2008

Репутация: нет
Всего: 3



Цитата(SABROG @  24.11.2008,  21:33 Найти цитируемый пост)
У меня есть компьютер со встроенной видюхой, где базовые функции аппаратного ускорения работают. Однако мощностей не хватает на NFS:Undeground и UT2004, лагает дико, иногда зависает, перезагружает комп или вываливается в кору. 

А что за видюха? в любом случае - это ненормальная работа. Перезагрузок и т.п. не должно быть.  NFS:Undeground и UT2004 могут не поддерживаться не из-за недостатка мощности, а из-за отсутствия аппаратной поддержки шейдеров и т.д.
Цитата(SABROG @  24.11.2008,  21:33 Найти цитируемый пост)
остальные 2 как бы предназначенные под нее - не работают даже в обычном режиме

Либо на видюхе что-то выгорело, либо материнка лажает. Аналогичная картина была, когда знакомый перепаял кондеры на материнке.

Цитата(SABROG @  24.11.2008,  21:33 Найти цитируемый пост)
Так вот и получается, что и для OpenGL идет ускорение и для обычного окна. Хотелось бы узнать, что же все-таки ускоряется лучше... 

Ускоряется одинаково. Разницы в скорости не должно быть.

Цитата(Moby @  24.11.2008,  16:30 Найти цитируемый пост)
Работать мне предстоит с огромным масcивом точек в одной плоскости, т.е. как раз 2-D.

Думаю, нужно немного конкретизировать
PM MAIL ICQ   Вверх
SABROG
Дата 25.11.2008, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(Ches @  25.11.2008,  08:46 Найти цитируемый пост)
А что за видюха? в любом случае - это ненормальная работа. Перезагрузок и т.п. не должно быть.  NFS:Undeground и UT2004 могут не поддерживаться не из-за недостатка мощности, а из-за отсутствия аппаратной поддержки шейдеров и т.д.


Я про нее писал в блоге в теме про Ubuntu. Расстраивает то, что в винде оно хоть как-то ускоряется, а в линуксе даже дрова не заводятся.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Moby
Дата 25.11.2008, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 6.10.2008

Репутация: нет
Всего: нет



Спасибо, не ожидал столько ответов. Да, вы правы, надо конкретизировать. Сейчас попробую объяснить подробнее с картинками.

Изначально я пытался реализовать это на C# и GDI+. Тормозит, а при большом кол-ве точек вообще виснет. Да, можно оптимизировать, продумать, но в итоге все равно будет не то.

Вот перешел на С++ и QT.

Посмотрите на картинки.

Есть два изображения. Оба состоят из рандомного набора точек. В одном изображение синие точки, в другом красные.
Эти два изображения начинают двигаться друг на друга. Когда они начинают пересикаться, то какие-то точки начинают "накрывать" друг друга. 

Так вот задача. Когда две точки накрываются, то надо что бы результирующий цвет видимой точки был смешанного, то есть грубо говоря синий + красный = розовый.

Либо есть еще один вариант, когда два изображения изначально наложены друг на друга(тут то же должно учитываться смешивание цвета наложенных точек) и начинают двигаться в разные стороны.


user posted image

user posted image
 
Вроде смог объяснить, что надо сделать. smile

Вопрос остается тот же.  Даже еще один возник.

1 - Что быстрее будет в этом случае работать. OpenGL или QPainter?

2 - И какие способы посоветуете для реализации этой задачи?

PM MAIL ICQ   Вверх
Elfebet
Дата 25.11.2008, 13:27 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 545
Регистрация: 15.5.2006
Где: Украина. Запорожь е.

Репутация: 5
Всего: 14



Э-э-э-э.. Из выше приведенного примера понятно что проблема вообще не в языке программирования и не в openGL или qpainter а проблема в алгоримте реализации такой вещи. Тут нужна математика.

Цитата

Так вот задача. Когда две точки накрываются, то надо что бы результирующий цвет видимой точки был смешанного, то есть грубо говоря синий + красный = розовый.

прочитай в ассистенте про Alpha-Blended Drawing 

я бы сделал так для каждой цветной точки поставил легкую прозначность(т.е. не для каждой точки а для в целом рисунка, как я понял это текстура) и все  задача решена smile
QT сама при смешивании цветов отобразит как должно

если это не решение, тогда всю математику пребираний точек и смешивание цветов вывести в поток после этого сохранить в QPixmap и отрисовать
есть хороший пример в QT "examples\threads\mandelbrot" - может помочь в твоей задаче


Это сообщение отредактировал(а) Elfebet - 25.11.2008, 13:38


--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
mes
Дата 25.11.2008, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 7
Всего: 250



Цитата(Moby @  25.11.2008,  12:28 Найти цитируемый пост)
Есть два изображения. Оба состоят из рандомного набора точек. В одном изображение синие точки, в другом красны.
Когда две точки накрываются, то надо что бы результирующий цвет видимой точки был смешанного


Как я понял, Вам нужен вывод на экран двух  наложеных друг на друга текстур с эффектом альфа блендинга.

В  ОпенГл сможете не только наложить друг на друга, но и применить многие эффекты - как, например, наложение под углом.
а также задать способ блендинга.

Если QPainter  может смешивать цвета и нужно "классическое" наложение , то  оба варианта по скорости вывода будут  равноценны.

Цитата(Moby @  25.11.2008,  12:28 Найти цитируемый пост)
Изначально я пытался реализовать это на C# и GDI+. Тормозит, а при большом кол-ве точек вообще виснет

Судя по всему, раньше Вы выводили текстуры поточечно, с ручным просчетом цвета - представляю как медлено это было.




Это сообщение отредактировал(а) mes - 25.11.2008, 13:35


--------------------
PM MAIL WWW   Вверх
Moby
Дата 25.11.2008, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 6.10.2008

Репутация: нет
Всего: нет



Цитата(Elfebet @  25.11.2008,  13:27 Найти цитируемый пост)
прочитай в ассистенте про Alpha-Blended Drawing 

я бы сделал так для каждой цветной точки поставил легкую прозрачность(т.е. не для каждой точки а для в целом рисунка, как я понял это текстура) и все  задача решена smile


Цитата(mes @  25.11.2008,  13:32 Найти цитируемый пост)

Как я понял, Вам нужен вывод на экран двух  наложенных друг на друга текстур с эффектом альфа блендинга.


Прозрачность и альфа-блендинг как я понял это одно и тоже?! Но мне прозрачность не подходит. Тот результируюший цвет, что дает смешивание, к примеру, красного и синего, будет отличаться от цвета полученого при наложении с прозрачнастью. И в итоге через стерео очки будет немного другой эффект.


Цитата(mes @  25.11.2008,  13:32 Найти цитируемый пост)
Судя по всему, раньше Вы выводили текстуры поточечно, с ручным просчетом цвета - представляю как медленно это было.


Сперва так и было, но потом я создавал битмап и с ним работал. Проблема особо не решилась. Конечно, в моем случае еще и правильный алгоритм нужен. Но думаю использование QT\C++ против C#\GDI+ даст заметное преимущество.

Это сообщение отредактировал(а) Moby - 25.11.2008, 14:26
PM MAIL ICQ   Вверх
Ches
Дата 25.11.2008, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 19.8.2008

Репутация: нет
Всего: 3



Цитата(mes @  25.11.2008,  13:32 Найти цитируемый пост)
В  ОпенГл сможете не только наложить друг на друга, но и применить многие эффекты - как, например, наложение под углом.
а также задать способ блендинга.

Полностью согласен, предлагаю почитать это

Добавлено через 3 минуты и 10 секунд
Цитата(Moby @  25.11.2008,  14:26 Найти цитируемый пост)
Но мне прозрачность не подходит

Ага, нужно "Цветовое наложение". Читаем и смотрим примеры по ссылке

PM MAIL ICQ   Вверх
Moby
Дата 25.11.2008, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 6.10.2008

Репутация: нет
Всего: нет



О... Спасиб огромное, ща буду разбираться. Спасибо. 

P.S. Хотя глазами пробежался и вот на такой рисунок наткнулся. 

user posted image

Если это наложение, то это не то. В моем случае без разницы, что наверху. Ведь, грубо говоря, сложение цвета даст одинаковый результат.

Тут больше похоже на прозрачность. Лано, надо будет почитать.

Это сообщение отредактировал(а) Moby - 25.11.2008, 15:19
PM MAIL ICQ   Вверх
mes
Дата 25.11.2008, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 7
Всего: 250



Цитата(Moby @  25.11.2008,  14:26 Найти цитируемый пост)

Прозрачность и альфа-блендинг 

нет не одно и то же . Прозрачность - частный случай альфа блендинга.

Цитата(Moby @  25.11.2008,  15:09 Найти цитируемый пост)
P.S. Хотя глазами пробежался и вот на такой рисунок наткнулся. 
Если это наложение, то это не то. В моем случае без разницы, что наверху. Ведь, грубо говоря, сложение цвета даст одинаковый результат.

Да это  наложение, один из вариантов результата. Конечный результат смешивания зависит от формулы смешивания. (по вышеприведеной ссылке : 6.1.1  Факторы источника и приемника )
а еше поишите в гугле уроки от  NeHе   - там много примеров того, что можно получить с помощью OpenGL.


--------------------
PM MAIL WWW   Вверх
SABROG
Дата 25.11.2008, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Какой метод может использоваться, если пересекаются красный и черный, причем не важно какой из них сверху или снизу ? В итоге получается черный.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Moby
Дата 25.11.2008, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 6.10.2008

Репутация: нет
Всего: нет



Цитата(mes @  25.11.2008,  16:12 Найти цитируемый пост)
а еше поишите в гугле уроки от  NeHе   - там много примеров того, что можно получить с помощью OpenGL.


Не смог найти эти уроки. Ссылочкой не поможите?




Это сообщение отредактировал(а) Moby - 25.11.2008, 17:47
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0628 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.