4

我尝试使用 QSceneLoader 加载在外部编辑器中创建的 3d 场景未成功。而且我总是在加载阶段得到断言。我使用 OBJ 模型 qt 的示例,它很容易加载为 QMesh。

测试回购https://bitbucket.org/ibnz/test_qt3d

#include <QApplication>
#include <QEntity>
#include <QSceneLoader>
#include <Qt3DWindow>

int main(int argc, char **argv)
{
    QApplication app(argc, argv);
    Qt3DExtras::Qt3DWindow *view = new Qt3DExtras::Qt3DWindow();

    Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity();

    Qt3DRender::QSceneLoader *loader = new Qt3DRender::QSceneLoader(rootEntity);
    QObject::connect(loader, &Qt3DRender::QSceneLoader::statusChanged,
                     &app, [](Qt3DRender::QSceneLoader::Status s){qDebug() << s;});
    QUrl url = QUrl::fromLocalFile(":/obj/square-pot.obj");
    loader->setSource(url);

    view->setRootEntity(rootEntity);
    view->show();

    return app.exec();
}

Qt3DRender::QSceneLoader::Status(Loading) 断言:文件 io\qsceneloader.cpp 中的“entities.size() == 1”,第 215 行调试错误!

程序:C:\Qt\Qt5.8.0\5.8\msvc2015\bin\Qt5Cored.dll 模块:5.8.0 文件:global\qglobal.cpp 行:3070

断言:文件 io\qsceneloader.cpp 中的“entities.size() == 1”,第 215 行

(按重试调试应用程序)Qt3DRender::QSceneLoader::Status(Ready)

4

1 回答 1

1

我使用http://code.qt.io/cgit/qt/qt3d.git/tree/tests/manual/assimp-cpp来加载我自己的 Collada 机器人模型,该模型可以正常工作。重要的几行是:

// Root entity
Qt3DCore::QEntity *sceneRoot = new Qt3DCore::QEntity();
...
// Scene loader
Qt3DCore::QEntity *sceneLoaderEntity = new Qt3DCore::QEntity(sceneRoot);
Qt3DRender::QSceneLoader *sceneLoader = new Qt3DRender::QSceneLoader(sceneLoaderEntity);
SceneWalker sceneWalker(sceneLoader);
QObject::connect(sceneLoader, &Qt3DRender::QSceneLoader::statusChanged, &sceneWalker, &SceneWalker::onStatusChanged);
sceneLoaderEntity->addComponent(sceneLoader);

所以用你的 obj 文件试试。

于 2017-05-01T05:52:39.060 回答