2010-04-11

DirectX, XNA, OpenGL 什麼是什麼啊

前陣子想把在實驗室開發的一套超簡易模擬系統(模擬什麼就不重要啦,那是秘密!),加上顯示的功能,因此花了點時間瞭解市面上的 3D 繪圖技術。底下稍微把查詢到的東西重新整理,當作備忘 XD

  • DirectX(wikipedia): Microsoft 所開發出的多媒體函式庫,其下又區分為許多與遊戲、多媒體、顯示相關的套件:Direct3D 處理 3D 顯示,DirectInput 處理鍵盤滑鼠 GamePad 輸入,DirectSound 負責音效等等的功能。
    DirectX 9 是最後一個支援 WindowsXP 的版本,而 DirectX 9Ex/10 與 11 則只支援 Vista 與 Windows7。雖然如此,DX9 的功能已成熟到能建構「堪用」的介面,DX 9/Ex/10/11 的差異主要在於效能、效果方面,因此若要開發汎用的 3D 顯示程式的話,Dx9 仍為首選。DX11 新增的 DirectCompute 套件能利用 GPU 進行一般運算(GPGPU, General-purpose computing on Graphics Processing Units),與 nVidia 出的 CUDA 功能類似,算是 DX11 比較讓我感興趣的部份。
    DirectX SDK 為 C 語言的函式庫,因此能以大多數的 C/C++ Compiler 編譯。除了 Microsoft 平台以外,Wine 計畫實做了可安裝於 Un*x 作業系統下的對等 Runtime Library
  • Managed DirectX: Microsoft 在 .Net 熱潮的時候搞出來的東西,把底層的 DX9 API 包成了 Managed Code,讓 .Net coder 可以很爽的以 Visual Studio 快速開發。這套專案已在 2006 年終止,不過目前下載的 DirectX SDK 還是包含這個套件。由於本體還是 DirectX 9,利用這套 Library 開發的程式應該能在安裝 .Net Framework 與 DirectX 9 的電腦上執行(未確認)
  • XNA (wikipedia): Microsoft 推出的另一套遊戲導向的函式庫。與 Managed DirectX 類似,XNA 同樣將 DirectX 9 的功能以 Managed Code 的方式封裝運作。雖說透過 XNA 寫出的執行檔能在 Windows, Zune, XBox 360, Windows Phone 7.0 下運作,客戶端還是需要安裝特定 runtime library 才能執行,因而 XNA 還是受到了一些詬病。然而 XNA 在 2D 與 3D 程式的開發上,確實比 Managed DirectX 更簡單快速。
    Microsoft 將 XNA 定位為供學生或工作室能快速開發遊戲的平台,因此很難期待 MS 會對它的效能與功能做出多少強化。又因為 XBox360 似乎只支援到 DX9,因此 XNA 應該也不會納入 DX10/11 的新特色。
  • OpenGL (wikipedia): 一套由非營利團隊負責的開源碼圖像系統,功能與 DirectX 中的 Direct2D, Direct3D 類似。開源碼專案一般都會有許多熱心人士建立適用於各種環境的 Library,讓像我這種什麼都不懂的人也能自我感覺良好,因此 OpenGL 的平台與環境支援度遠超越 DirectX;然而各家實做的完成度、效率、附加限制,也變成需要考量的重點。既然我什麼都不懂啊,就別期待能看到這方面的內容啦 ㄎㄎ
    除了 OpenGL 以外,還有其他的開源碼專案如 OpenML 處理多媒體、OpenAL 處理音效、OpenCL 進行運算;這些套件合體後,所能提供的功能與 DirectX 也就差不多啦。
    就 OpenGL + .Net Framework 來說,以前我摸過一下下 Tao,前陣子因為 Tao 官網炸裂,就改裝 OpenTK,目前仍在學習中。

1 則留言:

Miicho 提到...

你好,我最近也是準備寫一套模擬軟體,底限是做出物體的3個視圖(即x,y,z三個面);最終是希望可以變成3D,可以拖拉,有旋轉的效果。目前還在評估要用哪一種。

因為現在用的是VS.net 2010,所以可以用XNA,但我比較好奇的是,XNA是否可以從點、線、面開始把畫面兜起來呢?另外哪一種比較不會消耗系統資源而有高效率呢?

謝謝:)