Pergunta

estou a usar QGraphicsView para mostrar uma imagem 2D e também ter um separado QGLWidget Janela para exibir algum objeto 3D. Estou alterando dinamicamente a imagem exibida em `qgraphicsView 'com base na rotação do objeto 3D.

Eu gostaria de renderizar um objeto 3D semi-transparente na parte superior da imagem 2D, algo como Maya 2009 costumava fazer (observe o cubo no canto superior direito da viewport): Maya 2009 screenshot
(fonte: boulevard-creation.com)

É possível fazer isso com meus widgets atuais? Caso contrário, como isso poderia ser feito?

Uma opção em que posso pensar seria renderizar tudo em QGLWidget e exiba a imagem 2D como uma textura em um plano de fundo, mas isso parece um pouco doloroso.

Foi útil?

Solução

Eu encontrei um caminho, mas é bastante lento: você pode simplesmente adicionar outro QGraphicsItem para o QGraphicsScene assim

scene->addPixmap(glWidget->renderPixmap());

A transparência pode ser definida com QGraphicsItem::setOpacity().

Deve haver uma maneira mais rápida usando QPixelBuffer, mas ainda não consegui renderizar isso corretamente.

Outras dicas

Defina a viewport do seu QGraphicsView como o QGLWidget e, no seu método de pintura, você pode usar diretamente as chamadas GL para desenhar seus objetos 3D.

Ver http://doc.qt.io/archives/qt-4.7/qpainter.html#beginnativePainting

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top