查看: 3148|回复: 10

请教OSG静态编译jpg无法读取的问题

[复制链接]

该用户从未签到

发表于 2014-5-12 16:49:27 | 显示全部楼层 |阅读模式
静态编译OSG 设置MT。编译了jpg三方库。
USE_OSGPLUGIN(jpeg)
#pragma comment(lib, "jpeg.lib")
vs2010下运行成功,也没有提示Warning: Could not find plugin to read objects from file“XXX.jpg“
但是就是没有图像信息,读取不了jpg。
请教各位大神该如何解决。

该用户从未签到

发表于 2014-5-12 17:23:45 | 显示全部楼层
jpeg插件设置成MT编译了吗?

该用户从未签到

 楼主| 发表于 2014-5-12 17:26:45 | 显示全部楼层
设置了是MT的,程序编译连警告都没有。
直接运行后,模型显示了,图像没有。

该用户从未签到

发表于 2014-5-12 17:27:19 | 显示全部楼层
本帖最后由 cenfer 于 2014-5-12 17:28 编辑

首先在静态jpeg第三方插件下编译osgdb_jpeg插件。
我用的OSG官网上下的第三方插件libjpeg.lib。

然后做下面的设置

#pragma comment(lib, "libjpeg.lib") //第三方插件

//osg插件
USE_OSGPLUGIN(jpeg)
#if defined(_DEBUG)
#pragma comment(lib, "osgdb_jpegd.lib")
#else
#pragma comment(lib, "osgdb_jpeg.lib")
#endif

检查下你的OSG静态编译CMake的第三方插件配置
然后就是按上面提示检查下应用程序静态库的配置有什么遗漏

该用户从未签到

 楼主| 发表于 2014-5-13 08:35:08 | 显示全部楼层
cenfer 发表于 2014-5-12 17:27
首先在静态jpeg第三方插件下编译osgdb_jpeg插件。
我用的OSG官网上下的第三方插件libjpeg.lib。

"首先在静态jpeg第三方插件下编译osgdb_jpeg插件。"
是什么意思?
我是直接单独下载libjpeg源码,然后MT,编译成功后将头文件和lib拷贝到3rdParty里面。
然后CMAKE改目录参数,去掉2个勾,生成vs2010工程。
然后all build。
build中除了仅有的一个例子失败,其他都成功了。
然后我进例子,添加了3rdparty,例子也成功了。
但是模型能读,jpg图片不能显示,他也没提示找不到jpg插件。

该用户从未签到

 楼主| 发表于 2014-5-13 08:46:28 | 显示全部楼层
我感觉代码应该没问题,动态库的OSG是运行正常的,有模型有图。
但是用静态库就不行了。
USE_OSGPLUGIN(osg)
USE_OSGPLUGIN(osg2)
USE_OSGPLUGIN(rgb)
USE_OSGPLUGIN(freetype)
USE_OSGPLUGIN(jpeg)
USE_DOTOSGWRAPPER_LIBRARY(osg)
USE_DOTOSGWRAPPER_LIBRARY(osgFX)
USE_DOTOSGWRAPPER_LIBRARY(osgParticle)
USE_DOTOSGWRAPPER_LIBRARY(osgShadow)
USE_DOTOSGWRAPPER_LIBRARY(osgSim)
USE_DOTOSGWRAPPER_LIBRARY(osgTerrain)
USE_DOTOSGWRAPPER_LIBRARY(osgText)
USE_DOTOSGWRAPPER_LIBRARY(osgViewer)

USE_SERIALIZER_WRAPPER_LIBRARY(osg)
USE_SERIALIZER_WRAPPER_LIBRARY(osgAnimation)
USE_SERIALIZER_WRAPPER_LIBRARY(osgFX)
USE_SERIALIZER_WRAPPER_LIBRARY(osgManipulator)
USE_SERIALIZER_WRAPPER_LIBRARY(osgParticle)
USE_SERIALIZER_WRAPPER_LIBRARY(osgShadow)
USE_SERIALIZER_WRAPPER_LIBRARY(osgSim)
USE_SERIALIZER_WRAPPER_LIBRARY(osgTerrain)
USE_SERIALIZER_WRAPPER_LIBRARY(osgText)
USE_GRAPHICSWINDOW()
静态的就多加了这段代码。
其他的都是直接readNode然后
viewer.setSceneData(pose);
return viewer.run();

该用户从未签到

发表于 2014-5-13 09:38:23 | 显示全部楼层
既然配置没问题,我还是怀疑你的osgdb_jpeg插件编译有问题。
你在读取图片的地方打个断点,看看读取后的对象是不是空的!

该用户从未签到

 楼主| 发表于 2014-5-13 10:10:54 | 显示全部楼层
cenfer 发表于 2014-5-13 09:38
既然配置没问题,我还是怀疑你的osgdb_jpeg插件编译有问题。
你在读取图片的地方打个断点,看看读取后的对 ...

我也这么怀疑,但是编译过程中无err无warning
除了CMAKE设置了目录,去掉打勾,换成MT,其他都是默认的。

我听你的弄了个断点。
readImage里面
readWrappedString(name);
中文件名读取正常。
到了switch( decision )
decision为IMAGE_WRITE_OUT;
return的image中filename都没有。

该用户从未签到

发表于 2014-5-13 10:38:04 | 显示全部楼层
编译过程中无err无warning 不代表没问题
不是让你DEBUG插件的里面,你就看读取的返回值就行。
osg::Image* loadedImage = osgDB::readImageFile();
如返回值为NULL,两种可能 路径有问题,或者插件有问题。

该用户从未签到

 楼主| 发表于 2014-5-13 10:44:25 | 显示全部楼层
cenfer 发表于 2014-5-13 10:38
编译过程中无err无warning 不代表没问题
不是让你DEBUG插件的里面,你就看读取的返回值就行。
osg::Image ...

为NULL啊,路径应该是没问题的,肯定是插件问题。
怎么办?
瞬间感觉问题棘手100倍了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表