提问人:Sridharan 提问时间:8/1/2023 最后编辑:Rabbid76Sridharan 更新时间:8/23/2023 访问量:88
Qt QSceneLoader对象可以加载和渲染GLB(3D模型)文件吗
Can Qt QSceneLoader object load and render GLB (3D model) file
问:
我正在使用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();
}
答:
glb-format 目前由 asssimp 在最新的 master 上支持。我不确定Qt插件使用的版本是哪个版本。如果导入器不起作用,您可以尝试获取最新的assimp-master并用它加载文件。如果它们正在工作,Qt 使用的提供的 assimp-lib 已经过时了。否则,文件可能无效。
评论