查看: 1205|回复: 7

请教问题:OSG动态刷新

[复制链接]

该用户从未签到

发表于 2010-8-10 10:53:10 | 显示全部楼层 |阅读模式
我要做大规模数据的动态刷心
使用setUseDisplayList(false);
动态显示速度很慢,不使用又无法动态刷新
请问怎么办

该用户从未签到

发表于 2010-8-10 11:08:57 | 显示全部楼层
如果你的场景中每一个物体都是动态刷新的,那么你必须忍受这种低速。不过这种情况应该不多见,你的场景中的大部分物体应该是不会动态变化的(物体的旋转、移动、缩放等整体变化,其实不属于动态变化),这样,你的场景中只有少部分物体是动态变化的(仅仅是那些纹理、顶点、法线等发生变化),对这些物体禁用显示列表。

场景的优化需要你小心编程,不能采用鲁棒政策。

该用户从未签到

 楼主| 发表于 2010-8-10 11:42:59 | 显示全部楼层
先谢谢你的回答,我要更新的是一块地形,
地形大小为6400*1200,当然一次只是更新一排数据,其余的移动一行,场景看上去就像推扫过来的效果一样
我现在采用的是heightfield 但是这样一次就得更新所有的数据,第二行变成第一行,第三行变成第二行,最后一行变成新的数据,感觉很慢,我在想能不能用绘制三角带的方法,或者就heightfield就能解决 ,希望有人指点,谢谢

该用户从未签到

发表于 2010-8-11 12:12:04 | 显示全部楼层
可以尝试VBO,动态更新的速度高于DisplayList或者立即模式:
setUseDisplayList(false);
setUseVertexBufferObjects(true);

该用户从未签到

 楼主| 发表于 2010-8-11 13:28:47 | 显示全部楼层
加了后只能说略快,对这么大的场景好像还是不行,我在想用三角形带是不是可以,因为一次只增加一行删除一行

该用户从未签到

发表于 2010-8-11 17:13:02 | 显示全部楼层
用三角条带是必须的,此外如果您的数据量太大的话,建议考虑一些更好的办法

该用户从未签到

 楼主| 发表于 2010-8-11 20:40:54 | 显示全部楼层
什么样更好的方法呢?谢谢你给个建议

该用户从未签到

发表于 2010-8-12 08:36:23 | 显示全部楼层
可以使用Geometry,然后通过改变索引(DrawElementsUInt)来避免每帧都重新给所有顶点赋值,并且dirty顶点数组和索引数组。只有此时VBO才可能起作用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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