【Visual C++】遊戲開發筆記十九 DirectX與OpenGL的博弈

本系列文章由zhmxy555(毛星雲)編寫,轉載請註明出處。

http://qianmo.blog.51cto.com/5127279/875462

作者:毛星雲 郵箱: [email protected] 歡迎郵件交流編程心得

 

作爲遊戲開發界老生常談的話題,淺墨認爲有必要寫這樣一篇文章來專門分析一下兩者的優劣。這節就是給大家

對DirectX和OpenGL的一個整體的認知,也以至於擴大我們的【C++遊戲開發】專欄的適用範圍到廣義的遊戲開發,而不僅

僅侷限於Windows遊戲開發。畢竟適用於iOS和Android以及WindowsPhone的各種遊戲引擎基本上都是採用C++編寫的,

希望有幸將我們的C++遊戲開發的範疇擴展至iOS、Android以及WindowsPhone平臺,爲這些熱門的移動平臺編寫出我們自

主開發的遊戲引擎,以促進移動遊戲開發的進一步發展。

一、體系認知
 

目前,我們可接觸到的圖形API可分爲OpenGL和DirectX兩大體系,前者是一項開放性的標準,主攻專業圖形應用和3D遊戲,由"OpenGL架構委員會"掌控,其成員包括業內各大廠商,目前主要推動標準發展的實際領導者是3Dlabs。DirectX則是微軟制定的API標準,除了圖形API功能外,它還包含音頻API等功能,只不過其圖形部分升級最快、也最爲人所知。DirectX針對的主要是娛樂應用,目前流行的DirectX 9 API功能極爲強勁,目前市面上的大部分新3D遊戲都基於DirectX 9,而圖形芯片製造商更是將它作爲標準、競相提供對DirectX 9的支持,是否支持DirectX 9也成爲兩代顯卡的分水嶺。

雖然DirectX在家用市場全面領先,但在專業高端繪圖領域,OpenGL是不能被取代的主角。

2009年10月22日,微軟公司正式發佈Windows 7,DirectX 11集成在Windows 7 中同步登場,但其實DirectX 11只是DirectX 10的大幅度加強版,而不是9.0C和10.0/10.1的徹底革新。

國內這方面的教材革新比較緩慢,由於DirectX 11與windows 7集成,在2009年同時推出,而導致基於DirectX 11的中文教材與文獻非常稀少。

而爲了讓大家掌握到國際最新的技術,本系列文章後續內容會對目前最新的DirectX 11進行深入講解,希望有興趣瞭解最新技術的朋友們持續關注。
 

下面我們分別簡單概述一下DirectX與OpenGL。

二、 微軟的寵兒——DirectX
 

DirectX是微軟公司提出的一種應用程序接口(API),由C++編寫,它可讓以Windows爲平臺的遊戲或多媒體程序獲得更高的執行效率,加強3d圖形和聲音效果,並提供設計人員一個共同的硬件驅動標準,讓遊戲開發者不必爲每一品牌的硬件來寫不同的驅動程序,也降低用戶安裝及設置硬件的複雜度。

DirectX並不是一個單純的圖形API,它是由微軟公司開發的用途廣泛的API,它包含有Direct Graphics(Direct 3D+Direct Draw)、Direct Input、Direct Play、Direct Sound、Direct Show、Direct Setup、Direct Media Objects等多個組件,它提供了一整套的多媒體接口方案。只是其在3D圖形方面的優秀表現,讓它的其它方面顯得暗淡無光。

這樣說也許大家還是有些不太明白,那我們就從字面意義上來理解吧。Direct英文含義是“直接”的意思,表示直接建立在硬件之上,而後邊的X則表示“未知的”,具體代表相關的組件,比如3D、Sound、Music、Input、Play、Show。我們將DirectX中代表泛指的“X”換做一個特指,比如說我們換做”3D”,那麼DirectX搖身一變就成了它的一個組件Direct3D

微軟比較明智,爲衆廠家推出了一個共同的應用程序接口——DirectX,並賦予它“硬件設備無關性”的特性。只要這個遊戲是依照DirectX來開發的,不管你是什麼顯卡、聲卡、統統都能玩,而且還能發揮更佳的效果。當然,前提是你的顯卡、聲卡的驅動程序也必須支持DirectX。

