我有应该在运行时创建和删除的实体。实体只有材料和网格组件。材质是 QDiffuseMapMaterial 和 QTextureImage。
当实体开始从场景中添加和删除时,有时应用程序会因此断言而崩溃:
qt_assert:断言:文件../../include/Qt3DRender/5.8.0/Qt3DRender/private/../../../../../src/render/texture中的“img!= nullptr” /apitexturemanager_p.h,第 286 行
但不幸的是,我无法弄清楚为什么会这样。我以这种方式添加实体:
QEntity * visibleObject = new QEntity();
QDiffuseMapMaterial * material = new QDiffuseMapMaterial();
QTextureImage * diffuseTextureImage = new QTextureImage();
diffuseTextureImage->setSource(QUrl("qrc:/resources/tile.png"));
material->diffuse()->addTextureImage(diffuseTextureImage);
visibleObject->addComponent(material);
// set mesh
QPlaneMesh * mesh = new QPlaneMesh();
mesh->setWidth(1.0 / 2);
mesh->setHeight(1.0 / 2);
visibleObject->addComponent(mesh);
visibleObject->setParent(_rootEntity);
并像这样删除:
delete visibleObject;
_rootEntity
是 cpp 代码中定义的场景根实体。使用 Scene3D 在 QML 文件中定义的场景:
Scene3D {
id: scene
anchors.fill: parent
aspects: ["render", "logic", "input"]
entity: rootEntity
}
并_rootEntity
像这样通过:
context->setContextProperty("rootEntity", _rootEntity);
如果有必要,我可以准备重现问题的简单示例。
谢谢。