查看: 3602|回复: 14

osgEarth中.osg模型文件以addModelLayer方式加载纹理丢失

[复制链接]

该用户从未签到

发表于 2015-12-25 15:42:44 | 显示全部楼层 |阅读模式
:'( :'(
先让我表达一下这几天的心情!
我现在需要把osg还有其它模型文件加入到场景中,采用osg的方式 osg::Group->addChild()的方式加进去,能正常显示纹理。
但是我用osgEarth中map->addModelLayer()的方式,模型就没有纹理了~
求大神拯救小白!

该用户从未签到

 楼主| 发表于 2015-12-25 15:44:45 | 显示全部楼层
具体问题出在哪儿我真找不出来
也不知道有没有人会来:'(
求拯救 求拯救:'(

该用户从未签到

 楼主| 发表于 2015-12-25 15:51:47 | 显示全部楼层
新人第一帖,求照顾

该用户从未签到

 楼主| 发表于 2015-12-25 16:03:48 | 显示全部楼层
好吧~ 没人来- -

该用户从未签到

 楼主| 发表于 2015-12-25 16:21:23 | 显示全部楼层
自己回复自己帖子都升级了

该用户从未签到

 楼主| 发表于 2015-12-25 16:21:29 | 显示全部楼层
自己回复自己帖子都升级了

该用户从未签到

 楼主| 发表于 2015-12-25 16:32:09 | 显示全部楼层
我还是把问题补充下好了~ 现在是.osg格式的文件加载会丢失纹理,.3ds这样的贴图的没有问题. 光照+渲染+材质这样的osg模型文件加载的时候纹理会丢失~ 不知道怎么才能在osgEarth中以addModelLayer的方式加进去不丢失纹理

该用户从未签到

 楼主| 发表于 2015-12-27 15:41:38 | 显示全部楼层
继续补充问题: 我用了         osgEarth::ShaderGenerator gen; gen.run(nodeGroup, filename, NULL); 可以显示出来一部分.osg文件的纹理了,但是cessna、dumptruck的纹理还是显示不出来。不知道怎么做了~

该用户从未签到

发表于 2015-12-28 10:56:35 | 显示全部楼层
用osgEarth编辑器SXEarth加载,输出earth文件使用
SXEarth下载地址:http://www.sxsim.com/h-col-106.html

该用户从未签到

 楼主| 发表于 2015-12-29 08:55:16 | 显示全部楼层
ago 发表于 2015-12-28 10:56
用osgEarth编辑器SXEarth加载,输出earth文件使用
SXEarth下载地址:http://www.sxsim.com/h-col-106.html

感谢吧主回帖!
我现在是点击加载模型->选择.osg文件->读取到osg::Node中->用osg::Node生成modelLayer(name, osg::Node)->以addModelLayer()加到map中;
现在弄了好久cessna.osg dumptruck.osg纹理任然没有显示.
我看了cessna.osg文件里的方式,用的是shademodel{ DataVariance STATIC   mode SMOOTH}我感觉是生成modelLayer的时候这里的shademodel被丢掉了。而dumptruck.osg文件里面没用到shademodel,纹理也没显示。 但是cow.osg却能正常显示(实现纹理的方式不一样)。
我后边先看看SXEarth,我这边的框架是要把所有的图层都加到map下,要是换其它方式很多模块可能会出问题,所以还是想修正这种加载方式,而不是换另外一种- -(求轻喷,毕竟不是太懂
附件是:cessan.osg 和dumptruck.osg里面部分内容。
dumptruck.bmp
cessna.bmp

该用户从未签到

发表于 2015-12-29 09:23:30 | 显示全部楼层
jzh1092431698 发表于 2015-12-29 08:55
感谢吧主回帖!
我现在是点击加载模型->选择.osg文件->读取到osg::Node中->用osg::Node生成modelLayer(n ...

modelLayer是由map来组织管理的,可以用model_simple插件读取模型

该用户从未签到

 楼主| 发表于 2015-12-29 09:30:09 | 显示全部楼层
ago 发表于 2015-12-29 09:23
modelLayer是由map来组织管理的,可以用model_simple插件读取模型

用model_simple读取后能加载map中么- -  
我现在无法避免的一个问题是必须要用到map->addModelLayer

该用户从未签到

 楼主| 发表于 2015-12-29 09:36:04 | 显示全部楼层
ago 发表于 2015-12-29 09:23
modelLayer是由map来组织管理的,可以用model_simple插件读取模型

                        osgEarth:rivers::SimpleModelOptions simpleModelOption;
                        simpleModelOption.url() = filepath;
                        simpleModelOption.location() = geoPosition;
                        osg::ref_ptr<osgEarth::ModelLayer> modelLayer = new osgEarth::ModelLayer(filename, simpleModelOption);
                        if (!modelLayer.valid())
                                return NULL;
                        this->GetMap()->addModelLayer(modelLayer.get());
                        return modelLayer;

我试了如上方式,还是不能显示着两个模型的纹理  , 但是所有的文件要是直接加载到rootNode上就能正常显示纹理。

该用户从未签到

发表于 2015-12-29 09:41:51 | 显示全部楼层
jzh1092431698 发表于 2015-12-29 09:36
osgEarth:rivers::SimpleModelOptions simpleModelOption;
                        simpleModelOption.url() = filepath ...

cessna.osg dumptruck.osg这两个模型没有纹理,osgEarth为了避大气着色器影响,光照关闭了,材质显示不出来

该用户从未签到

 楼主| 发表于 2015-12-29 09:46:03 | 显示全部楼层
ago 发表于 2015-12-29 09:41
cessna.osg dumptruck.osg这两个模型没有纹理,osgEarth为了避大气着色器影响,光照关闭了,材质显示不出 ...

原来是这样,也就是说我要是能找到方法开启模型的光照,就能显示出来材质吧。
多谢提供思路,多谢多谢,我下去再试试看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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