我在使用简单的测试应用程序将 openflight (*.flt) 模型加载到 Openscenegraph 时遇到问题:
#include <osgDB/ReadFile>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
// Setting the message level low so I can read Debug messages
osg::setNotifyLevel(osg::NotifySeverity::DEBUG_FP);
cout << "Opening flt file..." << endl;
osg::ref_ptr<osg::Node> mdl = osgDB::readNodeFile(argv[1]);
if (mdl != NULL) cout << "Opening flt file successful" << endl;
else cout << "Opening flt file failed" << endl;
return 0;
}
这应该通过将文件作为参数传递给应用程序来读取文件 pyramid.flt
,该文件位于我的可执行目录中。但是,OSG 似乎无法加载所需的 Openflight 插件来真正读取文件。因此程序在尝试加载时返回 NULL。
奇怪的是,调试消息告诉我正在使用所需的 DLL,如下所示:
Opening flt file...
itr='C:\dev\CgfGen\build32\3dviewer\Debug'
FindFileInPath() : trying C:\dev\CgfGen\build32\3dviewer\Debug\osgPlugins-3.4.1\osgdb_openflightd.dll ...
FindFileInPath() : USING C:\dev\CgfGen\build32\3dviewer\Debug\osgPlugins-3.4.1\osgdb_openflightd.dll
DynamicLibrary::failed loading "osgPlugins-3.4.1/osgdb_openflightd.dll"
Warning: Could not find plugin to read objects from file "pyramid.flt".
Opening flt file failed
我的 pyramid.flt 在 Openflight 版本 16.5 中。
我正在运行我的应用程序的调试版本。
OSG 正在加载 osgdb_openflightd.dll
有人知道问题出在哪里吗?以及如何解决?
最佳答案
FindFileInPath() : USING C:\dev\CgfGen\build32\3dviewer\Debug\osgPlugins-3.4.1\osgdb_openflightd.dll
这只是意味着 OSG 已经发现了一个与它正在寻找的文件名相匹配的文件,但并不意味着它已经成功地使用了它。下一行:
DynamicLibrary::failed loading "osgPlugins-3.4.1/osgdb_openflightd.dll"
表示插件加载失败。这可能是因为插件自身的依赖项存在问题。您是否从头开始自己构建 OSG 和插件?
您或许可以使用 depends.exe 检查并查看您的 FLT 插件需要哪些其他 DLL。您还可以使用 SysInternals 的进程监视器之类的东西来查看 OSG 在
关于c++ - OpenSceneGraph 未加载 openflight 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49012609/