查看: 3187|回复: 11

多个模型直接能够共享纹理?

[复制链接]

该用户从未签到

发表于 2010-3-23 11:48:15 | 显示全部楼层 |阅读模式
在多个模型中,纹理贴图有重复,在设置纹理的时候能否设置成纹理共享,从而减少内存的占用量。如何能够设置,该如何设置选项。

该用户从未签到

发表于 2010-3-23 12:36:51 | 显示全部楼层
当然可以共享,并且应当尽量使用公共纹理。只要使用同一个Texture对象就可以了

该用户从未签到

发表于 2010-3-23 16:26:18 | 显示全部楼层
对哦~~~

该用户从未签到

发表于 2010-7-26 09:25:24 | 显示全部楼层
如果是多个ive文件使用同一张图片作为纹理,同时加载这几个ive文件,OSG是否会主动进行纹理共享呢?即内存中只有一张图片对象。

该用户从未签到

发表于 2010-7-26 10:53:17 | 显示全部楼层
应该是的~~

该用户从未签到

发表于 2010-7-26 11:58:43 | 显示全部楼层
需要设置FILE_CACHE

该用户从未签到

发表于 2010-7-27 11:20:56 | 显示全部楼层
是osgDB::FileCache::createCacheFileName 吗?

该用户从未签到

发表于 2010-7-27 16:19:06 | 显示全部楼层
还要设置啊,还以为能自动共享呢。具体咋设置

该用户从未签到

发表于 2010-8-3 16:18:54 | 显示全部楼层
不好意思翻旧贴,ARRAY能说说如何设置file_cache吗?我遇到一个相同的问题,当加载多个不同的ive模型,如何他们之间有一些纹理是一样的(我查看了.osg,状态集合一样),所以想复用纹理(其实是想复用状态集在不同的ive模型之间),我看了下IVE插件源代码,发现不同的IVE加载进来时候,即使是所用的纹理等相同时候,生成的仍然是2个不同的状态集(stateset); osgUtil::Opitimizer的状态优化也是针对“状态指针"的,而不进行全属性比较,请问可以实现不同的ive中相同状态的drawables状态复用吗(主要想优化状态集,来提高速度,因为发现状态集对性能影响巨大)

我在OSG英文论坛也发了个贴,有人告诉我使用,SharedStateManager,我查看了下,发现它用在DatabasePager, 可我目前的程序是运行在单线程下,好像也没牵涉导DatabasePager相关,请问有什么建议吗,谢谢了。

该用户从未签到

发表于 2010-8-4 09:05:12 | 显示全部楼层
事实上我也是在一次交流活动中听一位朋友提到使用FileCache来完成不同文件之间的纹理共享,因此就在这里重复说了一下。今天抽了一点时间看了看FileCache的实现,个人觉得并不能直接实现那位朋友的目标,FileCahce只有在设置了DataRevisions文件和OSG_FILE_CACHE环境变量的前提下才能起作用,它会把网络上读入的数据自动缓存到本地,然后下一次读取时可以直接从本地载入数据,并且也可以通过Revisions及时更新

SharedStateManager是一个不错的选择,但是我个人感觉它并不是随时都好用的,并且进行数据的比较会耗费一些时间。最大的问题是,对于读入的Image数据,它依然采取比较指针的方式

我个人对于这个问题的处理其实比较简单:维护一个<string, Texture>的映射表,根据项目对于数据保存的实际要求,判断文件名相同的话,就自动使用已有的Texture对象;此外每帧更新这个映射表,及时清除那些没有被任何节点引用的Texture即可

该用户从未签到

发表于 2010-8-4 09:58:08 | 显示全部楼层
OK,明白了,多谢指教~:)

该用户从未签到

发表于 2010-8-9 16:56:43 | 显示全部楼层
osgUtil::Opitimizer的状态优化也是针对“状态指针"的,而不进行全属性比较

个人感觉osgUtil::Opitimizer的状态优化做的还可以,会对材质、纹理和osg::Uniform等属性进行优化,其中纹理共享的优化会极大地提高内存利用率。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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