OpenGL vs Direct3D

2021-02-20 內核觀察

官方網站:https://edu.battlefire.cn

簡介

從2005年開始,圖形顯卡總會同時實現OpenGL和DirectX中的某個版本的API。比如說:2004年的DirectX 9和OpenGL 2,2008年的DirectX 10和OpenGL 3,2011年的DirectX 11和OpenGL 4。一般來說,支持更加新一代版本API的GPU能夠兼容老版本的API的調用,意思就是說:支持最新的DirectX 11的GPU可以運行DirectX 9的遊戲。

DirectX

1996年,第一個版本的Direct3D發布了之後受到了各種指責,因為即使是一些簡單的操作,比如狀態機的改變,都需要創建和提交那些叫做execute buffer的東西。與之相反的是,OpenGL的狀態機的改變只需要一個函數調用即可。那時候Direct3D的編程模型讓很多碼農失望透頂。遊戲編程領域非常出名的卡馬克大碼農就是其中的一個,他還勸說微軟放棄Direct3D而轉投OpenGL陣營。1997年,Chris Hecker在Game Developer雜誌上發表了類似的一則對微軟的公開信。

當DirectX的第二個版本也就是DirectX 5發布的時候,它使用新的DrawPrimitive替代掉了execute buffers那些操作,但是這個API仍然被認為是非常複雜的。按照Chris Hecker對微軟的公開信上的說法,DrawPrimitive這個API就是直接從OpenGL那邊抄過來的,不成熟的並且設計很糟糕,並且在架構上缺乏了一些讓OpenGL運行更快的東西。

頂著各方的吐槽,微軟仍然堅持搗鼓自己的這些東西,關於DirectX各個版本的變化以及進化史,可以參考微軟官方的Direct3D的相關頁面。

後來,曾經那些鄙視Direct3D的娃兒們開始慢慢的變得認可Direct3D的API了。在2007年2月的時候,卡馬克說道:DirectX9真的一套非常棒的API。雖然大家都認為我一直在跟DirectX抬槓,但是微軟確實一步一步的把DX改造成了一套非常乾淨的API,我非常喜歡使用DX來工作。

有一部分DX的功能從初代版本開始就沒有再改變過,其中最熟悉就是微軟的COM玩法(Component Object Model)。COM玩法的一個好處就在於你可以使用任何兼容COM的語言來使用COM組件,比如:Object Pascal、Microsoft Visual C++、C#以及Visual Basic .NET。

OpenGL

OpenGL是通過C語言實現的一套API,你可以通過C語言把它導出到其他的程式語言裡面去。OpenGL是基於狀態機的,它不依賴任何一個程式語言的特性,並且你可以通過合適的方法把它綁定到任何程式語言。

Comparison

通常來說,Direct3D是被設計用來做3D可視化硬體接口的。Direct3D讓遊戲編程人員從硬體編程中得到了解放。而OpenGL則是被設計為用來通過硬體來加速3D渲染系統的,它是軟體可選的一個功能。這兩套API一開始是按照兩種不同的思路來設計的。所以,從功能上就影響了兩套API的工作方式。其中一個非常重要的不一樣的地方就是關於硬體資源的管理。DX是期望應用程式的編碼人員來自己管理硬體資源的,而OpenGL則是幫助了硬體編碼人員來管理硬體資源。這種差異就導致了OpenGL減小了學習OpenGL開發的人的難度,但是增加了驅動實現的複雜度。對於DX來說,應用開發人員的入門門檻就相對高了一點,他們需要自己去管理硬體資源,但是這些管理也並不是特別的難。

直到2005年,這兩套API的另一個非常重要的不同的地方就是它們管理渲染目標的方式,在Direct3D中,它是通過SetRenderTarget來做的,而在早期的OpenGL版本裡,它需要對Pixel Buffer進行操作。這麼幹是比較糟糕的玩法並且有很大風險:如果與驅動實現預期的方式不一樣的話,那麼就可能會fallback到沒有硬體加速的版本,這樣性能就會下降。然而隨著大家都開始支持FrameBuffer Object擴展,使得OpenGL能夠提供跟DX類似的切換渲染目標的方式。總體來看,除了一小部分特性,OpenGL與DX提供了幾乎一模一樣的功能。

一般來說,硬體和軟體製造商會非常頻繁地對DX的變化做出相應的反應,比如從DX9裡的PS,到DX10裡的Stream Processor,再到DX11裡的Tessellation Processor。而與之相反,OpenGL這邊的新的特性一般是由硬體廠商先實現,然後才會被標準化掉。