這樣就很容易理解了,總結起來就是,DirectX的出現就是爲各種品牌的硬件提供了一個共同的硬件驅動標準。

三、不甘做備胎——OpenGL
 

OpenGL定位爲專業圖形處理,英文全稱是"Open Graphics Library",意爲"開放的圖形程序接口"。OpenGL的歷史可以追溯到上個世紀90年代初,標準誕生之後它一直佔據主導地位。微軟的DirectX出現的時間比OpenGL來得晚,但就在最近數十年,OpenGL因發展遲緩而被DirectX反超。

事情回溯到1999年,OpenGL發生了一次比較失敗的變革,導致了之後的危機:

OpenGL的締造者SGI(Silicon Graphics硅圖)決定與微軟聯手開發下一代圖形接口--Ferihant。Ferihant應用於Windows系統中,作爲OpenGL和DirectX的取代者。爲此,Ferihant將包含DirectX與OpenGL各自的優點,並加入場景貼圖之類的高級功能。由於有了Ferihant,SGI停止了原先的Windows版OpenGL開發計劃,外界對此表示讚賞。然而Ferihant計劃沒進行多久,雙方的合作就出現裂痕,微軟不積極合作,光想把SGI的圖形技術併入DirectX的做法令SGI非常不滿,SGI隨後宣佈中止合作並撤回所有的開發人員,Ferihant遂告夭折。在這之後,OpenGL和DirectX似乎互不相干,繼續在PC平臺上發展,但狀況對比鮮明:DirectX從此突飛猛進,而OpenGL卻長期原地徘徊。其間,DirectX 8 API更是正式成爲娛樂顯卡的標準,id公司所形容的"支離破碎的DirectX"早已非吳下阿蒙,大量的3D遊戲轉向了DirectX體系。

儘管如此,OpenGL目前仍然是高端圖形API的代名詞, Khronos Group在2009年3月又公佈了升級版新規範OpenGL 3.1,也是這套跨平臺免費API有史以來的第九次更新,它以強勁的功能特性爲業界矚目,而顯卡製造商對OpenGL API的重視程度並未縮減。

Open GL仍然是唯一能夠取代微軟對3D圖形技術的完全控制的API。它仍然具有一定的生命力,但是Silicon Graphics已經不再以任何讓微軟不悅的方式推廣Open GL,因而它存在較高的風險。遊戲開發人員是一個有着獨立思想的羣體,很多重要的開發人員目前仍然在使用Open GL。因此,硬件開發商正在設法加強對它的支持。Direct3D目前還不能支持高端的圖形設備和專業應用; Open GL在這些領域佔據着統治地位。最後,開放源碼社區(尤其是Mesa項目)一直致力於爲任何類型的計算機(無論它們是否使用微軟的操作系統)提供Open GL支持。

在可預見的將來,OpenGL仍將是DirectX的宿敵.
 

四、DirectX與OpenGL的博弈
 

首先,做一個概念性的總結,DirectX是一個功能強大的統一的API接口,而OpenGL是一個高級圖形庫。

<1>市場佔有率,DirectX的壓倒性優勢

經常玩電腦遊戲的各位都會有這樣的一個體會,我們安裝一款遊戲後,經常會報錯缺少某dll而無法進入,但只要我們更新到最新的DirectX運行環境,基本上就可以正常進行遊戲了,這是因爲市面上絕大多數遊戲都是基於DirectX的。對遊戲開發瞭解有限的玩家基本上都會知道DirectX是他們玩遊戲必須安裝的,但知道OpenGL的卻寥寥無幾。

毋庸置疑,DirectX佔據着遊戲市場絕對的優勢,據估計目前市面上幾乎所有的電腦遊戲都是基於DirectX而開發的。《百度今日網遊排行榜》上的前五十名,無一例外,全部拜倒在DirectX的石榴裙下。這裏我們列舉出前十名,他們依次是《地下城與勇士》,《穿越火線》 ,《英雄聯盟》,《魔獸世界》,《QQ飛車》,《QQ炫舞》,《夢幻西遊》《龍之谷》,《倩女幽魂》,《第九大陸》 。(2012年4月29號榜單)

