Direct三D
Direct 三 D(簡稱:D 三 D)是微軟公司佇咧 Microsoft Windows 作業系統頂頭所開發的一套三 D 繪圖編程介面,是 DirectX 的一部份,目前廣為逐家顯示卡所支援。佮 OpenGL 同為電腦繪圖軟體佮電腦遊戲上捷使用的兩套繪圖編程介面之一。
一九九五年二月,軟軟仔收購了英國這个 Rendermorphics 公司,將 RealityLab 二鋪零技術發展成 Direct 三 D 標準,並整合甲講 Microsoft Windows 中,Direct 三 D 佇咧 DirectX 三允人零開始出現。後來佇咧 DirectX 八○零發表的時陣佮 DirectDraw 編程介面合併並改名做 DirectX Graphics。
架構
Direct 三 D 佮 Windows GDI 是仝層級組件。Direct 三 D 裝置有兩種無仝款的操作模式:windowed 和 exclusive。佇咧 windowed 模式下,著愛使用 back buffer。佇咧 Exclusive 模式下,Direct 三 D 直接呼叫顯示卡驅動程式,袂過得 GDI。
Direct 三 D 的抽象概念包括:devices , swap chains 和 resources。
有四項 device type,D 三 DDEVTYPE 定義矣裝置類型。
- HAL(hardware abstraction layer): 使硬體加速。
- reference:應用程式請求一个 reference 裝置。
- null reference:當系統無裝 SDK,但是應用程式請求一个 reference 裝置的時陣,伊就倒轉來一个 null reference。
- 會當插的軟體(Pluggable software); 裝置通過 RegisterDevice 裝置的方法提供。
每一个裝置至少愛有一个 swap chain . 一个 swap chain 會當來產生一个抑是偌个 back buffer surfaces。彩現目標(render target)嘛是啦 back buffer surface。back buffer 是屬於彩現(render)的部份。所有的 back buffer 攏是合理的 render target,但是並毋是所有的 render target 攏是 back buffer。surface 是一種資源,包含一个矩形集合的像素資料,如 color , alpha , depth / stencil。
資源有四个屬性:
- Type:資源的類型,如頂點來緩衝區(vexert buffer), 抑是一个彩現目標(render target)。
- Usage:資源的用途,如紋理(texture)抑是彩現目標,是一系統的旗標所組成,逐个旗標佔一 bits。
- Format:資料的格式,如一个二維表面的像素格式。比如講,D 三 DFMT \ _ R 八 G 八 B 八的值是一个二十四 bits 的色水深度(colour depth,八 bits 是紅色,八 bits 綠色以及八 bits 是藍色)。
- Pool:資源所分配的內部記憶體空間類型。
管道
Direct 三 D 十 API 定義矣 vertices(頂點), textures(紋理), buffers(緩衝區), 以及 state 群組轉換到螢幕頂懸的流程。按呢的流程會當描述做是 rendering pipeline(彩現管線), 其中有著濟濟無仝的階段 . Direct 三 D 十彩現管線的各階段包括:are :
一 . 輸入組裝(Input Assembler): 佇程式內底讀到上點,閣將程式提供的資料裝入去管線。 二 . 上點著色 ia̋n-jín(Vertex Shader): 逐改處理一个頂點,比如講換換、貼圖、光照。 三 . 幾何著色器(Geometry Shader): Shader Model 四配零引進幾何著色器,使用 Shader 資源來處理點、線、面的幾何坐標變換,一改上濟處理六个點,快速地將模型類似的頂點結合起來進行運算。此一過程無需要 CPU 參與喔。 四 . 流輸出(Stream Output): 將 Vertex Shader 和 Pixel Shader 處理完成的資料輸出予使用者。 五 . 光柵化(Rasterizer): 共彼算完的頂點共轉做像素,閣共像素(pixels)輸出予 pixel shader . 遮也會當執行其他的工課,像講切割非視覺性的像素,抑是講對頂點進行插值以得著像素資料。 六 . 像素著色 ia̋n-jín(Pixel Shader): 決定最後欲往彩現目標(render targe)寫入去的像素色水,仝時陣嘛會當計算一个準備寫著深度緩衝區的深度值。 七 . 輸出混合(Output Merger): 接收是對 pixel shader 的 slice,傳統咧做 Stencil 測試佮 Depth 測試,整併各種無仝的輸出資料,用以建立上尾仔結果。
顯示模式
Direct 三 D 有兩種 display modes :
- 全螢幕模式(Fullscreen mode): 全螢幕是指畫面全部予 Direct 三 D 所占,袂閣顯示講其他的視窗畫面。目前市面上發展的遊戲軟體加採用此模式。
- 視窗模式(Windowed mode): 視窗模式是講會當有偌看窗仔同時出現佇螢幕頂懸。
歷史
一九九二年,Servan Keondjian 開創 RenderMorphics 公司,成立了一个 Reality Lab 實驗室,專事三 D 圖形技術佮 API 技術研究。有兩種版本的 API 被釋出。一九九五年二月微軟仔買落來 RenderMorphics,由 Keondjian 佇咧 Windows 九十五上開發三 D 圖形 ia̋n-jín,主持 Direct 三 D 專案的開發。
Window 九十五推出的時,微軟一口氣發表矣DirectX 一垺零、DirectX 二孵空和DirectX 三-c零。DirectX 一孵空推出的時陣,干焦包括 DirectDraw、DirectPlay、DirectInput、DirectSound 四部份,DirectX 二孵空內附了 Direct 三 D,但是功能有限,無法度佮 OpenGL、三 dfx 等 API 函式相提並論。一九九六年九月發布的 Direct 三更零予人認為是 DirectX 的頭一套完整版本。無偌久,DirectX 三允空更新三允空 a、三-c零 b,版號對四堵空四 . 空九空空六八增加到矣「四配空四 . 空空空六九」,干焦是附加一个予人叫做 Direct 三 D 的組件,這正正就是 Keondjian 的傑作。彼陣的 Direct 三 D 有兩種模式,一是 Retain 模式,另外一个是 Immediate 模式,攏以 COM 建構成就。一九九六年 Westwood 工作室發布以 DirectX 開發的即時戰略遊戲《紅色警戒》,大賣千兩萬套。
DirectX 四配零並無推出就有DirectX 五曉空。一九九七年六月推出 DirectX 五曉空,加入 DrawPrimitive API,加入矣著 MMX 的支援,無偌久軟勢閣推出支援 D 三 D 加速卡的 DirectX 五曉空 a 版佮五配一版、五孵二版。
Direct 三 D 六板零,一九九八年秋微軟推出,引進偌重的貼圖(multitxture)以及 stencil buffer
Direct 三 D 七鼗零引進硬體座標轉換以及光影計算(Hardware Transform and Lighting), 並支援 . dds 檔。
Direct 三 D 八○零是引進會當做管道(Programable Function Pipeline)的概念,Direct 三 D 佇咧八堵空版的較早干焦會當做工課佇咧固定的管道(Fixed Function Pipe-line)的模式下。二空空一年微軟正式發表的 Direct 三 D 八摃零支援處理頂點的 Vertex Shader,猶閣有處理像素的 Pixel Shader。使 Direct 三 D 的技術正式超過敵人 OpenGL。DirectX 八中的著色器是用低坎著色器語言(Low Level Shading Language)編寫的。
Direct 三 D 九九零使用 HLSL(全稱 High Level Shading Language)編寫 Vertex Shader 和 Pixel Shader,對色器的編寫佮所產生程式碼的效率來,並且大幅地縮短設計時間。Windows Vista 推出 DirectX 的兩種新的類型:Direct 三 D 九 Ex 和 Direct 三 D 十。Direct 三 D 九 Ex 是 DirectX 九的擴充版,除了 Direct 三 D 九外,閣增加矣 Windows Vista driver 部份新功能的應用程式設計的。Direct 三 D 九 Ex 和 Direct 三 D 十均構建於 WDDM 之上。只有透過 WDDM 才會當佇 Vista 最使用 Direct 三 D。
Direct 三 D 十
Direct 三 D 十相對 Direct 三 D 九大量的代碼重新來編寫,Direct 三 D 十著眼佇高階繪圖程式,所有 render 攏愛寫 shader。但本質的功能並無真大的改變,干焦會當算講是對舊 XP 時代的問題重新閣較正,提供閣較懸的可程式化佮資源運用,以適合 Vista 使用。
Direct 三 D 十新特色:
- 全新的 graphics pipeline:
- fixed pipeline 攏改做 programmable 的 shader,
- 加添 geometry shader、stream out,
- culling、cliping、blending 等 stage 合為 output merger stage
- 新的 resource type : constant buffer、texture array。Texture array 可容真濟五百十二个 Texture。
- resource 引進 view 的概念
- guaranteed feature set
- GPU 呈現濟工(multitasking)
Direct 三 D 十曉一
Direct 三 D 十曉一是 Direct 三 D 十摃零的小型的閣較新,二空空七年八月微軟釋出 Direct 三 D 十配一佮 Shader Model 四配一的測試版本。Direct 三 D 十二一規定幾个閣較濟圖像品質標準為圖表供營商,予開發商對圖像品質(image quality)的閣較濟控制。XAudio 二將取代 DirectSound,成做上新的跨平台音訊 API。
Direct 三 D 十一
Direct 三 D 十一隻構 Direct 三 D 十的基礎之上,但是佮招於 Direct 三 D 十支援 Vista 作業系統,Direct 三 D 十一閣較會當支援 Windows 七及 Windows Vista。Direct 三 D 十一新增以下的功能:
- 鞏Festival(Tessellation , 即曲面幼分)
- 加執行緒彩現(Multithread Render)
- 算著色器(Compute Shader): 支援 GPGPU,提供新版 HLSL 語言,佮 nVidia 的 CUDA 抑是 OpenCL 功能類似。
其他閣有物件導向化的 Shader Model 五等功能。進前 DirectX 十猶是單執行緒,檔案存取佮繪圖指令共享仝一个執行緒,容易造成畫面沓沓仔的現象,佮 DirectX 十相比,Direct 三 D 十一有了閣較好的解決方案。
DirectX十一的 pipeline 新增 Hull Shader、Tessellator、Domain Shader 來實現 tessellation , 會當快速予成做三 D 的小三角型快速增加。至於 Computer Shader 著著 GPGPU 的實現,以 GPU 的平行處理能力佮浮點運算能力來實現 CPU 的運算,會當同時支援 ATI 以及 Nvidia 的顯示卡,無受繪圖流程的限制。DirectX 十一閣支援 Intel 的支援 Ray Tracing(光線佮蹤)佮 Rasterization(光柵化)技術,使三 D 效果閣較真實,閣較逼真。
以 Direct 三 D 開發三 D 圖形程式,會使採用 COM inteface,嘛會使採用 . NET Framework 的方式,WPF 可以用 Direct 三 D 九佮 GPU。Direct 三 D 十一技術是 DX 十曉一的超集,支援 DX 十一孵空、DX 十 . 十分之一 . 零、DX 九 . 九分之三 . 九分之二 . 一等。
Windows 七 Desktop Windows Manager 就會支援 Direct 三 D 十曉一 API。會當顯示卡帶闊的佔用率降低大約是五十。DirectX 十一會當向下相容佇咧 DirectX 十的顯示卡,同時嘛會當予逐家佇 Windows 七佮 Vista 上執行。
Direct 三 D 十二
Direct 三 D 佮 Windows Vista
Vista 引入來 DirectX 的兩種新的類型:Direct 三 D 九 Ex 和 Direct 三 D 十。DirectX 十字愛真適用 Windows Vista,針對 Windows Vista 進行了全新構建,構建於 Vista 顯示器驅動程式模型 ( WDDM ) 之上,閣引入新的硬體模式、繪圖管線佮彩現特性,予開發人員閣較倚硬體。一寡因為遊戲需要 SM 二孵空,Vista 將使用 SM 二嬸空來彩現桌面。
範例
用 Direct 三 D 九畫三角形:
用 Direct 三 D 十一畫三角形:
注釋
參見
- Wing
- OpenGL
- HLSL
- WDDM
外部連結
- DirectX website
- DirectX 十 : The Future of PC Gaming Technical article discussing the new features of DirectX 十 and their impact on computer games