相關焦點

  • Creator 3D 材質系統:曲面效果如何實現?
    4、先來看 CCEffect 部分:CCEffect %{ techniques: - name: opaque passes: - vert: general-vs:vert # builtin header frag: unlit-fs:
  • Hohhot-Taipei Direct Flight Opens
    Taiwan-based airline EVA Air launched a direct flight route between Taipei and the mainland city of Hohhot on Monday.
  • Github霸榜:從零開始學3D著色器編程
    Linux:g++\ -c main.cxx \ -o 3d-game-shaders-for-beginners.o \ -std=gnu++11 \ -O2 \ -I/usr/include/python2.7/ \ -I/usr/include/panda3d/編譯完成後執行:g++\ 3d-game-shaders-for-beginners.o
  • Hohhot-Taipei direct flight opens
    HOHHOT -- Taiwan-based airline EVA Air launched a direct flight route between Taipei and the mainland city of Hohhot on Monday.
  • 3d列印的主要缺點,是需要重新批量生產3d列印材料
    因此,優秀的3d列印印表機可以幫助克服這些問題。這篇文章介紹了本文將講述的最優秀的3d印表機。三維雷射列印技術3d列印的選材與其他多數傳統工藝相同,3d列印人們在選擇材料時通常需要關注材料的重量、彈性、密度、顏色、硬度和大小。
  • 2D與3D動畫的融合
    百藝匯聚 · 我們只做專業的大家好,各位期待已久的2d與3d動畫的融合終於來了!
  • Own3d.tv是怎麼死的?
    2012年年底爆出Own3d拖欠主播工資超過3個月(是不是有點耳熟?),廣告分紅分發不及時以及分紅比例上沒有兌現當時的承諾。 2013年1月31號,Own3d宣布破產。 在這1年多的時間裡發生了什麼讓Own3d突然死掉?我認為最根本的問題是Own3d完全沒有控制住成本。 P.S.
  • vr全景和3d全景的區別,就是3d全景只有一個內容的二維的形式
    vr全景和3d全景的區別就是3d全景只有一個內容的二維的形式,有聲音、色彩以及場景,而vr全景呢,是分為兩個真正意義上的平面的,他是能夠讓人一下子就感覺到大部分有3d的概念!2維全景和3d全景的區別還是挺大的!
  • NBA的3D球員是什麼意思?
    很多人會說,如果想要克制小球戰術的話,更重要的是提升速度,其實全程速度只是一方面,如果一支球隊當中擁有一個非常好的3d球員,這才是控制小球戰術的關鍵那麼,在NBA當中,3d球員到底是一個什麼意思呢?其實根據名字就可以很好的去理解他,數字指的是可以投三分,而字母指的是能夠防守,山地球員,也就是說既能在外線得分,又能夠防守的球員。
  • 3d高清投影機哪款好 3d高清投影機推薦【圖文】
    3d 高清投影機推薦一:極米Z4X  這款投影機是目前銷售比較好的投影機,比較適合大家休閒娛樂觀影使用,也是京東網站上銷售量第一的一款3d投影機,這款投影機的聲音和畫質可以極大的滿足消費者的聽覺和視覺的體驗
  • 模具製造工業革命大勢,3d列印的歷史與原理
    增材製造其實就是我們俗稱的3d列印技術,是利用數位化控制機械設備,最終產生3d列印材料,通過耗材作用後,生成3d列印所需要的樣貌產品。可以說是以其簡單粗暴的列印方式,迅速地在模具製造業掀起一場大浪,甚至創造出了模具界的第一個奇蹟——首創100%原型3d印表機。
  • 3D遊戲編程:Direct3D幫我們做了哪些事情?
  • 3d建模軟體手機版有哪些?這3款好用的手機3d建模軟體你一定要有
    3d建模軟體手機版有哪些?對於一些三維設計師來說,能夠在手機上隨時隨地進行三維建模是一件很方便的事。本期,模型云為您整理了這3款好用的手機3d建模軟體介紹,快來和我們一起看看吧!3款好用的手機3d建模軟體3d建模軟體手機版一:MeshMixerMeshMixer是一款操作簡單的手機3d建模工具,其主要功能包括3D列印改進、製造切片工具、拖放及把原本組合在一起的多個不同的幾何體分成單獨的對象等,且支持PLY二進位格式、3Dconnexion空間滑鼠。
  • 魔法貓3D列印筆商標成功註冊!愛上創造,魔法貓和您一起3D繪畫!
    魔法貓經典款低溫3d列印筆魔法貓經典款低溫3d列印筆魔法貓3d列印筆無線款魔法貓3d列印筆無線款
  • 3D LUT電影調色教程詳解
    如何完整的運用3d lut調出電影色調先來看看對比圖lut這個功能,在ps cc以上的版本都是自帶3d lut的,ps裡面叫做顏色查找可以看到我用了第一層3d lut之後對比色彩一下就出來了接下來我們還要增加第二層的3d lut我選擇的是
  • 3d動漫是怎麼製作的
    現在3d技術發展迅速,平均每上映的三部動畫裡就有一部是3d動畫,那麼這個動畫到底是怎麼做出來的?怎麼樣才能get這項技能呢?3d的布光與電影布光有很多相似之處,除了像電影燈光師一樣分辨如何創造氣氛和畫面之外,也可通過控制光的種類、強度、形狀、顏色、反射方式、陰影等來模擬真實的光影效果。調整材質的物理性質可以模擬出不同的效果:金屬、塑料、皮質、玻璃等等。材質的紋理用Photoshop做出來圖片之後貼在模型上。6、合成非常重要的一個步驟,好的合成能化腐朽為神奇。
  • First direct:認識社交網絡的11類族群
    過去幾個月, first direct對1,500名Facebook和Twitter用戶進行了研究,以了解社會化媒體用戶族群的不同特徵。