查看: 2264|回复: 4

关于纹理共享

[复制链接]

该用户从未签到

发表于 2010-5-8 20:27:29 | 显示全部楼层 |阅读模式
我从3dsmax里面导出很多ive模型文件,这些模型有很多是使用相同的贴图,但贴图坐标不尽相同。当读取这些ive模型文件到OSG程序中时,就自然加载了各个模型的纹理,但我觉得应该可以对这些有着相同贴图的模型纹理进行优化,我该如何进行优化?谢谢。

该用户从未签到

 楼主| 发表于 2010-5-9 09:07:52 | 显示全部楼层
已经进行了优化,通过纹理节点访问器,获得texture2d的list列表,然后通过compare函数比较,相同的纹理只保留一个,程序的内存占用大幅降低了。不知道我这方法是不是正确的,另外,这个过程是:读取ive模型文件->比较纹理->共享纹理,读取的时候花费了好多不必要的时间(是指纹理相同),这个过程怎么优化?

该用户从未签到

发表于 2010-5-9 11:58:51 | 显示全部楼层
您的方法很正确,共享纹理就是共享osg::Texture2D对象,,而不是Image对象~~纹理贴图您可以放到程序来实现,,至于建模里面的优化,请您参见建模软件使用~~~~~~~

该用户从未签到

发表于 2010-5-21 10:03:41 | 显示全部楼层
我也碰上关于纹理共享的问题:动态调度数据的时候,怎样实现纹理共享?请求大家帮助,谢谢!
1.通过纹理节点访问器是可以获得当前节点的纹理,在用compare函数进行比较的时候,该函数的参数是StateAttribute,这个参数应该是场景中已经存在的属性,该属性是怎么得到的 (还用节点访问器去遍历的话,如果场景数据量很大,。。。或者每个纹理确实都不一样,那样势必每次都会遍历整个场景。。。)?
2.如果每加载一个节点就把其StateAttribute记录下来,然后在下次加载的时候,再取出和现在加载的节点进行比较的话,这样势必就浪费了一些资源(因为要维护保存StateAttribute的容器)。

该用户从未签到

发表于 2010-5-21 10:57:40 | 显示全部楼层
有一种做法是自己写一个DatabasePager的派生类,然后在其中判断刚载入的对象是否需要共享纹理;不过这需要根据具体需求来实现
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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