QGraphicsView 之上的透明 QGLWidget
我使用 QGraphicsView 来显示 2D 图像,并且还有一个单独的 QGLWidget 窗口来显示一些 3D 对象。我根据 3D 对象的旋转动态更改“QGraphicsView”中显示的图像。
我想在 2D 图像之上渲染一个半透明的 3D 对象,就像 Maya 2009 过去所做的那样(注意视口右上角的立方体): sstatic.net/wdhJA.png" rel="nofollow noreferrer">
(来源:boulevard-creation.com)
是否可以使用我当前的小部件来执行此操作?如果没有的话,怎么办呢?
我能想到的一个选择是在 QGLWidget 中渲染所有内容,并将 2D 图像显示为背景平面上的纹理,但这似乎有点痛苦。
I'm using QGraphicsView
to show a 2D image and also have a separate QGLWidget
window to display some 3D object. I'm dynamically changing the image displayed in `QGraphicsView' based on the rotation of the 3D object.
I would like to render a semi-transparent 3D object on top of the 2D image, something like Maya 2009 used to do (notice the cube in the upper right corner of the viewport):
(source: boulevard-creation.com)
Is it possible to do this with my current widgets? If not, how could it be done?
One option I can think of would be to render everything in QGLWidget
and display the 2D image as a texture on a background plane, but that seems slightly painful.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我找到了一种方法,但速度很慢:您可以像这样简单地将另一个
QGraphicsItem
添加到QGraphicsScene
scene->addPixmap(glWidget->renderPixmap());
可以使用
QGraphicsItem::setOpacity()
设置透明度。应该有一种使用 QPixelBuffer 更快的方法,但我还没有设法正确渲染它。
I have found a way, but it is quite slow: you can simply add another
QGraphicsItem
to theQGraphicsScene
like thisscene->addPixmap(glWidget->renderPixmap());
Transparency can than be set with
QGraphicsItem::setOpacity()
.There should be a faster way using
QPixelBuffer
, but I didn't manage to render to it properly yet.将 qgraphicsview 的视口设置为 qglwidget,然后在您的 Paint 方法中您可以直接使用 gl 调用来绘制 3D 对象。
请参阅http://doc.qt.io/archives/qt-4.7/ qpainter.html#beginNativePainting
Set the viewport of your qgraphicsview to the qglwidget, then in your paint method you can directly use gl calls to draw your 3d objects.
See http://doc.qt.io/archives/qt-4.7/qpainter.html#beginNativePainting