ArenAK的博客

3D图形、虚拟现实 / 3D Computer Graphics,Virtual Reality
posts - 24, comments - 75, trackbacks - 3, articles - 0
   :: 首页 ::  :: 联系 :: 订阅 订阅 :: 管理

多通道软件同步——代码设计

Posted on 2008-06-18 12:49 ArenAK 阅读(356) 评论(6)  编辑 收藏 网摘 所属分类: Virtual Reality
 

一、代码设计目的

关于多通道同步问题的总述请见文章《多通道的同步问题》

本文主要说明用软件实现同步时代码设计的思想,其涉及到两个层次:DataLockSwapLockDataLock用于保证各渲染计算机在每个渲染周期使用相同的场景数据进行更新,以避免各计算机之间场景内容的不一致。SwapLock用于保证各渲染计算机每个渲染周期中在相同的瞬间切换帧缓存,以避免各计算机之间画面的不连续。对于立体投影时Framelock的使用可采用WinSgl,见文章《多通道的同步问题》。

首先要说明本文中代码的设计遵循这样的架构:一个同步节点、多个渲染节点。每个节点对应一台计算机,同步节点可用作对场景数据的更新(如计算动力学),各个渲染节点连接显示器或投影仪等显示设备。

设计出的代码为了方便使用,要求达到以下的使用方法:

1.在各节点程序的初始化阶段,调用注册函数(如registerUserData(……))注册需要同步的场景数据。

2.而后在各节点程序的每个周期,在渲染结束(如OpenGLglFinish())与帧切换(如OpenGLglutSwapBuffer())之间,调用同步函数(Sync()),此函数的返回值即为同步后的场景数据,此函数返回后立即进行帧切换的工作,以保证帧切换的同步。

二、代码设计思想

1.同步节点在主线程(如动力学仿真线程)之外建立另外一个线程,用于处理同步。

2.同步节点在建立起来的同步线程中以快速不可靠的广播形式定时向所有渲染节点发送场景数据,发送的时间间隔由调用此代码的用户决定,如以动力学仿真周期作为定时标准。

在发送此数据时同步节点会在发送的包头部插入当前发送的包序号,此序号用作以后的同步判断。

3.渲染节点建立一个接收缓冲区,在一个单独的线程中循环接收同步节点发送的数据,并将接收到的所有数据保存在缓冲中。

4.渲染节点在桢切换之前要求同步。此时渲染节点向同步节点发送同步请求包,包内含有节点本身接收到的所有数据包序号,这些序号是从缓冲区中取得的,此时渲染节点进入阻塞状态,等待同步节点的同步信号。

5.同步节点在收到第一个渲染节点的同步请求信号后,停止发送场景数据,它会等待接收所有的渲染节点的请求信号,当所有请求信号都到达时,同步节点对所有请求信号包中的序号进行比较,取出各节点共有的最后一个序号放入即将要发送的同步包中。如第一个渲染节点请求包中序号为2057205820602061,第二个渲染节点包中序号为2057205820592060,第三个渲染节点包中序号为2058205920602061,则比较后所得结果为2060

6.同步节点在比较出结果后,向所有渲染节点以可靠方式发送同步信号包,包内含有同步的场景数据序号(如2060)。此后同步节点可以继续发送场景数据。

7.各渲染节点在接到同步信号包后,解除阻塞状态,进行桢切换,并根据接收到的同步序号(如2060)从当地缓冲区中取出场景数据。

8.渲染节点进入下一个渲染周期,在此周期渲染时利用7中得到的同步数据。

三、代码运行结果

在四台的PC机上利用此代码进行多通道的同步,其中一台作为同步节点,其它三台作为渲染节点连接三台投影仪,PC 机的配置为Intel Core2 CPU1.86Hz1.0G内存。

结果表明渲染节点达到了完全一致连续的画面显示,三个通道的致速率始终保持完全一致,数据测试表明渲染节点等待同步花掉的时间在4ms以内。

注:4ms这个时间只是一个粗略数据,具体时间与机器性能、渲染程序的复杂度都有关,有待进一步测定。

--ArenAK--

Feedback

#1楼    回复  引用    

2008-10-30 10:42 by jacky wang [未注册用户]
请问在哪里能看到上文所描述的源代码?或更详细的说明?

#2楼 [楼主]   回复  引用  查看    

2008-10-30 22:57 by ArenAK      
@jacky wang
对不起,我不能给出源代码,你可以试着自己实现一下,不是很困难。

#3楼    回复  引用    

2008-11-15 14:26 by jacky wang [未注册用户]
自己尝试了一下 发觉还是很困难 请问博主你使用的是什么开发工具 能不能给些再具体的建议

#4楼    回复  引用    

2008-11-17 15:38 by thunderchief [未注册用户]
not too busy in USA?
Have time to post this,hehe!
Come on!

#5楼 [楼主]   回复  引用  查看    

2008-11-18 05:28 by ArenAK      
@thunderchief Actually I'm busy, but i still need to respond. And I have noticed your blog:)

#6楼 [楼主]   回复  引用  查看    

2008-11-18 05:47 by ArenAK      
@jacky wang
写代码用的VS2005,网络部分借用了RakNet的代码,希望对你有帮助。至于具体建议,你可以就具体问题来问:)

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-06-30 23:30 编辑过
Google站内搜索

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》



相关文章:


相关搜索:
多通道 多通道同步 Datalock Swaplock ArenAK

相关链接: