簡體   English   中英

使用C ++的Qt3D QtQuick Scene2D

[英]Qt3D QtQuick Scene2D using C++

我正在嘗試在Scene3D場景中的長方體或平面的表面上渲染QML組件。 我已經成功地遵循了文檔中的示例,但是我試圖將其轉換為C ++ API,因為我需要做更多的事情,僅C ++就足夠了。 這是我的類的ctor,它基於示例代碼來設置Entity及其組件。 為了簡潔起見,我只包括了ctor。 該類中沒有其他應該影響這一點的東西。

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中,在該類中,它呈現為黑匣子,胡扯的紅色文本被擠壓到臉上。 顯然這是不對的。 我哪里出問題了?

這是呈現的內容: 我得到一個帶有紅色垃圾文本的黑匣子,但是每次文本都是相同的。

這是由Qt 5.9.x中存在的錯誤引起的。 https://bugreports.qt.io/browse/QTBUG-60974目前沒有可行的解決方案。 顯然,在5.9.x中,在平面上渲染QML的操作已損壞。

更新:QT報告在5.11.1中不再存在該錯誤。 https://bugreports.qt.io/browse/QTBUG-60974?focusedCommentId=409471&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-409471

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM