查看: 1462|回复: 13

资源动态切换方法的使用?

[复制链接]

该用户从未签到

发表于 2010-11-4 09:00:20 | 显示全部楼层 |阅读模式
比如有多个节点(可以是图片,模型等等),但是并不希望同时显示。可以利用switchNode或者setCullMask()切换,也可以通过回调或访问器动态加载资源。

但是就资源利用和代码结构这两个层面上讲,不知道都有什么优缺点?
或者还有什么更好的方法呢?

该用户从未签到

发表于 2010-11-4 13:39:44 | 显示全部楼层
能否讲解一下您都是如何实现这两种方法的,我甚至不能判断您提出这个奇怪问题的出发点是什么

该用户从未签到

 楼主| 发表于 2010-11-4 17:26:39 | 显示全部楼层
在HUD中加载了几十个GIF图片动画,当然是不需要同时显示了。于是我想用camera->setCullMask来隐藏一部分。的确可以实现。
问题是虽然只看到很少一部分,但是资源其实是已经加载到场景中了。因此,消耗了大量的内存。
不知道用什么方法可以避免这个问题?

我有在回调函数中动态的加载过,执行几次之后就报错了,也不知道错在那里?

该用户从未签到

 楼主| 发表于 2010-11-4 20:34:22 | 显示全部楼层
本帖最后由 aaa696 于 2010-11-5 08:33 编辑

朋友说应该在GUIEventHandler里处理动态加载,确实可以!并且用DDS比其他格式的图片更节省资源,不知道DDS是否也支持动画?

该用户从未签到

发表于 2010-11-5 08:54:13 | 显示全部楼层
虽然只看到很少一部分,但是资源其实是已经加载到场景中了。因此,消耗了大量的内存。
不知道用什么方法可以避免这个问题
OSG对于动态调度的处理方案是PagedLOD,如果您的图片(它显然应该是贴了GIF动画的几何体)可以用这种方式来管理的话,就可以实现需要的时候加载,不需要的时候卸载的策略

我有在回调函数中动态的加载过,执行几次之后就报错了,也不知道错在那里?
如果您不打算给出任何相关的信息,那么我也不知道错在哪里

朋友说应该在GUIEventHandler里处理动态加载,确实可以
这没有什么特别的道理,与回调中没有太大的区别

不知道DDS是否也支持动画
不支持

该用户从未签到

 楼主| 发表于 2010-11-5 09:14:55 | 显示全部楼层
非常感谢Array,帮了我大忙!

该用户从未签到

 楼主| 发表于 2010-11-5 09:22:36 | 显示全部楼层
我还想到另一种方法:就是在创建几何体的时候,只赋给它一个Image的空对象。而在具体使用时,再指明Image. 用完就可以卸载掉(或用别的图片替换,这样可以使原先的指针引用数减一)。

当然,我还是更倾向于OSG自己提供的方式。

该用户从未签到

 楼主| 发表于 2010-11-5 09:33:48 | 显示全部楼层
本帖最后由 aaa696 于 2010-11-5 09:41 编辑

PagedLOD也是通过视点来动态加载的,如果要切换显示,是不是要在回调里修改原来对视点范围的设置。

而且PagedLOD使用setFileName()好像只能加载文件,如果是自己构建的几何体,怎么加载呢?

该用户从未签到

发表于 2010-11-5 12:43:38 | 显示全部楼层
我到现在都不明白您到底要做什么事情,只看到您自己不断地想出新方法,却无法参与讨论……我们不是您肚子里的虫子,不知道您在想什么,也不能凭空作出回应

该用户从未签到

 楼主| 发表于 2010-11-5 13:31:02 | 显示全部楼层
如果我没有说明白,那我再对8楼的提问说明一下:
1. 使用PagedLOD实现动态加载,如何切换显示?前提是视点是固定的。
2. PagedLOD使用setFileName加载文件(addChild是静态的,内存消耗很大),可是这种方式对于其他格式(比如:Group\Geode\Image\Texture...)就不知道怎么加载了?

不知道这次有没有说清楚!

该用户从未签到

发表于 2010-11-5 16:59:40 | 显示全部楼层
1、有很多相关的资料,这个类本身就是LOD的形式,但是它会自动加载新进入视野的子节点,并且适度卸载视野以外的节点
2、可以把纹理贴附在几何体上进行管理

该用户从未签到

 楼主| 发表于 2010-11-5 17:18:07 | 显示全部楼层
谢谢Array! 不过我还是不太理解,如果动态调整显示,是不是通过setCenter设置中心来实现呢?

还有如果用PagedLOD加载GIF图片,它本身可以转成IMAGE吗?还是说用它加载几个体,不过好像也没有这种接口!我再摸索一下吧。呵呵……

该用户从未签到

发表于 2010-11-8 09:09:48 | 显示全部楼层
加载GIF图片,它本身可以转成IMAGE吗
这句话似乎在逻辑上有些混乱?

如果您明白LOD的意思,应该也会明白PagedLOD的意思。它只是在LOD显示的基础上增加了动态调度的功能;至于setCenter事实上是用来手动设置包围体中心的

该用户从未签到

 楼主| 发表于 2010-11-8 19:50:14 | 显示全部楼层
多谢,我的思想是够乱的!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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