该例子演示了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
需要多台电脑操作演示,一台主机,多台从属机器,通过操作主机,实现多台从属机器的同步操作。
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