Networking 游戏引擎不同实例生成的视图的时间同步

Networking 游戏引擎不同实例生成的视图的时间同步,networking,real-time,game-engine,torque3d,Networking,Real Time,Game Engine,Torque3d,我正在为avia模拟器项目使用开源的Torque 3d游戏引擎。 我需要从几个IG(图像生成器)PC生成单个图像。每个IG显示器都有自己的具有特定角度偏移的视图摄像头,并通过LAN从服务器获取当前位置的信息 我已经设置了多IG系统。 网络连接是健壮的(小于我有一个简单得多的问题,但我的方法可能会帮助您 你必须在所有机器上运行时钟,比如说15毫秒的滴答声。每个图像需要为特定的滴答声正确生成,并标记其滴答声ID时间。显示机器可以检查自己的时钟,确定特定的滴答声编号(时间)对于它应该显示的,抓取特定时

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

我已经设置了多IG系统。
网络连接是健壮的(小于我有一个简单得多的问题,但我的方法可能会帮助您

你必须在所有机器上运行时钟,比如说15毫秒的滴答声。每个图像需要为特定的滴答声正确生成,并标记其滴答声ID时间。显示机器可以检查自己的时钟,确定特定的滴答声编号(时间)对于它应该显示的,抓取特定时间的图像,并显示它们

(要有正确的思维方式来思考这一点,想象你的网络真的很糟糕,想象一个IG在当前显示刻度之前发送1000张图像,而另一个在当前显示刻度之后发送5张图像。为这种系统编写代码,在你拥有的系统上,结果会非常好。)

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

关键是每个图像必须在特定的时间制作,显示仅包括当前显示的图像,并且合成图像应在正确的时间显示(每15毫秒,以毫秒为单位)。此外,不要依赖您的网络甚至您的机器及时执行任何操作。使用反馈保持所有内容同步

添加反馈:

假设时间T的最后一帧图像在显示计算机的时间T后5毫秒到达(实时)。如果在时间T加10毫秒时显示时间T的帧,没有人会注意到延迟,您将有足够的时间组装图像。使用常数(10毫秒)延迟可能对你有用,尤其是当你把它做得足够大的时候。如果你总是在完全相同的网络中运行,那么延迟可能是一种方法

但是你需要依赖于你的所有IG机器被精确地实时同步,只需要一定的时间来产生它们的图像,并在可预测的时间长度内将它们的图像传送到显示机器

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

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


一般来说,当任何两个过程都需要随着时间的推移进行协调时,最好是彼此交谈以保持步调一致(反馈),而不是每个过程都遵循一个精心安排的时间表。

我有一个简单得多的问题,但我的方法可能会对您有所帮助

你必须在所有机器上运行时钟,比如说15毫秒的滴答声。每个图像需要为特定的滴答声正确生成,并标记其滴答声ID时间。显示机器可以检查自己的时钟,确定特定的滴答声编号(时间)对于它应该显示的,抓取特定时间的图像,并显示它们

(要有正确的思维方式来思考这一点,想象你的网络真的很糟糕,想象一个IG在当前显示刻度之前发送1000张图像,而另一个在当前显示刻度之后发送5张图像。为这种系统编写代码,在你拥有的系统上,结果会非常好。)

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

关键是每个图像必须在特定的时间制作,显示仅包括当前显示的图像,并且合成图像应在正确的时间显示(每15毫秒,以毫秒为单位)。此外,不要依赖您的网络甚至您的机器及时执行任何操作。使用反馈保持所有内容同步

添加反馈:

假设时间T的最后一帧图像在显示计算机的时间T后5毫秒到达(实时)。如果在时间T加10毫秒时显示时间T的帧,没有人会注意到延迟,您将有足够的时间组装图像。使用常数(10毫秒)延迟可能对你有用,尤其是当你把它做得足够大的时候。如果你总是在完全相同的网络中运行,那么延迟可能是一种方法

但是你依赖于你所有的IG机器被精确地实时同步,不需要任何mor