Qt3D を使用し、QGLView を使用して複雑な 3D シーンを描画します。
このシーン内の QGLNodeにいくつかのウィジェットを描画する必要がありますが、方法がわかりません。
これは、私がやろうとしていることの最小限の例です(qt3dの「ネスト」デモに基づいています):
ヘッダ:
class CubeView : public QGLView
{
Q_OBJECT
Q_PROPERTY(qreal cubeAngle READ cubeAngle WRITE setCubeAngle)
public:
CubeView(QWidget *parent = 0);
~CubeView();
qreal cubeAngle() const { return cangle; }
void setCubeAngle(qreal angle) { cangle = angle; update(); }
protected:
void initializeGL(QGLPainter *painter);
void paintGL(QGLPainter *painter);
private:
QGLSceneNode *scene;
QGLSceneNode *cube;
QGLFramebufferObject *fbo;
QGLFramebufferObjectSurface fboSurface;
QGLCamera *innerCamera;
qreal cangle;
void drawCube(QGLPainter* painter);
void drawFrameBuffer();
};
初期化中:
void CubeView::initializeGL(QGLPainter *)
{
fbo = new QGLFramebufferObject(512, 512);
fboSurface.setFramebufferObject(fbo);
}
塗装コード:
void CubeView::paintGL(QGLPainter *painter)
{
painter->modelViewMatrix().push();
painter->projectionMatrix().push();
#ifdef DRAW_GLNODE
painter->pushSurface(&fboSurface);
#endif
painter->setCamera(innerCamera);
painter->modelViewMatrix().rotate(cangle, 0.0f, 1.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
#ifdef DRAW_GLNODE
cube->draw(painter);
#else
QPushButton button;
button.resize(fbo->width(), fbo->height());
button.render(fbo); // filling QGLFrameBuffer
#endif
drawFrameBuffer(); // debug QPixmap with QGLFrameBuffer data
#ifdef DRAW_GLNODE
painter->popSurface();
#endif
painter->projectionMatrix().pop();
painter->modelViewMatrix().pop();
drawCube(painter);
}
立方体の描画:
void CubeView::drawCube(QGLPainter *painter)
{
painter->modelViewMatrix().push();
painter->modelViewMatrix().rotate(cangle, 1.0f, 1.0f, 1.0f);
painter->setStandardEffect(QGL::LitDecalTexture2D);
glBindTexture(GL_TEXTURE_2D, fbo->texture());
glEnable(GL_TEXTURE_2D);
cube->draw(painter);
glBindTexture(GL_TEXTURE_2D, 0);
glDisable(GL_TEXTURE_2D);
painter->modelViewMatrix().pop();
}
「#define DRAW_GLNODE」がアクティブな場合、回転する立方体が別の立方体内のテクスチャとして表示されます (左側のウィンドウにフレーム バッファ データが表示されます)。
http://i.stack.imgur.com/Ok4NT.png
「#define 0」に切り替えると、QGLView に黒い画面が表示されますが、ご覧のとおり、QGLFrameBuffer にはデータが含まれています。
http://i.stack.imgur.com/5R6Wz.png
私は何を間違っていますか?