我想将OSG场景集成到我的Qt Quick应用程序中 .
似乎正确的方法是使用 QQuickFramebufferObject
类并在 QQuickFramebufferObject::Renderer::render()
内调用 osgViewer::Viewer::frame()
. 我试过用https://bitbucket.org/leon_manukyan/qtquick2osgitem/overview .
但是,似乎这种方法在所有情况下都无法正常工作 . 例如,在Android平台中,此代码仅呈现第一帧 .
我认为问题是 QQuickFramebufferObject
对Qt快速场景图和 QQuickFramebufferObject::Renderer::render()
中调用的代码使用相同的OpenGL上下文 .
所以我想知道,是否有可能使用 QQuickFramebufferObject
正确地将OpenSceneGraph集成到Qt Quick中,或者最好使用 QQuickItem
的实现和单独的OpenGL上下文,如https://github.com/podsvirov/osgqtquick?
1 回答
最简单的方法是使用从QQuickItem派生的QQuickPaintedItem . 虽然它默认提供光栅图像类型的绘图,但您可以将其渲染目标切换为OpenGL FramebufferObject:
那么我们如何用这个OpenGL目标渲染呢?答案仍然可以很好旧QPainter填充了更新/ paint上调用的图像:
虽然QOpenGLFramebufferObject在幕后使用不是QQuickFramebufferObject它的语义几乎就是问题所在,我们已经向问题作者证实我们可以使用QImage作为源代码在OpenGL中进行渲染 .
附:自从Qt 5.7在PC桌面和单板触摸屏Linux设备上成功使用这种技术 . 对Android有点不确定 .