Just My Life & My Work

DirectX與OpenGL

初學者想學繪圖程式設計,許多前輩都建議從OpenGL開始學習,我一開始就是學習OpenGL,發現只要會C語言,學習起來得心應手!未來倘若有必要(其實真有必要!)的話,一定要再學DirectX

在台灣的資訊領域,電腦圖學相關教學書籍十分缺乏,在書店很多都是影像應用系列的教學書,很少有繪圖程式設計這類書籍,我跑遍實體書局和逛完虛擬書店,只看到一本2008年出版的「3D繪圖程式設計」,它介紹Direct3D 10/9和OpenGL 2.0的程式設計,前人認為與其視之教學書(tutorial),不如當它參考書(reference),實在需要有更多人投入寫電腦圖學教學書籍才是!之前我都是看Swiftless Tutorials來學習OpenGL,NeHe更是個相當著名的OpenGL教學網站。

話說學習一個工具,必須知道為什麼要學習它。現今最流行的兩個繪圖API是DirectX和OpenGL,它們各有其特色,選擇自己所需來學習吧!以下為前輩對兩者API的觀點:

或許你已經聽過,目前主流的3D繪圖 API 由兩大流派分庭抗禮 — 分別是  DirectGraphics 以及 OpenGL。那應該學一個比較好呢?是的,相信這也是困擾著很多初學者的問題之一。「網路上好像關於 OpenGL 的資源比較多耶?」……「可是遊戲業界好像都是用 DirectGraphics 居多耶?」…………。

我的建議是:兩者都學。

唯有兼容並蓄、納百家之長於一身,才能在遇到問題時,提出最合適的解決方法。OpenGL 與 DirectGraphics 可說是各有優缺點:OpenGL 的程式介面固定性很大,操作方式簡單、易於學習;但它只提供一些基本功能的函式,並且它的版本更新太慢,若遇到新的技術出來,往往只能以 extension 的附加標籤功能來加強。而 DirectX 的使用方法則較為繁雜,但它也提供了更多進階功能的函式可供使用;而它的版本幾乎每年更新,是好事也是壞事,往往新版 DirectX 的程式介面都會和舊版有不小的相異之處,特別是從 DX7 到 DX8 的轉變更是劇烈;這對所有的程式設計師來說,都是一場又一場「程式引擎重寫」的惡夢。

然而,對一個對沒有3D圖學背景、初學3D程式設計的人來說,我建議從 OpenGL 開始。

理由如下:OpenGL 的使用方法較 DirectX 簡易且直覺,可以讓初學者專注於真正重要的3D圖學基礎的學習上。包括書籍、教學網站、原始碼,OpenGL 擁有相當多的資源可供學習及參考。並且 OpenGL 的介面固定、很少變動,新版本的 OpenGL 通常都能夠和舊版本完全相容;不用擔心學了之後,或甚至還沒學完全,每過一年就要再重新學習一次新的函式介面。OpenGL 只提供基本繪圖功能的 API 函式,想讀取一張點陣圖進來?想秀出一些簡單的 model?抱歉,這些全都得自己來完成;因而可以藉此來磨練自己的一些基本程式能力與觀念。

DirectX與OpenGL相比的優點:OpenGL僅專注於圖形(特別是3D圖形)的處理,並且有部分圖像處理能力。而DirectX則主要針對遊戲而設計的,不僅有圖形方面的處理,還包含了圖像、聲音和音樂、輸入設備等等。因此從開發遊戲的角度來說,DirectX擁有絕對的優勢。另一方面,OpenGL由(由多個成員組成的)ARB進行管理和維護,因此功能的增加和版本的升級受到如知識產權(IP)爭議等諸多因素的限制。而DirectX是由Microsoft獨立開發和維護的,本身不存在知識產權的爭議問題,升級和維護方面也能夠得到Microsoft的積極支持,從雙方版本的發展歷程就可見一斑。

DirectX 與OpenGL相比的缺點:OpenGL由於其「開放性」而能夠得到眾多軟硬件廠商的支持,同時它是跨硬件平台、跨操作系統、跨語言的,通用性非常廣。而 DirectX則是「專為Windows下的遊戲程序設計」的,在中低端民用平台上具有比較好的優勢,但從整個圖形處理領域來說,實力則與OpenGL相差很多。

參考:OpenGL講座稿_5. DirectX與OpenGL淺談遊戲程式設計入門 – [基礎篇]

隨意留個言吧:)~

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

標籤雲