2013-01-11 62 views
0

我有一個WPF應用程序,屏幕的一部分顯示一個對象,需要以3D動態方式呈現,大概爲20 FPS。我知道通常WPF應用程序會使用DirectX來進行3D渲染。 (我也明白世界糧食計劃署有一個簡化的3D API,但我認爲這對我來說並不奏效,因爲我有太多的三角形渲染。)在我的情況下,我想使用OpenGL,因爲有一個很好的機會整個應用程序將被移植到非Windows機器上,我不想重寫3D代碼。離屏(FBO)OpenGL渲染爲WPF創建幀?

我看到有一些嘗試創建一個WPF控件,OpenGL可以直接渲染,但它們都顯得有點太粗糙/有風險使用。

作爲一種更安全的方法,我認爲我可以使用OpenGL的FBO將幀渲染爲屏幕外,然後將位圖實時傳遞給WPF作爲常規2D圖像。

我的問題是關於速度。你預計在這個計劃中會出現破壞性的瓶頸嗎?我認爲FBO渲染速度與OpenGL側直接窗口渲染速度一樣快?我希望從渲染的OpenGL圖像(FBO)中提取位圖應該很快?我不太確定是否將這些圖像交給糧食計劃署,並以20 FPS的速度更新。

你有具體的經驗可以幫助我決定這是否合理嗎?

+0

我不明白爲什麼這被標記爲非問題。我要求提供具體的技術選擇建議。 –

+0

+1,因爲我認爲這是真實而且很正常的問題。 –

回答

0

我想使用OpenGL,因爲有一個很好的機會,整個 應用程序將被移植到非Windows機器

但隨後就意味着你需要重寫你的整個WPF應用程序太因爲這個框架不是跨平臺的。所以在這種情況下,OpenGL的一部分將只是在這裏很小的關注。我認爲你應該重新考慮整個UI技術。例如我會使用Qt SDK,因爲它是真正的跨平臺,你可以隨意連接DirectX和OpenGL。 但是,如果您打算在Windows上使用WPF並使用OpenGL,請使用C# OpenGL wrapper。 是的,你會得到一些性能開銷,因爲那是一個包裝。就像那些用於Java的(JOGL,LWJGL)。但是像MineCraft這樣的遊戲最初是用這些API編寫和運行的。 另一個更具挑戰性的方法是,WPF COM互操作並調用一些C++應用程序,它可以直接從WPF中打包您的OpenGL渲染器,甚至可以使用unsafe mode來儘可能降低級別。儘管如此,您也可以自己嘗試,但它可能會爲您帶來更好的性能但實際上這是很多工作。 最後,我會建議你使用DirectX for Windows,因爲WPF與它自然最好的整合。如果你設計好你的應用,那麼將它連接到OpenGL後端將不會有問題。