Qt QSceneLoader对象可以加载和渲染GLB(3D模型)文件吗

Can Qt QSceneLoader object load and render GLB (3D model) file

提问人:Sridharan 提问时间:8/1/2023 最后编辑:Rabbid76Sridharan 更新时间:8/23/2023 访问量:88

问:

我正在使用Qt6.5.2。我的期望是加载GLB文件并将其呈现在Qt窗口中。根据 QSceneLoader 类的 Qt 文档,QT 支持 GLB 文件,但在我的 Qt 应用程序中加载 GLB 文件时,我收到以下错误,

Qt3D.Renderer.SceneLoaders:类 Qt3DCore::QEntity *__cdecl Qt3DRender::Render::LoadSceneJob::tryLoadScene(枚举 Qt3DRender::QSceneLoader::Status &,const 类 QList &,const 类 std::function<void __cdecl(类 Qt3DRender::QSceneImporter *)> &) 没有找到合适的导入器插件 for QUrl(“file:///D:/Work/2023/Box.glb”)

我已经检查了我的 QT 安装路径。assimpsceneimport.dll,gltfsceneexport.dll,gltfsceneimport.dll等插件可用。

我能够加载和渲染“.dae”文件,它适用于以下代码。但是,在加载“.glb”文件时,我收到“找不到合适的导入器”错误。我已经尝试过 gltf 1.0 和 gltf 2.0 版本的 3d 模型,但我遇到同样的错误。

int main(int ac, char **av)
{
    QApplication app(ac, av);
    Qt3DExtras::Qt3DWindow view;
    view.defaultFrameGraph()->setClearColor(Qt::black);

    // Root entity
    Qt3DCore::QEntity *sceneRoot = new Qt3DCore::QEntity();

    // Scene camera set here

    // Scene loader
    Qt3DCore::QEntity *sceneLoaderEntity = new Qt3DCore::QEntity(sceneRoot);
    Qt3DRender::QSceneLoader *sceneLoader = new Qt3DRender::QSceneLoader(sceneLoaderEntity);
    sceneLoaderEntity->addComponent(sceneLoader);

    QUrl sourceFileName = QUrl::fromLocalFile("D:/Work/2023/Box.glb");
    sceneLoader->setSource(sourceFileName);

    view.setRootEntity(sceneRoot);
    view.show();

    return app.exec();
}
C++ Qt gltf Assimp

评论


答:

0赞 KimKulling 8/23/2023 #1

glb-format 目前由 asssimp 在最新的 master 上支持。我不确定Qt插件使用的版本是哪个版本。如果导入器不起作用,您可以尝试获取最新的assimp-master并用它加载文件。如果它们正在工作,Qt 使用的提供的 assimp-lib 已经过时了。否则,文件可能无效。