查看: 2803|回复: 3

有关callback方面的问题

[复制链接]

该用户从未签到

发表于 2008-10-30 10:13:35 | 显示全部楼层 |阅读模式
大家好,我初学OSG,最近想用OSG与PhysX结合以实现软体的仿真,结果可以出来但问题是显示的时候太卡了,我想应该是回调函数方面的问题。
      问题的具体描述是:构造一个Geod结点的回调函数,然后将对软体的仿真放到这个回调函数中;将软体仿真得到的新的顶点和法线数据赋给Geomety结点,然后将此Geomety结点挂在Geod结点下进行显示。模型的数据量不是很大(大概两万多个三角面片),但显示起来却很慢(我的机器配置已经相当不错的了,实验专用的)。
     我想请问高手,像这样的实时绘制一般该如何解决呢?另外,我还想请教一下绘制更新和遍历更新的区别是什么?谢谢!

该用户从未签到

发表于 2008-10-30 10:34:51 | 显示全部楼层
显示慢的原因有很多,可以添加一个osgViewer::StatsHandler,在运行时按下s键来观察帧速慢的原因:看看Update,Cull,Draw三个环节哪个环节耗费的时间比较长。
Update耗时长的话,应该如您所说是回调的处理不好;
Cull耗时长一般是由于场景节点树太复杂;
Draw耗时长是由于要绘制的数据太多,这个时候应该考虑用一些场景优化手段,例如LOD等。

您所说的绘制更新和遍历更新指的分别是什么?DrawCallback和UpdateCallback吗?如果是需要直接调用OpenGL函数,则使用DrawCallback,因为在调用它之前已经指定了RC(Render Context)设备;否则一般建议使用UpdateCallback。

该用户从未签到

发表于 2008-10-30 10:39:43 | 显示全部楼层
当然您的程序中也有个极其麻烦的问题:那就是您在尝试实时软体仿真。我似乎还没听说哪个实时仿真系统可以恰当地模拟软体,直接使用计算出顶点再赋给Geometry的做法恐怕是灾难,因为大量的运算已经耗尽CPU的能量了。
也许在未来使用NURBS曲面来仿真是一个不错的解决方案,因为一个控制点的运动只影响有限个点。这样只要适当更新Vec3Array的数据就可以了。不过在目前这还只是个设想,我正在开发的基于OSG的开源工程osgModeling,其中倒是包含了样条曲线曲面的内容,不过想要实现实时控制恐怕还很遥远。

该用户从未签到

 楼主| 发表于 2008-10-30 14:29:28 | 显示全部楼层
谢谢Array大哥的指导,我先照你说的方法试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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