2013-10-02 60 views
1

我正在使用Avia模擬器項目的開源Torque 3D遊戲引擎。 我需要從多個IG(圖像發生器)PC生成單個圖像。每個IG顯示器都有自己的具有特定角度偏移的視圖相機,並通過LAN獲取有關服務器當前位置的信息。由遊戲引擎的不同實例生成的視圖的時間同步

我已經設置了多個IG系統。 網絡連接強勁(小於< 1毫秒) 幀率也很好 - 每個IG上大約70 FPS。 但是,當整個圖片移動看起來很糟糕,因爲有些IG比其他人更快地更新視圖。

我正在尋找可以讓IG同步更新的解決方案。也許某種精確的時間同步算法可以使不同的PC通過局域網連接起來。

回答

1

我有一個更簡單的問題,但我的方法可能會幫助你。

您必須在所有機器上運行時鐘,例如15毫秒刻度。每個圖像需要正確生成一個特定的滴答並用滴答ID標記時間標記。顯示設備可以檢查它自己的時鐘,確定它應該顯示的具體的打勾編號(時間),抓取特定時間的圖像並顯示它們。 (想要有正確的思維方式來思考這個問題,想象你的網絡真的很糟糕,想想一個IG在當前顯示時間點前提供1000個圖像,而另一個則在5個時間點之後。結果看起來確實不錯。)

理想情況下,您希望顯示器在IG之後運行一點,因此您始終可以獲得當前刻度的全套圖像。我有一個客戶端 - 服務器設置,並且在顯示器(客戶端)定時器下降時,如果它接近丟失的更新,並且如果速度太慢,就會加快速度。 你必須同步所有的IG機器,所以最好在顯示器上安裝主時鐘,併發送消息來加速任何滯後的IG機器。 (您可能沒有可變的網絡延遲,但是最好爲它們制定計劃。)

關鍵是每個圖像必須在特定時間製作,即顯示器僅包含時間的圖像被顯示,並且合成圖像在他們應該(每15毫秒,毫秒)時顯示正確。另外,不要依賴你的網絡甚至你的機器及時做什麼。使用反饋保持一切同步。

添加對反饋:

說的幀中的最後的圖像在時間t顯示計算機的時間(實時)時間T之後到達爲5ms。如果在時間T上顯示時間T的框架加上10毫秒,則沒有人會注意到滯後,並且您將有足夠的時間來組裝圖像。使用一個常量(10毫秒)的延遲可能對你有用,特別是如果你足夠大。如果你總是使用完全相同的網絡運行,那麼這可能是一條路。

但是,您要視所有IG機器實時精確同步,花費不超過一定的時間來生成圖像,並將它們的圖像以可預測的時間長度傳送到顯示設備。

我建議是什麼讓您的展示機確定基於它接收的圖像時間戳的延遲。這將需要增加延遲,如果它沒有得到它所需要的圖像時,如果所有的IG的是未來的顯示需要什麼運行多個圖像減少它。 (您可能要忽略偶爾真的後期圖像你必須決定哪個更惱人的:這是外的日期的影像,即noticably落後於時間的顯示器,或者noticably加速和減慢的顯示。 )

在我原來的答案,我是在暗示某種反饋顯示,以保持時間運行IG機器,但可能是矯枉過正:您的計算機的時鐘是可能爲不夠好。

非常普遍,當任何兩個進程有一段時間來協調,它如果他們互相交談留在步驟(反饋),而不是每次堅持精心定時時間表是最好的。

+0

謝謝!我正在嘗試原型並檢查你的想法。 「使用反饋保持一切都同步」是什麼意思?我使用NetTime實用程序通過網絡在PC上同步時鐘,並使用同步世界時間每隔30ms創建一次時間戳。 –

+1

@YuriDobronravin:增加了一些反饋。不知道你是否真的需要它,或者你是否想要它,正如我所描述的那樣,但這個概念可能非常有用。 – RalphChapin