osgcluster例子

该博客介绍了osgcluster的使用示例,通过主机与从属机器的交互实现多台机器的场景同步。主要涉及broadcaster(主机发送信息)和receiver(从属机器接收信息)类,以及STAND_ALONE、MASTER、SLAVE角色定义。关键在于CameraPacket类中的事件同步,通过_event队列在eventTraversal阶段实现主从设备事件同步,确保渲染一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该例子演示了osg的场景同步。
需要多台电脑操作演示,一台主机,多台从属机器,通过操作主机,实现多台从属机器的同步操作。
broadcaster这个类用于主机发送信息。
receiver这个类用于从属机器接收信息。
里面主要是socket,计算机之间的通讯,就不做研究,只需记住他们的功能。
STAND_ALONE表示单机,不参与信息的接收于发送;
MASTER主机,发送信息;
SLAVE从属机器,接收信息;
然后定义了socket数目,相机的一些参数。
如果camera_fov>0.0f,调整了一下相机的张角。
CameraPacket类,看看该类的属性就可以知道该类的功能,
_masterKilled主机是否结束运行;
_matrix相机的变换矩阵;
_frameStamp帧;
_events事件
我们大致想想,同步的过程,当操作主机时,主机把这些操作的事件发送给从属机器,从属机器接收这些
事件,然后响应这些事件。
该例子实现的就是这样一个过程,而最关键的就是_events,把主机一帧的所有事件发送给从属相机执行
,完成同步。
osg的一帧中做了一下这些事情:
advance更新了一下时间、帧数
eventTraversal事件
updateTraversal更新
renderingTraversals裁切和渲染
在本例子中eventTraversal之前,需要同步主从属机器的事件,因此,在这里写这样一个循环,实现同步

在eventTraversal中读取Events
osgViewer::ViewerBase::Contexts contexts;
    viewer.getContexts(contexts);   
    for
(osgViewer::ViewerBase::Contexts::iterator citr =contexts.begin();  citr != c
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值