查看: 3647|回复: 5

osg模型与纹理异步加载

[复制链接]

该用户从未签到

发表于 2013-3-21 13:03:30 | 显示全部楼层 |阅读模式
请教大神。
osg为什么不开辟一个线程去加载纹理呢,而是要等纹理加载完之后再显示整个模型。
实现模型与纹理异步加载一定要去修改osg源码吗?可否通过外部操作比较简便高效的实现?

该用户从未签到

发表于 2013-3-22 08:07:36 | 显示全部楼层
纹理和图片可不是一个性质哦,数据是要在GPU端进行编译,然后形成纹理单元中的数据,当然也可以用多线程先加载到cpu端,而且当然要纹理在GPU端之后才可以显示,不然您的模型显示的会很难看

该用户从未签到

发表于 2013-3-22 13:38:03 | 显示全部楼层
你可以想个办法作延迟加载,osg::Imposter类实现了类似的功能,当然这个类里面的功能可能不是你所想要的。就类似于这样一种代码:
  1. class Texture2DDelay :public osg::Texture2D
  2. {
  3. //..
  4. public:
  5. void apply(osg::State & state)const
  6. {
  7.   if(_loaded)
  8.   {
  9.      osg::Texture2D::apply(state);
  10.   }
  11.    else
  12.    {
  13.     //do your own customized operations
  14.    }
  15. }
  16. private:
  17.   bool _bLoaded;
  18. };
复制代码

该用户从未签到

 楼主| 发表于 2013-3-25 21:26:15 | 显示全部楼层
liuzhiyu123 发表于 2013-3-22 08:07
纹理和图片可不是一个性质哦,数据是要在GPU端进行编译,然后形成纹理单元中的数据,当然也可以用多线程先加 ...

哦,学习了,我是想显示大场景的模型数据,所以想模仿Google earth的先加模型后贴纹理的做法

该用户从未签到

 楼主| 发表于 2013-3-25 21:30:47 | 显示全部楼层
the_mercury 发表于 2013-3-22 13:38
你可以想个办法作延迟加载,osg::Imposter类实现了类似的功能,当然这个类里面的功能可能不是你所想要的。就 ...

您的办法是个思路啊,但是一个模型对应多张纹理,判断模型已加载之后我怎么把这些纹理对应贴到正确的位置上去呢,总不至于事先把这些全部存在模型外面吧,一般图片及纹理坐标是存在模型文件里面的

该用户从未签到

发表于 2013-3-26 07:45:35 | 显示全部楼层
fieryphoenix 发表于 2013-3-25 21:30
您的办法是个思路啊,但是一个模型对应多张纹理,判断模型已加载之后我怎么把这些纹理对应贴到正确的位置 ...

呵呵 那还不如直接都用database加载 做好纹理共享 优化 等操作
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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