查看: 1394|回复: 7

如果关闭动画的线程

[复制链接]

该用户从未签到

发表于 2010-12-7 16:51:06 | 显示全部楼层 |阅读模式
想要使场景中所有的动画,包括粒子全部停止。我个人想法是把更新回调的线程关闭,然后做完某一个操作后再开始。这要如何操作呢?

该用户从未签到

发表于 2010-12-7 17:18:06 | 显示全部楼层
动画是AnimationPathCallback??用setPause
停止线程用 viewer->stopThreading()??我也不是很清楚

该用户从未签到

发表于 2010-12-8 08:58:40 | 显示全部楼层
更新回调永远都是在主进程中执行的,没有单独的线程,因此“关闭动画的线程”也就无从谈起

您可以考虑获取通过viewer.getUpdateVisitor()获取UpdateVisitor对象,然后设置它的遍历模式为TRAVERSE_NONE,这样所有的更新回调都不会再执行,然后在适当时候改回到TRAVERSE_ALL_CHILDREN即可

该用户从未签到

 楼主| 发表于 2010-12-8 09:11:27 | 显示全部楼层
那请问array,如果我不断地改变遍历模式,动画还是连贯的么,因为时间还是一直在走的。

该用户从未签到

 楼主| 发表于 2010-12-8 09:15:42 | 显示全部楼层
我主要想应用于高清晰的视频导出,要在几豪秒内导出一张高分辨率的图好象不怎么现实,所以我想在执行视频导出代码的时候把画面静止掉。或者说可以换个角度,直接把主进程暂停?

该用户从未签到

发表于 2010-12-8 11:20:23 | 显示全部楼层
5# 答案??
其实所有回调都是和simulationtime有关系的,你可以动态的更改这个变量,将每帧的时间和它绑定就可以了。
具体办法是继承viewer,重写advance函数。

该用户从未签到

 楼主| 发表于 2010-12-8 11:35:41 | 显示全部楼层
谢谢楼上的回答 ,不过我对OSG的底层代码了解不够深,目前还无法完成这些。可以用OSG自带的函数调用么

该用户从未签到

发表于 2010-12-9 08:29:47 | 显示全部楼层
5楼的方法完全可以直接用frame的参数实现,这个参数可以每帧传入一个用户设置的时间值

此外我觉得楼主的想法完全可以使用更好的途径来实现,不过在我不清楚您到底要做什么的情况下,我也不能提供更深入的意见了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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