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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QT+OpenGL: растеризация  (Прочитано 5229 раз)
bond
Гость
« : Январь 17, 2007, 23:57 »

С трехмеркой никада не сталкивался, а тут диплом навалился :shock:
Подсакажите, пожалуйста, какими алгоритмами реалзиован рендеринг в QT (названия, теорию сам найду) и чем отличается  renderPixmap(...) от grabFrameBuffer(...)? С точки зрения не реализации, а результата - что для чего лучше подходит (отличия QPixmap от QImage, слава Богу, понятны :lol:)
Спасибо!
_____
Qt - 4.1.4, OpenGL - 1.1 (кажется, в общем - Windowый).
Записан
Dendy
Гость
« Ответ #1 : Январь 18, 2007, 00:40 »

Рендеринг в Qt  происходит через QPaintEngine - интерфейс рисования, что перенаправляет операции QPainter'а. Софтвар - собственньІй бьІстрьІй растровьІй движек. АппаратньІй рендеринг - через OpenGL API. Фактически - рисованиями примитивов (+ градиентьІ с помощью шейдеров, если таковьІе имеются). renderPixmap() - прогнать операцию рисования на отдельном контексте, которьІй потом сграбится в картинку. grabFrameBuffer() - преобразовать текущее содержимое буфера в картинку, аналог - glReadPixels().

Собственно, какая задача то?
Записан
bond
Гость
« Ответ #2 : Январь 18, 2007, 10:06 »

Задача - подвести теоритическую базу под уже готовое (программулька - очень обрубленный Paint от трехмерной графики, рендерю через grabFrameBuffer()).
На возможный вопрос: "А че вы там с рендерингом намутили?" ответ: "я - ниче, все Тролли сделали" - не канает. Если попросят поподробнее про использованную технологию растеризации - посылать членов ГАКа читать исходники как-то неудобно.
Про алгоритм растеризации - в исходники, разумеется, нихто заглядывать не станет, и если я назову какой-нить на самом деле не используемый, то ниче особо страшного не случится. Но при этом хочется разобраться, а чтобы почерпнуть че-нить по данному вопросу из исходников QT - надо знать хотябы, какие алгоритмы бывают и вообще, чего искать.
Теперь про использование renderPixmap() и grabFrameBuffer(). Судя по доке, renderPixmap() создает новый контекст, применяет к нему initializeGL(), paintGL() и resizeGL() (может, еще updateGL(), точно не помню), при этом на содержимое создаваемой сцены влияет только функционал перечисленных методов. Если же текущая картинка на сцене - результат вращения, реализованного, например, через обработчик мыши, то renderPixmap() это вращение не учитывает и на выходе дает "первоначальный" вариант отображения объекта, сформированный "стандартными" paintGL() etc.
Таким образом, как я понял, если функционал, влияющий на отображение расположен де-то вне init-paint-resize-updateGL(), то для рендеринга надо использовать grabFrameBuffer(), иначе - renderPixmap() . Я прав?
Записан
bond
Гость
« Ответ #3 : Январь 20, 2007, 02:03 »

Собственно, предзащитлись =)
В смысле, дальнейшее литье воды считаю нецелесообразным и вопрос можно считать закрытым.
Dendy, спасибо за участие.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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