什麼是DirectX?DX9和DX10區別

2021-04-20 19:51:41 字數 3993 閱讀 9899

逼真的3d遊戲常常讓我們廢寢忘食,這些都應歸功於顯示卡強大的3d運算功能。但作業系統和應用軟體通常不能直接去使用顯示卡的3d加速功能,必須通過系統中的乙個介面去呼叫,這就是opengl和d3d的作用。 

directx是一種圖形應用程式介面(api),並不是乙個單純的圖形api,它是由微軟公司開發的用途廣泛的api,它包含有direct graphics(direct 3d+direct draw)、direct input、direct play、direct sound、direct show、direct setup、direct media objects等多個元件,它提供了一整套的多**介面方案。只是其在3d圖形方面的優秀表現,讓它的其它方面顯得暗淡無光(ps:我們常將d3d和。微軟將定義它為「硬體裝置無關性」。direct是直接的意思,x是很多東西,加在一起就是一組具有共性的東西。

簡單的說它是乙個輔助軟體,乙個提高系統效能的加速軟體。從內部原理**,directx 就是一系列的 dll (動態連線庫),通過這些 dll,開發者可以在無視於裝置差異的情況下訪問底層的硬體,directx 封裝了一些 com(component object model)物件,這些 com 物件為訪問系統硬體提供了乙個主要的介面。

directx的發展經歷了1.0-10很多版本,現在我們在選購顯示卡的時候,經常聽說「xx顯示卡不支援dx9.0」等等,顯示卡所支援的directx版本已成為評價顯示卡效能的標準之一。

現在就一起來回顧以下directx的發展歷程。

directx 1.0

第一代的directx很不成功,推出時眾多的硬體均不支援,當時基本都採用專業圖形api-opengl,缺乏硬體的支援成了其流行的最大障礙。

directx 1.0版本是第乙個可以直接對硬體資訊進行讀取的程式。它提供了更為直接的讀取圖形硬體的效能,使開發的遊戲能實現對二維(2d)影象進行加速。不包括3d功能,還處於乙個初級階段。

directx 2.0

directx 2.0在二維圖形方面做了些改進,增加了一些動態效果,採用了direct 3d的技術。這樣directx 2.0與directx 1.0有了相當大的不同。在directx 2.0中,採用了「平滑模擬和rgb模擬」兩種模擬方式對三維(3d)影象進行加速計算的,正式踏入了3d領域。

directx 3.0

directx 3.0的推出是在2023年最後乙個版本的windows95發布後不久,此時3d遊戲開始深入人心,而那時的3dfx公司是最為強大的顯示卡製造商,它的glide介面自然也受到最廣泛的應用,但隨著3dfx公司的沒落,voodoo顯示卡的衰敗,glide介面才逐漸消失了。

directx 3.0是directx 2.0的簡單公升級版,它對directx 2.0的改動並不多。包括對directsound(針對3d聲音功能)和directplay(針對遊戲/網路)的一些修改和公升級。directx 3.0整合了較簡單的3d效果,還不是很成熟。

directx 5.0

微軟公司並沒有推出directx 4.0,而是直接推出了directx 5.0。此版本對direct3d做出了很大的改動,加入了霧化效果、alpha混合等3d特效,使3d遊戲中的空間感和真實感得以增強,還加入了s3的紋理壓縮技術。

同時,directx 5.0在其它各元件方面也有加強,在音效卡、遊戲控制器方面均做了改進,支援了更多的裝置。因此,directx發展到directx 5.0才真正走向了成熟。此時的directx效能完全不遜色於其它3d api,而且大有後來居上之勢。

directx 6.0

directx 6.0推出時,其最大的競爭對手之一glide,已逐步走向了沒落,而directx則得到了大多數廠商的認可。directx 6.0中加入了雙線性過濾、三線性過濾等優化3d影象質量的技術,遊戲中的3d技術逐漸走入成熟階段。

directx 7.0

directx 7.0最大的特色就是支援t&l,中文名稱是「座標轉換和光源」。3d遊戲中的任何乙個物體都有乙個座標,當此物體運動時,它的座標發生變化,這指的就是座標轉換;3d遊戲中除了場景+物體還需要燈光,沒有燈光就沒有3d物體的表現,無論是實時3d遊戲還是3d影像渲染,加上燈光的3d渲染是最消耗資源的。雖然opengl中已有相關技術,但此前從未在民用級硬體中出現。 

在t&l問世之前,位置轉換和燈光都需要cpu來計算,cpu速度越快,遊戲表現越流暢。使用了t&l功能後,這兩種效果的計算用顯示卡的gpu來計算,這樣就可以把cpu從繁忙的勞動中解脫出來。換句話說,擁有t&l顯示卡,使用directx 7.0,即使沒有高速的cpu,同樣能流暢的跑3d遊戲。這就是為什麼玩大型3d遊戲時顯示卡比cpu更重要的原因。

directx 7.0a

增強了力反饋遊戲控制裝置的效能和相容性。

directx 8.0/8.0a

directx 8.0的推出引發了一場顯示卡革命,它首次引入了「畫素渲染」概念,同時具備畫素渲染引擎(pixel shader)與頂點渲染引擎(vertex shader),反映在特效上就是動態光影效果。同硬體t&l僅僅實現的固定光影轉換相比,vs和ps單元的靈活性更大,它使gpu真正成為了可程式設計的處理器。這意味著程式設計師可通過它們實現3d場景構建的難度大大降低。通過vs和ps的渲染,可以很容易的寧造出真實的水面動態波紋光影效果。此時directx的權威地位終於建成。

directx 8.1

pixel shader公升級到1.2、1.3、1.4版,可以支援最高每時鐘28指令執行       

directx 9.0 

2023年底,微軟發布directx9.0。directx 9中ps單元的渲染精度已達到浮點精度,傳統的硬體t&l單元也被取消。全新的vertexshader(頂點著色引擎)程式設計將比以前複雜得多,新的vertexshader標準增加了流程控制,更多的常量,每個程式的著色指令增加到了1024條。sm2.0的shader效能更強,支援最高96指令的pixel shader長度,同時directplay和一些音訊方面也有大幅提公升。

directx 9.0c

引入了對shader model 3.0(包括pixel shader 3.0 和vertex shader 3.0兩個著色語言規範)的全面支援。舉例來說,directx 9.0b的shader model 2.0所支援的vertex shader最大指令數僅為256個,pixel shader最大指令數更是只有96個。而在最新的shader model 3.0中,vertex shader和pixel shader的最大指令數都大幅上公升至65535個,全新的動態程式流控制、 位移貼圖、多渲染目標(mrt)、次表面散射 subsu***ce scattering、柔和陰影 soft shadows、環境和地面陰影 environmental and ground shadows、全域性照明 (global illumination)等新技術特性,使得geforce 6、geforce7系列以及radeon x1000系列立刻為新一代遊戲以及具備無比真實感、幻想般的複雜的數字世界和逼真的角色在影視品質的環境中活動提供強大動力。

因此directx 9.0c和shader model 3.0標準的推出,可以說是directx發展歷程中的重要轉折點。在directx 9.0c中,shader model 3.0除了取消指令數限制和加入位移貼圖等新特性之外,更多的特性都是在解決遊戲的執行效率和品質上下功夫,shader model 3.0誕生之後,人們對待遊戲的態度也開始從過去單純地追求速度,轉變到遊戲畫質和執行速度兩者兼顧。因此shader model 3.0對遊戲產業的影響可謂深遠。

dx9.0c場景

directx 10

directx 10的主要優勢便是最大程度地降低了cpu負載,主要通過三個途徑來達到這個目的:第一,修改api核心,使得繪製物體和切換材質特效時的消耗降低,提高繪圖效率;第二,引入新的機制,降低圖形運算操作對cpu的依賴性,使更多的運算在gpu中完成;第三,使大量的物體可以通過呼叫單條directx繪製命令進行批量繪製。       

dx10場景(對比上圖,可以看出dx10更逼真,當然有的遊戲不支援dx10的特效則沒什麼區別

function imgzoom(id)//重新設定大小 防止撐破** else } window.onload = function() { var imgs = $("content").getelementsbytagname("img"); var i=0; for(;i

什麼是4D列印?

3d與4d列印技術 3d列印過程被廣泛用於工業領域,包括航空航天,汽車,醫療以及食品和飲料。不過,近年來,研究人員已經開發出方法,通過利用第四維度,使這項創新技術變得更加複雜。儘管第四維仍然是物理學家,工程師和數學家多年來一直在理論化的乙個神秘的,幾乎是神秘的概念,但是在涉及增材製造時,它僅是指除了...

什麼是3D引擎

3d引擎作為乙個名詞已經存在了很多年,但即使是一些專業的引擎設計師,也很難就它的定義達成乙個共識。通常來說,3d引擎作為一種底層工具支援著高層的圖形軟體開發。你可以把它看成是對3d api的封裝,對一些圖形通用演算法的封裝,對一些底層工具的封裝。我無法準確的定義3d引擎的含義和作用,因為針對不同的使...

什麼是3D引擎

3d引擎作為乙個名詞已經存在了很多年,但即使是一些專業的引擎設計師,也很難就它的定義達成乙個共識。通常來說,3d引擎作為一種底層工具支援著高層的圖形軟體開發。你可以把它看成是對3d api的封裝,對一些圖形通用演算法的封裝,對一些底層工具的封裝。我無法準確的定義3d引擎的含義和作用,因為針對不同的使...