2017-10-19 11 views
0

Scene3Dシーンの直方体または平面の面にQMLコンポーネントをレンダリングしようとしています。私は成功の文書化の例を追ってきましたが、私はこれをC++ APIに変換しようとしています。もっと必要なのはC++だけです。これは私のクラスのctorです。これはサンプルコードに基づいてエンティティとそのコンポーネントを設定します。私は簡潔さのためにctorだけを含んでいます。クラスにはこれに影響を与えるべきことが他にありません。Qt3D QtQuick Scene2D(C++を使用)

ESEctoPointToast::ESEctoPointToast(Qt3DCore::QNode *parent) 
: Qt3DCore::QEntity(parent) 
, m_position(QVector3D(0,0,0)) 
, m_quickItem(nullptr) 
, m_cuboid(new Qt3DExtras::QCuboidMesh()) 
, m_textureMaterial(new Qt3DExtras::QTextureMaterial()) 
, m_transform(new Qt3DCore::QTransform()) 
, m_objectPicker(new Qt3DRender::QObjectPicker()) 
, m_texture2d(new Qt3DRender::QTexture2D()) 
, m_renderTargetOutput(new Qt3DRender::QRenderTargetOutput()) 
, m_scene2d(new Qt3DRender::Quick::QScene2D()) 
{ 
    // g_RootQmlObject is the root item in the main scene, this was the only 
    // way I could come up with to access qmlEngine. Is there a better way? 
    auto engine = qmlEngine(g_RootQmlObject); 
    QQmlComponent c(engine, QUrl("qrc:/components/E3DDummy.qml")); 
    m_quickItem = qobject_cast<QQuickItem*>(c.create()); 
    Q_ASSERT(m_quickItem); 

    m_texture2d->setWidth(256); 
    m_texture2d->setHeight(256); 
    m_texture2d->setFormat(Qt3DRender::QAbstractTexture::TextureFormat::RGB8_UNorm); 
    m_texture2d->setGenerateMipMaps(true); 
    m_texture2d->setMagnificationFilter(Qt3DRender::QAbstractTexture::Filter::Linear); 
    m_texture2d->setMinificationFilter(Qt3DRender::QAbstractTexture::Filter::LinearMipMapLinear); 
    m_texture2d->setWrapMode(Qt3DRender::QTextureWrapMode(Qt3DRender::QTextureWrapMode::ClampToEdge)); 
    m_renderTargetOutput->setAttachmentPoint(Qt3DRender::QRenderTargetOutput::AttachmentPoint::Color0); 
    m_renderTargetOutput->setTexture(m_texture2d); 
    m_textureMaterial->setTexture(m_texture2d); 
    m_scene2d->setItem(m_quickItem); 
    m_scene2d->setMouseEnabled(true); 
    m_scene2d->setRenderPolicy(Qt3DRender::Quick::QScene2D::RenderPolicy::Continuous); 
    m_scene2d->setOutput(m_renderTargetOutput); 
    m_scene2d->addEntity(this); 

    addComponent(m_transform); 
    addComponent(m_textureMaterial); 
    addComponent(m_cuboid); 
    addComponent(m_objectPicker); 
} 

私はそれが顔に圧迫ナンセンス赤いテキストでブラックボックスとしてレンダリングする他のクラスからの私Scene3Dに含めます。明らかにこれは正しいことではありません。どこが間違っていたのですか?

これがレンダリングされているものです。 I'm getting a black box with red garbage text, however the text is the same every time.

+0

g_RootQmlObjectは、既存の実行中のQQmlEngineの一部ですか?そうでない場合は、新しいQQmlEngineを開始することができます。 – dragly

+0

はい、g_RootQmlObjectが実行されています。しかし、私は新しいQQmlEngineを試してみるつもりです。 –

+0

残念ながら、いいえ。新しいQQmlEngineを作成すると同じ結果が得られます。 –

答えて

0

これはQtの5.9.x.に存在するバグによって引き起こされますhttps://bugreports.qt.io/browse/QTBUG-60974この時点では実行可能な解決策はありません。どうやら、この現時点では、飛行機の面でQMLをレンダリングすることは壊れています。