惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
Microsoft Azure Blog
Microsoft Azure Blog
月光博客
月光博客
S
Securelist
J
Java Code Geeks
Recorded Future
Recorded Future
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
M
MIT News - Artificial intelligence
S
Secure Thoughts
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
Docker
Martin Fowler
Martin Fowler
The Last Watchdog
The Last Watchdog
WordPress大学
WordPress大学
The GitHub Blog
The GitHub Blog
Vercel News
Vercel News
O
OpenAI News
www.infosecurity-magazine.com
www.infosecurity-magazine.com
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
PCI Perspectives
PCI Perspectives
N
News and Events Feed by Topic
H
Heimdal Security Blog
SecWiki News
SecWiki News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
博客园 - 【当耐特】
T
Troy Hunt's Blog
L
LINUX DO - 最新话题
Hacker News: Ask HN
Hacker News: Ask HN
Hacker News - Newest:
Hacker News - Newest: "LLM"
N
Netflix TechBlog - Medium
A
Arctic Wolf
The Hacker News
The Hacker News
I
Intezer
S
Schneier on Security
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Apple Machine Learning Research
Apple Machine Learning Research
L
Lohrmann on Cybersecurity
宝玉的分享
宝玉的分享
P
Privacy & Cybersecurity Law Blog
Stack Overflow Blog
Stack Overflow Blog
T
Tor Project blog
小众软件
小众软件
Simon Willison's Weblog
Simon Willison's Weblog
The Cloudflare Blog
Jina AI
Jina AI

博客园 - 任程

运动捕捉数据的行为分割 主元分析(PCA)在计算机图形学中的应用 本博客代码公布(本文会不断更新) 机器人逆动力学(Robot Inverse Dynamics) 刚体动力学(Rigid Body Dynamics) Flock of Birds——总结使用过的虚拟现实设备之二(A Brief Summary of Several VR Devices) 多通道软件同步——代码设计 《自己实现EarthSculptor的Splatting地形》的源代码 Interesting story about DI-Guy 利用billboard实现云的仿真 OST试验版 透视校正插值(Perspective-Correct Interpolation) Ogre中在SceneNode节点旁显示二维字的代码 Perlin噪声 虚拟现实现状——设备篇(译:State of VR-Devices) 多线程中Sleep函数的调用 用WiiRemote进行头部跟踪(Head Tracking for Desktop VR Displays using the WiiRemote) 分析碰撞检测库Opcode 用NVPerfHUD来分析3D程序
多通道的同步问题
任程 · 2008-05-09 · via 博客园 - 任程

一.综述

多通道投影是一种典型的虚拟现实的实现,多通道可以是多个CRTLCD显示器,也可以是DLP投影仪,本文中统称为显示器。在多通道显示(Multi Display)中的一个重要问题是保持各个通道间显示画面的同步。

对于一个通道对应于<一台计算机、一个显示器>的多通道系统,同步问题包括三个方面或者说是涉及到三个层次:DataLockSwapLockGenLock

1DataLock

用于保证在每个渲染周期各渲染计算机使用相同的场景数据(包括每帧都需要更新的数据和类似于消息的间断性数据)进行更新,以避免各计算机之间场景内容的不一致。

2SwapLock

用于保证每个渲染周期中各渲染计算机在相同的瞬间切换帧缓存,以避免各计算机之间画面切换时刻的不一致。

3. Framelock&GenLock

Framelock指相互连接的各渲染计算机的显示器扫描频率彼此保持一致,而GenLockGeneratorLock)则是指显示器的扫描频率与一个外部频率源保持一致。FramelockGenLock可以在像素级别同步、扫描行级别同步、帧级别同步,我所看到的都是帧级别的同步。Framelock&GenLock在立体显示中尤为重要,因为各通道显示器的帧频与立体眼镜快门开关的开关频率必须保持同步[1]

二.DataLock

DataLock通常由软件实现,通过对网络数据的发送、接收、处理的控制来达到数据同步。

三.SwapLock

SwapLock也可由软件来折衷实现,通常通过网络来对Swaplock的锁定误差在1ms以内,对于交互式程序来说这个已经满足需要了。SwapLock也有硬件支持的,如Nvidia Quadro 3000G显卡,结合Opengl扩展即可做到。

对于DataLockSwapLock的软件实现我在下一篇文章会写。本篇以下内容大致叙述我所了解的Framelock&GenLock的实现方式。

四.Framelock&GenLock

硬件实现:

目前支持FrameLock&GenLock的都是专业显卡,如3Dlabs Wildcat4 7210NvidiaQuadro FX 3000GQuadro FX 4000Quadro FX 4500Quadro FX 5500。对于Nvidia的显卡在使用时将一个显卡接上外部同步源信号(实现GenLock),并通过Nvidia控制面板使其作为Master;其它显卡相互级联后接到Master显卡上(实现FrameLock),并通过控制面板使其作为Slave,这样即可实现了。同时有NvidiaOpengl扩展提供了相应的软件函数调用。详细使用方法可参考Nvidia FrameLock手册。

软件实现:

更确切的说是软硬结合的实现方法,其与上述方法的区别之处在于并不采用专业级的显卡,而只是在使用时自己制作或购买几个小小的插头连接到计算机并口和显卡,结合软件使用消费级显卡就可达到Framelock&GenLock

Linux下的软件:Softgenlockhttp://www.hlrs.de/organization/vis/people/aumueller/genlock/

Windows下的软件:WinSgl http://graphics.ethz.ch/~mwaschbu/winsgl/

两者原理相同,下面统称为Sgl

图1所示Sgl是将外部0-5V的脉冲信号(如TTL信号)通过计算机并口接入,由Sgl驱动程序读取此信号频率,由PowerStrip(由EnTech 提供)的函数和DirectDraw API得到计算机显卡的Vedio Timing信息,由Sgl Application程序对两者进行比较后得到调整显卡Video Timing的相应方法(见下一段),再由PowerStrip函数来执行此方法,从而控制显示器的频率与外部源保持一致。

1  Sgl运行结构

调整显卡Video Timing的方法是调整垂直前端扫描(Vertical Front Porch)的时间。因为显示器显示一帧画面时实际上并不只是扫描用户所能见到的区域,对可见区域四周环形不可见区域的扫描是必须的(这些扫描是有其作用的,这里不叙述),如2所示只有红色部分是可见区域。Sgl就是通过更改不可见区域中Vertical Porch扫描占用的时间来调整每帧画面扫描的时间,从而对显示器频率进行微调,使其与外部同步源保持一致。

2 Video Timing

因此你需要做的只是设好外部同步源的频率(如60.000Hz),用自己的插头将外部同步信号接入计算机并口,并通过VGA口来观察同步信号,然后运行软件就可以了。

以下是我所做的实验:

硬件设备包括:

1. Nvidia GeForce 6800GT card

2. ViewSonic VE710b LCD at 60Hz refresh rate

3. Square form Clock =enerator at about 60Hz,5V TTL

4. Windows 2000 OS

5. SG1646A信号发生器(如3

3 SG1646A信号发生器

运行画面如图4所示:

4 WinSgl运行画面

其中modeline一行的含义:

1024 pixelsHorizontal Active period

40 pixelsHorizontal Front porch

136 pixelsHorizontal Sync width

144 pixelsHorizontal Back porch

768 linesVertical Active period

12 linesVertical Front porch

6 linesVertical Sync width

16 linesVertical Back porch

这是一年前的实验结果了,性能并不稳定,有时会Lost Sync,不知现在如何了。。。

参考文章: