Russian Qt Forum
Ноябрь 24, 2024, 12:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QGLWidget и QGlPixelBuffer  (Прочитано 6763 раз)
DenisProgrammer
Гость
« : Январь 23, 2009, 14:26 »

Всем привет!!!

Пишу приложение на qt 4.4.3 с использованием QGLWidget.

Подскажите пожалуйста:

Как можно реализовать частичную перерисовку изображения?

Будет ли это быстрее чем перерисовка полного экрана?
Записан
Dendy
Гость
« Ответ #1 : Январь 23, 2009, 15:27 »

Всё зависит от сложности сцены. Вообще можно, если сцена 2-х мерная. Если 3D - скорее всего не получится, так как нужно очищать буфер экрана и глубины.
Записан
DenisProgrammer
Гость
« Ответ #2 : Январь 23, 2009, 16:05 »

Расскажите пожалуйста подробнее как реализовать а то я только с классами openGl в QT разбираться начал.
Записан
Dendy
Гость
« Ответ #3 : Январь 23, 2009, 19:38 »

А Qt здесь вообще никаким местом. Только родное API OpenGL. Рисовать нужно точно так же, как и с помощью растровой графики, только не очещать буфер между перерисовками. Но по большому счёту заранее удостоверьтесь надо ли оно вам вообще. Зачастую перерисовать лишь кусок сцены невозможно - только полностью. Даже если вы исхитритесь это сделать, есть шанс что вы загоните себя в тесные рамки.
Записан
DenisProgrammer
Гость
« Ответ #4 : Январь 24, 2009, 19:59 »

В программе, которую пишу используется библиотека, которая работает с OpenGl и наверное поддерживает частичную перерисовку экрана (это я выясняю) а для крос платформенности используется qt(менять на что -то другое уже поздно). Меня интересует как организована частичная перерисовка в приложении использующем QGLWidget. А нужно или не нужно это сложный вопрос. Я думаю нужно сначало реализовать частичную перерисовку в моей программе протестировать и по результатам тестов уже будет ясно. Все это нужно для того чтобы увеличить скорость отрисовки. Порекомендуйте чего - нибудь почитать статьи имеется ввиду или книги где может быть хорошо освещен этот вопрос.
« Последнее редактирование: Январь 24, 2009, 20:01 от DenisProgrammer » Записан
Dendy
Гость
« Ответ #5 : Январь 24, 2009, 22:04 »

Мой совет - сначала сделать полную перерисовку. А потом, если не удовлетворят результаты, сделать частичную. Qt здесь ни при чём, вам нужны книги исключительно по OpenGL.
Записан
DenisProgrammer
Гость
« Ответ #6 : Январь 25, 2009, 01:31 »

Полная перерисовка уже работает. Цель дальнейшая оптимизация.
Записан
kamre
Частый гость
***
Offline Offline

Сообщений: 233


Просмотр профиля
« Ответ #7 : Январь 28, 2009, 00:02 »

Мой совет - сначала сделать полную перерисовку. А потом, если не удовлетворят результаты, сделать частичную. Qt здесь ни при чём, вам нужны книги исключительно по OpenGL.
Без double buffering перерисовка будет не очень смотреться. А как можно в OpenGL и с double buffering, и с partial update сделать? К тому же в Qt вроде ясно написано:
Цитировать
When any visible part of the scene changes or is reexposed, QGraphicsView will update the entire viewport. This approach is fastest when QGraphicsView spends more time figuring out what to draw than it would spend drawing (e.g., when very many small items are repeatedly updated). This is the preferred update mode for viewports that do not support partial updates, such as QGLWidget, and for viewports that need to disable scroll optimization.
Записан
Sergeich
Гость
« Ответ #8 : Февраль 07, 2009, 01:48 »

В свое время делал такую штуку для рендеринга сложных 2D сцен. В основном для оптимицации скроллига и выделения объектов.  Идея такая -  сначала рендеришь сцену в фреймбуфер (пикселбуфер не  юзай - лишние расходы на переключение контекста) или в дополнительный(aux) буфер, затем выводишь полученную картинку в бэк-буфер, в случае скроллинга - со смещением. Потом рендеришь изменившиеся кусочки.
Неплохая подборка статей по OpenGL на русском есть тут: http://steps3d.narod.ru/, ну и по-любому, если собираешься дальше работать с OpenGL - red book.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.192 секунд. Запросов: 23.