2015-01-04 104 views
-1

我有一個在Nintendo 3DS上運行的應用程序 - 它使用OpenGL的變體渲染3D動畫。用戶可以將這些場景作爲數據文件在線存儲。也就是說,僅存儲渲染場景所需的數據 - 圖像幀將呈現在設備上。在Web服務器上使用OpenGL進行渲染

此外,我希望人們能夠在線查看這些場景。一種方法可能是通過WebGL在瀏覽器中呈現它們,但我擔心這將需要大量的時間和內存。我寧願讓服務器將場景渲染成可以從網頁播放的電影文件。

我沒有很多與服務器端編程經驗 - 有可能是服務器程序渲染幀OpenGL上下文?由於沒有屏幕,它們將成爲屏幕外幀緩衝區。

對此方法的任何建議?我主要將PHP用於網頁編程,但似乎這不可行。理想情況下,我想編寫一個運行在服務器上的C++程序,這樣我就可以重新使用3DS中的代碼。那可能嗎?我在哪裏可以閱讀有關這樣做?

+1

一般來說,客戶端渲染將始終擊敗服務器端渲染有關響應,甚至更多的服務器資源利用率。同樣取決於您的藝術品資產的複雜性,視頻流的帶​​寬消耗可能會相當快地(或不是,取決於您需要傳輸的內容)突破。作爲客戶/用戶,我更喜歡遊戲在本地運行。 – datenwolf

回答

2

服務器端渲染是可能的,並且將用戶不是依靠在不同瀏覽器和平臺的一致性WebGL的行爲(以及你已經提到的時間/內存性能問題)提供更一致的結果。具有強大瀏覽器和平臺的用戶將無法獲得任何好處,因此您需要考慮用戶需要什麼以及他們使用的平臺。

對於基於Windows的服務器,使用帶有「無屏幕」的OpenGL(w/offscreen framebuffers)將會帶來挑戰。你需要從一個窗口開始建立一個圖形上下文。 (可能會爲Linux建立一個「無窗口」圖形上下文。)您還需要確定如何管理用於渲染的任何GPU資源,因爲它在放緩之前可以支持的併發渲染請求數量受到限制下載和/或未能分配資源(例如幀緩衝存儲器)。

一個選擇可能是使用Mesa(軟件OpenGL)的實施 - 這不會是那麼快,但在理論上,這將與添加的服務器CPU和內存,這符合大多數Web服務器如何向外擴展規模:Mesa offscreen rendering info

它看起來像寫一次,產卵C++ executable with args from PHP is trivial - 儘管你可能希望航線任何長期運行的效果圖到一個單獨的再現服務器,讓您的Web服務器響應。

相關問題