1

我正在为avia 模拟器项目使用开源 Torque 3d 游戏引擎。我需要从几台 IG(图像生成器)PC 生成单个图像。每个 IG 显示器都有自己的具有一定角度偏移的摄像头,并通过 LAN 从服务器获取有关当前位置的信息。

我已经设置了多 IG 系统。网络连接稳定(小于 <1 毫秒) 帧速率也很好 - 每个 IG 大约 70 FPS。然而,在移动整个画面的同时,因为一些 IG 比其他人更快地更新他们的观点,所以看起来整个画面都被破坏了。

我正在寻找能够同时进行 IG 更新的解决方案。也许是某种精确的时间同步算法,使通过 LAN 连接的不同 PC 充当一个。

4

1 回答 1

1

我有一个更简单的问题,但我的方法可能会对你有所帮助。

您必须在所有机器上运行时钟,例如 15 毫秒的滴答声。每个图像都需要针对特定​​的刻度正确生成,并标有其刻度 ID 时间。显示机器可以检查它自己的时钟,确定它应该显示的特定滴答数(时间),抓取该特定时间的图像,并显示它们。

(要有正确的心态来思考这个问题,想象你的网络真的很糟糕,想想一个 IG 比当前显示时间提前 1000 个图像,而另一个比当前显示时间差 5 个时间点。为这种系统编写,结果看起来真的对你有的那个很好。)

理想情况下,您希望您的显示器在 IG 后面运行一点,以便您始终拥有当前刻度的完整图像集。我有一个客户端-服务器设置,如果显示(客户端)计时器接近丢失更新,我会减慢它的速度,如果它落后太远,我会加快它的速度。 必须同步所有 IG 机器,因此最好在显示屏上显示主时钟并让它发送消息以加速任何落后的 IG 机器。(您可能没有我所遇到的可变网络延迟,但最好为它们做好计划。)

关键是每个图像必须在特定时间制作,显示包括正在显示的图像,并且合成图像在它们应该出现的时候正确显示(每 15 毫秒,毫秒)。此外,不要依赖您的网络甚至您的机器来及时执行任何操作。使用反馈来保持一切同步。

反馈补充:

假设时间 T 帧的最后一个图像在时间 T 后 5ms 到达显示计算机的时间(实时)。如果您在 T 加上 10 毫秒时显示时间 T 的帧,则没有人会注意到延迟,您将有足够的时间来组装图像。使用恒定(10 毫秒)延迟可能对您有用,特别是如果您将其设置得足够大。如果您始终使用完全相同的网络运行,这可能是您要走的路。

但是您依赖于您的所有 IG 机器实时精确同步,生成图像的时间不超过一定的时间,并在可预测的时间内将图像传送到显示机器。

我的建议是让你的显示机器根据它接收到的图像上的时间戳来确定延迟。如果它没有及时获得它需要的图像,它会想要增加延迟,如果所有 IG 都在显示需要的图像之前运行几个图像,它会减少它。(您可能想忽略偶尔出现的非常晚的图像。您必须决定哪个更烦人:过时的图像、明显落后于时间的显示,或者明显加速和减速的显示。 )

在我最初的回答中,我建议从显示器提供某种反馈,以保持 IG 机器按时运行,但这可能有点过头了:您的计算机时钟可能已经足够好了。

非常一般地,当任何两个流程必须随着时间的推移进行协调时,最好让它们相互交谈以保持同步(反馈),而不是每个都遵守精心安排的时间表。

于 2013-10-02T18:14:10.593 回答