即使 Direct3D 和 OpenGL 比他們過去經(jīng)常更大量相似, 有寂靜的區(qū)別, 和和總計
API 戰(zhàn)爭, 各邊有它的追隨者。 關(guān)于辯論最重大的區(qū)域的討論隨后而來
易用
在1998 Direct3D 為人所知是相當(dāng)笨拙的使用- 之前執(zhí)行狀態(tài)變動, 例如, 它要求一定數(shù)量的復(fù)雜操作。 例如, 使能 alpha 混和, 你必須創(chuàng)造所謂 執(zhí)行緩沖, 鎖它, 填裝它以正確 opcodes
(與結(jié)構(gòu)倒栽跳水告訴一起多少opcodes 緩沖包含了和一特別"出口" opcode), 打開它和最后送它到司機為施行。 相反, OpenGL
節(jié)目會做一唯一"glEnable(GL_BLEND);" 電話。 這個模型寧可令人沮喪為許多程序員; 最著名的例子大概來自John Carmack's 。計劃文件他敦促的地方 Microsoft 對下落Direct3D 一共傾向于OpenGL 。
但是, 用Direct3D 版本8, 許多變動做了, 并且Direct3D 不能再稱笨拙的API 。 Direct3D 和OpenGL 仍然跟隨不同的范例, 雖然-- Direct3D 根據(jù)微軟的 com 技術(shù)和因而是在它的心臟 對象被安置 (那么每 texture 是對象, 例如) 。 OpenGL 沒有這樣一個范例, 但是反而為人所知作為a 系統(tǒng) 獲取通過簡單 C 作用。 哪個最后是"更好" 取決于程序員的特選。 OpenGL 系統(tǒng)也許被包裹以對象針對的編程的接口作為游戲引擎一部分。 這樣努力由SGI 和微軟執(zhí)行了作為 Fahrenheit 圖表API, 但項目是失敗。
Direct3D 比OpenGL 傾向于是離硬件較近。 例如, 如果節(jié)目減到最小和然后被恢復(fù), Direct3D 用戶將得到什么為人所知作為a 失去的設(shè)備,
意味節(jié)目必須re 向上作用的負載所有紋理, 設(shè)置所有端點shader 常數(shù)等。 OpenGL 透明地做這為程序員, 當(dāng)然在較少控制的費用,
但不要求應(yīng)用處理失去的設(shè)備。 Direct3D 應(yīng)用也許, 例如, 必須停留比賽當(dāng)向上作用的負載發(fā)生, 不會必需為OpenGL 賽。
使用OpenGL 一個廣泛更喜歡的方式是什么OpenGL 稱"直接方式", 允許程序員輸入端點(或端點屬性譬如紋理協(xié)調(diào)或顏色)
對當(dāng)前的端點緩沖一個個(e.g 。 "glVertex3f(1 。0f, 2 。0f, 3 。0f);"), 以速度明顯的費用。
這是畫簡單的事一個非常方便方式, 但它實踐上使rendering 著名地更慢。 這是同樣方法被采取在Direct3D 5,
和然后被增添在DirectX 8 增加端點和索引緩沖- 能當(dāng)?shù)乇淮娣旁谟布榭焖僭L問由GPU 有效地的被貯藏的緩沖幾何,
避免數(shù)據(jù)的拷貝從用戶方式應(yīng)用對硬件。
以能力提供數(shù)據(jù)直接時尚通過DrawPrimitiveUP/DrawIndexedPrimitiveUP APIs 和對端點和索引緩沖的緩沖的用途, 接近對用途根據(jù)的程序員可能選擇哪些必需。
OpenGL 1 。1 介紹了執(zhí)行浩大地更好比直接方式為巨額幾何) 的端點列陣(, 并且一個最新引伸介紹了"端點與Direct3D's 端點緩沖是主要功能上等效的緩沖對象" (VBOs) 。
其它重大區(qū)別在APIs 之間是他們處理rendering 對紋理的方式: Direct3D
供應(yīng)一個相當(dāng)方便方式為那(SetRenderTarget()) 與OpenGL 相對, 你必須使用P 緩沖或映像點緩沖為了取得同樣結(jié)果。 這,
然而, 廣泛被認(rèn)為OpenGL 的最鋒利的點API: 如果程序員比由司機制造商渴望不同地創(chuàng)造他的codepath, 變動也許是對兼容性費用,
因為代碼將下跌回到軟件rendering, 如此根本上使應(yīng)用不能再用。 (根據(jù)a Gamasutra 文章 (注冊要求), 上述的約翰?Carmack 考慮下降OGL 到D3D 由于對P 緩沖的被策劃的用途。) "機架緩沖器對象" 引伸(FBO) 演講這個缺點, 帶來Direct3D 等效功能給OpenGL 。
速度
在Direct3D 和OpenGL 的創(chuàng)立之后作為可實行的圖表圖書館, 微軟和SGI 參與了什么文學(xué)把視為幾個片斷"API 打仗" 。
這場戰(zhàn)爭, 雖則經(jīng)常關(guān)于結(jié)構(gòu), 并且會傾向于為API 提供優(yōu)越表現(xiàn)的根本論據(jù)劃分。 這與在這競爭時間期間, 微軟的Direct3D 和SGI
的OpenGL 各種各樣的實施被貶謫對軟件renderer 實施在消費者市場上的事實有關(guān)(由于圖表硬件的非常高費用當(dāng)時) 。
因而能力使一個具體圖書館勝過另單一地經(jīng)常跌倒了圖書館和不第三方情況, 譬如一個惡劣的圖形卡。
微軟, 創(chuàng)造了Direct3D 和OpenGL 實施為他們的平臺, 依照快速地根據(jù)銷售了Direct3D
被完成了得in-house 二的表現(xiàn)比較APIs 。 那時, 報告被認(rèn)為了真實(關(guān)于微軟的二實施)
放置責(zé)備對表現(xiàn)缺乏在嚴(yán)謹(jǐn)規(guī)格和依照必需OpenGL 。 這觀念被改變了在1996 SIGGRAPH (特殊興趣組在計算機圖表) 會議。 那時,
SGI 向微軟挑戰(zhàn)以O(shè)penGL 告訴的CosmoGL 的他們自己的優(yōu)化窗口軟件實施(通過對各種各樣的演示的用途) 顯示OpenGL
在許多情況下執(zhí)行了在, 或上述, Direct3D 的能力。 為SGI, 這是一個重要里程碑因為它表示, 缺乏表現(xiàn)在OpenGL
軟件rendering 沒有歸結(jié)于OpenGL 結(jié)構(gòu)或設(shè)計, 但是相當(dāng)由于缺乏優(yōu)化在實施運送了由微軟。
從那以后, 辯論漂移越來越從軟件rendering 表現(xiàn)和集中于其它問題。 雙方試圖要求勝利在各種各樣的優(yōu)點,
雖然充足的證明對這個日期未被提供API 真實地陳列最佳的表現(xiàn)。
這與事實有關(guān)應(yīng)用的表現(xiàn)說謊一樣在程序員的能力寫好代碼和堅實硬件和司機出現(xiàn)象它做在API 。
因而, 在現(xiàn)代系統(tǒng)情況下, API 速度的問題變得越來越無意義。 今天自, 圖表密集的應(yīng)用發(fā)現(xiàn)自己在CPU
跳起在中等水平的圖表硬件, 或由緩慢的IO 通入限制橫跨其它系統(tǒng)組分; 因此, 焦點轉(zhuǎn)移了從API 到計算機圖表的硬件末端。 結(jié)果, APIs
傾向于現(xiàn)在面對的更加巨大的問題落沿實用性、樸素和特點的線代替速度。
結(jié)構(gòu)
OpenGL 的API, 最初被寫為然后強有力的SGI 工作站, 包括很少被使用的一定數(shù)量的命令(典型地只在"高端" rendering
情況) 。 API 整體上包含大約250 個電話, 但唯一一個子集或許100 是有用的在賭博上下文。 OpenGL
從未定義了一個有用的子集被使用在這些情況, 應(yīng)該真正地被實施在硬件為最佳的表現(xiàn)的一套命令。 MiniGL, 被3Dfx
發(fā)布作為補缺者議案支持glQuake, 也許已經(jīng)做了一個基本框架起點但另外的特點如鋼板蠟紙由比賽很快采取了確認(rèn)許多表面上高結(jié)尾能力包括。
問題后來消失當(dāng)現(xiàn)代卡片支持越來越API 在硬件里和適合老練和特點富有比OpenGL 版本1 。那個時代的1 臺或任何SGI 工作站。
OpenGL 結(jié)構(gòu)地被設(shè)計了如同特點富有的API 從外邊盡管缺乏硬件支持。 規(guī)格在一些方面駕駛了這些特點的實施。
設(shè)法加速一個特點在硬件里的隨后實施自動地會提供表現(xiàn)增量對更舊的軟件應(yīng)用被寫反對API 。 這是含蓄硬件抽象的例子在API,
這的例子在行動是當(dāng)新GeForce 256 圖形卡來了, 比賽象 Quake III 競技場 自動地受益于 變換& 照明設(shè)備 特點, 但是Direct3D 開發(fā)商必須等API 的下個版本被發(fā)布和重寫他們的比賽使用新特點。 清楚OpenGL 方法牌子感覺為會做在軟件無論如何的根本事, 例如變革和照明設(shè)備, 但其它非根本更加緩慢的特點也許由應(yīng)用一共更好避免直到硬件支持存在了。
OpenGL 包含方法的不利是, 應(yīng)用有沒什么告訴它什么是快速的并且什么是慢的不同于測量的表現(xiàn)。
如此也許運行優(yōu)良在一張?zhí)厥饪ㄆ囊粋€特點, 象使用鋼板蠟紙操作(使用一個老例子), 能減慢應(yīng)用下來不能接受地在其它卡片。 D3D
另一方面不是包含的和因此開發(fā)商會檢查能力位看如果特點存在了或不是和不會是有下落回到一個慢道路的危險。 缺點是,
許多特點不存在在能力位或任何API 殘余部分, 因此直到硬件支持或鋼板蠟紙支持增加了來D3D,
卡片制作商不能暴露它于開發(fā)商并且游戲開發(fā)商不能獲得先進的支持入他們的比賽。
Direct3D 被設(shè)計了以一塊硬件抽象層在微軟開發(fā)很多前端緩和司機發(fā)展的微軟的最初的發(fā)行之前。
這能使它更加容易實施在賭博卡片, 并且以更加簡單的特點集合是可能的它快速的收養(yǎng)的主要原因在90 年代晚期。 D3D 開始了生活當(dāng)一個優(yōu)化3D
軟件引擎被購買以公司的接管告訴RenderMorphics 因此它開始了以優(yōu)化軟件rendering 能力雖然這不再是關(guān)心。
微軟有二個司機模型為要求OpenGL 充分的地面實施由圖形卡的制作商的OpenGL 、可安裝的客戶司機,
并且微軟供應(yīng)很多前端變革和設(shè)定哺養(yǎng)圖形卡的微型客戶司機。 微軟摒棄了MCD 司機模型在幾個硬件制作商準(zhǔn)備好運輸MCD 司機之前,
延遲最大OpenGL 支持在微軟視窗。
引伸
OpenGL 引伸 機制大概是沉重爭執(zhí)的區(qū)別在二之間APIs 。 OpenGL
有任一個司機可能給它自己的引伸做廣告對API, 如此介紹新功能譬如混合方式、轉(zhuǎn)移數(shù)據(jù)新方式到GPU, 或另外紋理包裹的參量的一個機制。
這允許新功能迅速被暴露, 但可能經(jīng)常導(dǎo)致混亂當(dāng)不同的販賣者實施相似的引伸與另外APIs 。 許多這些引伸由OpenGL 階段性地規(guī)范化 建筑學(xué)評論委員會 并且可能包括在未來OpenGL 修正。
另一方面, Direct3D 由一位販賣者指定(Microsoft) 只, 導(dǎo)致更加一致的API, 但有時錯過的vendor-specific 特點。 nVidia 的 UltraShadow[ 1 ] 技術(shù), 例如, 不是可利用的在股票Direct3D APIs 在文字之時。 值得注意的是, Direct3D 支持紋理格式引伸(通過所謂 FourCC 代碼), 他們少許為人所知和很少被使用了, 但現(xiàn)在被使用為 DXT 紋理壓縮。
引伸區(qū)別的例子是更新的圖形卡增加支持的方式用 映像點shaders (知道在OpenGL 作為"片段編程") 。 在Direct3D 之下有一唯一"映像點shader 1 。1"(PS1.1) 從事兩的標(biāo)準(zhǔn) GeForce 3 和上升, 和 Radeon 8500 和上升。 在OpenGL 之下同樣功能被獲取通過習(xí)慣引伸。
在理論上微軟方法意味一個唯一代碼道路可能支持兩張卡片, 但是在OpenGL 之下程序員會必須寫二個不同系統(tǒng)。
實際上事不是那么簡單。 shaders 的nVidia 的實施緊緊被栓對他們的卡片一定數(shù)量不凡的特點,
和因此實際上程序員可能會必須寫二套代碼無論如何。 但是, 這個情況短時間只存在了, 第二代映像點陰影卡片是可觀地更象, 導(dǎo)致映像點Shader
2 。0. 到時OpenGL 介紹了它自己ARB 批準(zhǔn)的引伸為端點和映像點shader 引伸(GL_ARB_vertex_program
和GL_ARB_fragment_program) 。
輕便
很大程度上, Direct3D 被栓對一個具體平臺: Microsoft 窗口. Direct3D API (和DirectX 的一個部份口岸總之) 被實施了 酒, 和微軟供應(yīng)一個修改過的版本為 Xbox 發(fā)展。 但就這些例外而論, Direct3D 那么緊緊集成窗口, 端起它對非窗口操作系統(tǒng)是非常困難的。 實際上微軟曾經(jīng)許諾提供一個版本為 PowerPC Apple Macintoshes, 但以后摒棄這個項目, 因此殺害在平臺的游戲發(fā)展直到蘋果計算機公司被規(guī)范化在OpenGL 。 但是, 第三方公司開發(fā)了一個DirectX 口岸對 Mac OS X 叫 MacDX -- 這個口岸的質(zhì)量客觀地仍然未被評估。
OpenGL, 另一方面, 有實施可利用橫跨各種各樣的平臺包括窗口, 基于Unix 的系統(tǒng), Linux, 上述 Mac OS X 和 Nintendo GameCube. 總之, 幾乎所有現(xiàn)代 操作系統(tǒng) 有能力在rendering 3-dimensional 圖表上將有某一排序一個當(dāng)?shù)豋penGL 司機, 或訪問對OpenGL 服從的軟件renderer 譬如 Mesa 3D.
這做出Direct3D 一個限制的選擇; 但是, 它是由程序員決定決定如果這"封鎖行動" 是問題。 例如,
比賽市場在非窗口計算機平臺仍然是相當(dāng)小在文字之時, 因此為許多比賽出版者這也許不是一個大問題(然而, 這也許歸結(jié)于缺乏Direct3D
支持在非窗口平臺) 。
低結(jié)束卡片(譬如英特爾極端圖表線) 比OpenGL 傾向于有更好的司機支持對于Direct3D; 兩個 ati 技術(shù) 和 nVidia, 顯然二個最大的球員在分離圖表市場上在文字之時, 有范圍從可通過對優(yōu)秀為所有他們的現(xiàn)代卡片的OpenGL 司機(在兩個窗口和多數(shù)非窗口平臺) 并且做對OpenGL 標(biāo)準(zhǔn)的未來支持。
用戶
OpenGL 比DirectX 總被用于一個極大地更加了不起的程度在專業(yè)圖表市場上, 當(dāng)DirectX 是大量使用為計算機游戲應(yīng)用。
這是根據(jù)微軟的正式立場點; 微軟承認(rèn), 專業(yè)圖表比DirectX 是更多OpenGL 的領(lǐng)域。 有一定數(shù)量的原因為什么OpenGL
和DirectX 被選擇在彼此在二個不同市場上, 并且它主要反射這二不同的需要用戶。
專業(yè)圖表應(yīng)用, 譬如 計算機輔助設(shè)計 并且 計算機引起的成像
有整個地另外需要從計算機圖表。 經(jīng)常3D 設(shè)計卡通者、設(shè)計師、建筑師、科學(xué)家和工程師看他們的模型作為wireframes
或簡單的Gouraud 被遮蔽的對象。 是專業(yè)應(yīng)用, 他們分析的場面可能需要被回報許多次每秒的由成千上萬個的多角形做成。 相反地,
gamers 看有實時photorealistic 場面引起以復(fù)雜的作用譬如紋理, 爆沸映射的, 容量霧, 微粒作用, 嚴(yán)謹(jǐn)阿爾法混和等等,
真正地不事關(guān)對專家。
許多專業(yè)圖形卡只支持了OpenGL, 然而, 現(xiàn)今所有主要專業(yè)卡片制造商(Nvidia, ATI_Technologies 和 3dlabs) 還支持Direct3D 。
但是, 主要原因為什么專家3D 創(chuàng)作應(yīng)用用途OpenGL 是大多數(shù)是出生在Silicon Graphics 工作站在90
年代初期, 和演變從那里其它平臺。 許多這些應(yīng)用, 例如Softimage|3D, 是第一被寫在SGI 的虹膜GL, 然后被端起給OpenGL
。 當(dāng)游戲圖形卡表現(xiàn)來臨超出工作站圖表表現(xiàn), professionnal 用戶和gamers 的需要成為同樣。
專業(yè)設(shè)計卡通者不想要賦予生命在wireframe 或被遮蔽的方式, 而是寧可必須工作在這個方式下由于工作站圖表硬件粗劣的紋理表現(xiàn)。 今天,
藝術(shù)家和用戶和游戲藝術(shù)家一樣要求高他們的場面質(zhì)量實時預(yù)覽和并且使用工具。 終于, 越來越3D renderers
譬如精神光芒利用從被賭博市場駕駛的前進的GPU 援助在離線3D rendering, 和好處在表現(xiàn)。
直到上述研究的鏈接被顯示, 我們能只假設(shè)這是觀點作為所有Mac 和Linux 比賽, 包括1720 年在Linux 游戲墳塋(http://www 。happypenguin 。org/list?sort=approved_date) 是openGL 根據(jù), 并且 扭矩引擎, 虛幻的引擎 并且其它普遍的3D 游戲引擎。
。