QGLWidget transparente en la parte superior de QGraphicsView
-
26-09-2019 - |
Pregunta
Estoy usando QGraphicsView
para mostrar una imagen de 2D y también tienen una ventana separada QGLWidget
para mostrar un objeto 3D. Estoy cambiando dinámicamente la imagen que aparece en `QGraphicsView' basado en la rotación del objeto 3D.
Me gustaría hacer que un objeto 3D semitransparente en la parte superior de la imagen en 2D, algo así como Maya 2009 solía hacer (nótese el cubo en la esquina superior derecha de la ventana):
(fuente: boulevard-creation.com )
¿Es posible hacer esto con mis reproductores actuales? Si no, ¿cómo se podría hacer?
Una de las opciones que se me ocurre sería la de hacer todo en QGLWidget
y mostrar la imagen en 2D como una textura de fondo en un avión, pero que parece un poco doloroso.
Solución
Me han encontrado una manera, pero es bastante lento: sólo tiene que añadir otro QGraphicsItem
a la QGraphicsScene
como esto
scene->addPixmap(glWidget->renderPixmap());
La transparencia puede que ajustarse con QGraphicsItem::setOpacity()
.
No debe haber una manera más rápida usando QPixelBuffer
, pero no logró hacer con ella adecuadamente todavía.
Otros consejos
Configurar la vista de su QGraphicsView a la qglwidget, a continuación, en el método de pintura que se puede utilizar directamente las llamadas gl para dibujar los objetos 3D.
http://doc.qt.io/archives/qt -4.7 / qpainter.html # beginNativePainting