且一款顯卡,想要立足於PC市場,首先要做的就是支持DirectX,而支持OpenGL,只是備胎而已。

使用DirectX是因爲API的選擇是基於遊戲開發的積極反饋,這一切都發生在2005年:

如果一個API越流行,那就有越多人用,然後它就會更流行,如此循環。。。這種網絡效應帶來的結果就是:更流行的API獲得更好的硬件廠商支持,圖形程序員隨後更意於選擇他們已經熟知的API。

DirectX的勝出得益於微軟的兩次十分尖銳的戰役,圍繞XBox360和windows vista,當然DirectX的勝出原因也包括着圍繞着OpenGL的開源項目的固步自封,以及微軟圍繞DirectX進行的誇大宣傳攻勢。

<2>OpenGL的現狀,一半明媚一半憂傷

雖然DirectX在家用市場全面領先,但在專業高端繪圖領域,OpenGL是不能被取代的主角。

OpenGL仍然是唯一能夠取代微軟對3D圖形技術的完全控制的API。它仍然具有一定的生命力,但是Silicon Graphics已經不再以任何讓微軟不悅的方式推廣Open GL,因而它存在較高的風險。遊戲開發人員是一個有着獨立思想的羣體,很多重要的開發人員目前仍然在使用Open GL。因此,硬件開發商正在設法加強對它的支持。Direct3D目前還不能支持高端的圖形設備和專業應用; Open GL在這些領域佔據着統治地位。最後,開放源碼社區(尤其是Mesa項目)一直致力於爲任何類型的計算機(無論它們是否使用微軟的操作系統)提供Open GL支持。

<3>跨平臺,OpenGL優勢之所在

關於跨平臺,這是OpenGL對比DirectX絕對的優勢。

DirectX僅能用於Windows系列平臺,包括Windows Phone/Windows Mobile/Windows CE系列以及XBOX/XBOX360。

而OpenGL除了可以支持DirectX所適用的平臺外,可以支持Unix、Linux、MacOS、Android、iOS等。

值得一提的是,由於最近幾年移動開發市場的迅猛發展,Android和iOS需要一款的專業的圖形庫,跨平臺的OpenGL無疑是最好的選擇。
 

<4>全能性,DirectX優點明顯

DirectX 包含圖形, 聲音, 輸入, 網絡等模塊,包含開發一款遊戲所需的全部工具,全能性明顯。

OpenGL 只是圖形函數庫。只能用於圖形處理,用於開發遊戲時,輸入,聲音,網絡等方面還需配合其他函數庫。比如聲音方面我們就經常配合採用OpenAL。

五、結語

介紹得這麼多了,大家應該有一個整體的認知了,這裏我們做一個總結。

如果你想進行PC,Windows Phone以及XBOX/XBOX360相關的開發(不僅僅侷限於遊戲開發),選擇DirectX。

如果你想進行Android、iOS、MacOS 、Linux等平臺的遊戲開發或相關專業圖形開發,或者喜歡跨平臺的特性,選擇OpenGL。

本篇文章到這裏就結束了。這節就是給大家對DirectX和OpenGL的一個整體的認知,掃清圖形庫選擇方面的障礙,希望能對有這方面疑惑的朋友有所幫助。

這篇文章涉及到不同技術之間的比較了,淺墨不希望有不和諧的事情發生,也許是一家之言,有些地方或許不太中肯,歡迎有

不同見解的朋友與我進行討論與互動。

另外在這裏預告一下,本系列文章後續內容會對目前最新的而中文教材稀少的DirectX 11技術進行深入講解,希望有興趣瞭解

最新技術的朋友們持續關注。
 

感謝一直支持【Visual C++】遊戲開發筆記系列專欄的朋友們,也請大家繼續關注我的專欄,我一空就會把自己的經驗寫出來與大家分享。

精通遊戲開發的路還很長很長,非常希望能和大家一起交流,共同學習,共同進步。

大家看過後覺得值得一看的話,可以頂一下這篇文章,你們的支持是我繼續寫下去的動力~

如果文章中有什麼疏漏的地方,也請大家指正。也希望大家可以多留言來和我探討編程相關的問題。

最後,謝謝各位一直的支持~~~

                                                                    ——————————淺墨於2012年4月29日

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章