查看: 1421|回复: 5

场景中有很多模型,一次加载进来占很多内存,该怎么办呢?

[复制链接]

该用户从未签到

发表于 2011-3-24 17:42:26 | 显示全部楼层 |阅读模式
建立一个场景,里面模型数量比较多,程序启动时把这些模型都加载进来,会吃掉很多内存,
针对模型和针对程序应该怎么优化呢?
可不可以建立两批模型,一批精度比较低的,一批精度高的,刚启动时加载精度低的,相机旁边的加载精度高的,相机远离以后,又加载精度低的?
谢谢

该用户从未签到

发表于 2011-3-24 21:44:41 | 显示全部楼层
你能自己想到这个主意已经相当棒了,比我强多了,呵呵。
其实这本身就是目前的一种解决方式,貌似有个专业词语叫LOD(Level of Detail,层次细节。
LOD(层次细节度)技术指根据物体模型的节点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。)
直接找相关的例子或文档吧:
http://www.openscenegraph.org/do ... nceDocs/a01159.html

该用户从未签到

 楼主| 发表于 2011-3-25 10:07:00 | 显示全部楼层
回复 2# rcyboom


   LOD是要建立两种或者多种不同精细度的模型么?那在程序中怎么把他们加到场景节点下面呢?

该用户从未签到

发表于 2011-3-25 12:48:02 | 显示全部楼层
osg:: LOD::addChild()

该用户从未签到

 楼主| 发表于 2011-3-25 15:45:21 | 显示全部楼层
回复 4# array



例如我要向场景中加一个房子,于是我就建了同一个房子三个不同精度的模型L0,L1,L2;
在程序中我先通过 osgDB把他们依次读进来,变成node0, node1, node2,然后把它们加载到 Lod 节点下:
lodHouse->addchild(node0, 0.0, 5.0);
lodHouse->addchild(node1, 5.0, 10.0);
lodHouse->addchild(node0, 10.0, 15.0);
   请问,是这么理解的么?

------------------------分割线-------------------------
还是我只要建里一个精细的房子模型L0,
在程序中通过osgDB把他读进来,变成node0,然后把它加载到Lod节点下:
lodHouse->addchild(node0, 0.0, 15.0);
osg自动就可以根据我相机的距离把模型简化了呢?

该用户从未签到

发表于 2011-3-28 08:37:00 | 显示全部楼层
lodHouse->addchild(node0, 0.0, 5.0);
lodHouse->addchild(node1, 5.0, 10.0);
lodHouse->addchild(node0, 10.0, 15.0);
基本上是这个意思

自动就可以根据我相机的距离把模型简化了
不存在这种只会让开发者骂街的功能
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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