Название: OpenGL+WebKit - нужен совет Отправлено: UnSeen от Сентябрь 19, 2011, 16:43 Задача в следующем: требуется создать приложение, отображающее трёхмерную графику с помощью OpenGL, поверх которой рисуется веб-содержимое.
После непродолжительных поисков обнаружил что это, вероятно, можно легко реализовать на Qt. Возможно даже несколькими способами. Но чуть более продолжительные поиски не дали точных результатов :) Примеров именно того, что мне требуется, найти не удалось. Возможно вы подскажете, как лучше сделать. Qt никогда не использовал, так что мои знания и представления о нём пока весьма поверхностные. Может QGraphicsView + QGLWidget + QGraphicWebView ? Если да, то как их связать? Что происходит, когда мы задаём setViewport(new QGLWidget()), каким образом WebView пользуется им и как втиснусть свою отрисовку перед ним? (так чтобы 3d сцена использовась в качестве фона). Или какие-то другие способы? Может просто один виджет поверх другого (QGLWidget + QWebView)? Но тогда, вероятно, рисование будет происходить менее оптимальным образом - насколько я понимаю, если так вобще можно, они будут рисоваться в разные буферы и потом объединяться. Ещё какие-нибудь варианты? Плюсы, минусы, подводные камни? © Приложение под Windows, если это важно. WebGL не предлагать :) Название: Re: OpenGL+WebKit - нужен совет Отправлено: alexman от Сентябрь 20, 2011, 08:53 Можно попробовать QGraphicsView c viewport QGLWidget. На сцену можно добавить QWebView с помощью QGraphicsProxyWidget * QGraphicsScene::addWidget ( QWidget * widget, Qt::WindowFlags wFlags = 0 ).
Порядок отрисовки элементов задается void QGraphicsItem::setZValue ( qreal z ). UPDATE: извиняюсь, но Цитировать трёхмерную графику не сразу увидел (так что хз реально ли это таким способом).Название: Re: OpenGL+WebKit - нужен совет Отправлено: UnSeen от Сентябрь 20, 2011, 10:51 Можно попробовать QGraphicsView c viewport QGLWidget. На сцену можно добавить QWebView с помощью QGraphicsProxyWidget * QGraphicsScene::addWidget ( QWidget * widget, Qt::WindowFlags wFlags = 0 ). Насколько я понял, можно сразу QGraphicWebView добавить, без прокси. Но дело не в томUPDATE: извиняюсь, но Ага...Цитировать трёхмерную графику не сразу увидел (так что хз реально ли это таким способом).Вопрос в том, куда вклиниться с отрисовкой. Какие-то методы переопределить может быть. Но чтобы это оптимально сделать, нужно представлять как реализованы эти все Graphics Scene / View / Item, что происходит когда ставится viewport QGLWidget и т.п. Я до этого с Qt дел не имел, а в документации подробности реализации не раскрыты, только как всё должно работать при стандартном использовании. Поэтому нужен совет бывалых :) Мне кажется QGraphicsView c viewport QGLWidget в любом случае будет лучшим вариантом (только я пока не знаю как это сделать) - только так получится рисовать оптимальным способом: сначала трёхмерная сцена, потом в тот_же буфер поверх рисуется WebView. Никаких лишних наложений буферов размером с экран. С другой стороны, трёхмерная сцена будет обновляться чаще (постоянно, насколько скорости хватает), а содержимое WebView будет меняться гораздо реже. Может быть возможно и имеет смысл как-то рисовать WebView в отдельный буфер (который будет обновляться по мере необходимости - когда произошли изменения), и накладывать его на 3д сцену? Вобщем куча ламерских вопросов :) Название: Re: OpenGL+WebKit - нужен совет Отправлено: GreatSnake от Сентябрь 20, 2011, 11:48 Цитировать Может быть возможно и имеет смысл как-то рисовать WebView в отдельный буфер (который будет обновляться по мере необходимости - когда произошли изменения), и накладывать его на 3д сцену? Можно попробовать такой вариант.Создать WebView на каком-нибудь виджете и загнать его за пределы экрана, выставить ему setAttribute( Qt::WA_PaintOnScreen ) и сделать его видимым. Повесить на него eventFilter() и следить за QEvent::UpdateRequest. При отработке этого события через WebView::render() получаем, допустим, QImage. Без таких махинаций WebView::update() не будет отрабатывать. Далее рендеришь этот QImage в GL. Название: Re: OpenGL+WebKit - нужен совет Отправлено: UnSeen от Сентябрь 20, 2011, 12:57 Кажется, решение найдено!
Ставим QGLWidget на viewport и делаем свою обработку QGraphicsScene::drawBackground(QPainter *painter, const QRectF &rect) Там уже установлен нужный контекст и можно просто использовать функции OpenGL Правда придётся на каждом кадре устанавливать заново матрицу проекции (и некоторые другие опции, вероятно), но это уже мелочи Название: Re: OpenGL+WebKit - нужен совет Отправлено: artiom_kh от Сентябрь 27, 2011, 12:33 можно обойтись и без сцены - у QWebView берется указатель на страницу (метод QWebView::page, возвращает указатель на QWebPage), далее дёргаем QWebPage::setView
|