gpt4 book ai didi

c++ - Qt3D QtQuick Scene2D 使用 C++

转载 作者:行者123 更新时间:2023-11-30 05:08:29 25 4
gpt4 key购买 nike

我正在尝试在 Scene3D 场景中的长方体或平面的表面上渲染 QML 组件。我已经成功地遵循了文档中的示例,但是我正在尝试将其转换为 C++ API,因为我需要用它做更多的事情,而只有 C++ 就足够了。这是我的类的构造函数,它根据示例代码设置实体及其组件。为了简洁起见,我只包括了 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 中,在该类中它呈现为黑框,表面上挤满了毫无意义的红色文本。显然这是不对的。我哪里出错了?

这是呈现的内容: I'm getting a black box with red garbage text, however the text is the same every time.

最佳答案

这是由 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

关于c++ - Qt3D QtQuick Scene2D 使用 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46821234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com