Название: QT+OpenGL: растеризация Отправлено: bond от Январь 17, 2007, 23:57 С трехмеркой никада не сталкивался, а тут диплом навалился :shock:
Подсакажите, пожалуйста, какими алгоритмами реалзиован рендеринг в QT (названия, теорию сам найду) и чем отличается renderPixmap(...) от grabFrameBuffer(...)? С точки зрения не реализации, а результата - что для чего лучше подходит (отличия QPixmap от QImage, слава Богу, понятны :lol:) Спасибо! _____ Qt - 4.1.4, OpenGL - 1.1 (кажется, в общем - Windowый). Название: QT+OpenGL: растеризация Отправлено: Dendy от Январь 18, 2007, 00:40 Рендеринг в Qt происходит через QPaintEngine - интерфейс рисования, что перенаправляет операции QPainter'а. Софтвар - собственньІй бьІстрьІй растровьІй движек. АппаратньІй рендеринг - через OpenGL API. Фактически - рисованиями примитивов (+ градиентьІ с помощью шейдеров, если таковьІе имеются). renderPixmap() - прогнать операцию рисования на отдельном контексте, которьІй потом сграбится в картинку. grabFrameBuffer() - преобразовать текущее содержимое буфера в картинку, аналог - glReadPixels().
Собственно, какая задача то? Название: QT+OpenGL: растеризация Отправлено: bond от Январь 18, 2007, 10:06 Задача - подвести теоритическую базу под уже готовое (программулька - очень обрубленный Paint от трехмерной графики, рендерю через grabFrameBuffer()).
На возможный вопрос: "А че вы там с рендерингом намутили?" ответ: "я - ниче, все Тролли сделали" - не канает. Если попросят поподробнее про использованную технологию растеризации - посылать членов ГАКа читать исходники как-то неудобно. Про алгоритм растеризации - в исходники, разумеется, нихто заглядывать не станет, и если я назову какой-нить на самом деле не используемый, то ниче особо страшного не случится. Но при этом хочется разобраться, а чтобы почерпнуть че-нить по данному вопросу из исходников QT - надо знать хотябы, какие алгоритмы бывают и вообще, чего искать. Теперь про использование renderPixmap() и grabFrameBuffer(). Судя по доке, renderPixmap() создает новый контекст, применяет к нему initializeGL(), paintGL() и resizeGL() (может, еще updateGL(), точно не помню), при этом на содержимое создаваемой сцены влияет только функционал перечисленных методов. Если же текущая картинка на сцене - результат вращения, реализованного, например, через обработчик мыши, то renderPixmap() это вращение не учитывает и на выходе дает "первоначальный" вариант отображения объекта, сформированный "стандартными" paintGL() etc. Таким образом, как я понял, если функционал, влияющий на отображение расположен де-то вне init-paint-resize-updateGL(), то для рендеринга надо использовать grabFrameBuffer(), иначе - renderPixmap() . Я прав? Название: QT+OpenGL: растеризация Отправлено: bond от Январь 20, 2007, 02:03 Собственно, предзащитлись =)
В смысле, дальнейшее литье воды считаю нецелесообразным и вопрос можно считать закрытым. Dendy, спасибо за участие. |